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.