diff --git a/CHANGELOG.md b/CHANGELOG.md
index 90fb25597..037524b4c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@
Changes:
- Always show all import/export options and show a toast on actual issues (improves compat with XPrivacyLua)
+- Ask for confirmation when leaving edit view after making changes without saving
## v1.2.2 (2020-11-19)
diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java
index 51edd25ed..d1f411955 100644
--- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java
+++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java
@@ -21,7 +21,6 @@ import androidx.appcompat.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
-import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -73,6 +72,8 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
DBHelper db;
ImportURIHelper importUriHelper;
+ boolean hasChanged = false;
+
private void extractIntentFields(Intent intent)
{
final Bundle b = intent.getExtras();
@@ -124,6 +125,8 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
+ hasChanged = true;
+
generateIcon(s.toString());
}
@@ -137,6 +140,8 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
+ hasChanged = true;
+
String formatString = barcodeTypeField.getText().toString();
if (!formatString.isEmpty()) {
@@ -158,6 +163,8 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
+ hasChanged = true;
+
if (!s.toString().isEmpty()) {
if (s.toString().equals(getString(R.string.noBarcode))) {
hideBarcode();
@@ -362,6 +369,43 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
});
generateIcon(storeFieldEdit.getText().toString());
+
+ hasChanged = false;
+ }
+
+ @Override
+ public void onBackPressed() {
+ askBeforeQuitIfChanged();
+ }
+
+ private void askBeforeQuitIfChanged() {
+ if (!hasChanged) {
+ finish();
+ return;
+ }
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(R.string.leaveWithoutSaveTitle);
+ builder.setMessage(R.string.leaveWithoutSaveConfirmation);
+ builder.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener()
+ {
+ @Override
+ public void onClick(DialogInterface dialog, int which)
+ {
+ finish();
+ dialog.dismiss();
+ }
+ });
+ builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener()
+ {
+ @Override
+ public void onClick(DialogInterface dialog, int which)
+ {
+ dialog.dismiss();
+ }
+ });
+ AlertDialog dialog = builder.create();
+ dialog.show();
}
class EditCardIdAndBarcode implements View.OnClickListener
@@ -487,7 +531,7 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
switch(id)
{
case android.R.id.home:
- finish();
+ askBeforeQuitIfChanged();
break;
case R.id.action_delete:
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 67400f590..55061af7f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -134,4 +134,6 @@
All
Please confirm you want to delete this group
Failed opening a file manager. Please make sure one is installed.
+ Leave without saving
+ Are you sure you want to leave this screen? Changed made will not be saved.