From b5c957d4d14799dfdbb948cdb3156ce70d1aa515 Mon Sep 17 00:00:00 2001 From: Alexander Bakker Date: Mon, 14 May 2018 21:02:35 +0200 Subject: [PATCH] Prompt the user about unsaved changes in SlotManagerActivity Close #13 --- .../me/impy/aegis/ui/EditProfileActivity.java | 10 +++---- .../me/impy/aegis/ui/SlotManagerActivity.java | 29 ++++++++++++++++--- .../me/impy/aegis/ui/dialogs/Dialogs.java | 11 +++++++ 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/me/impy/aegis/ui/EditProfileActivity.java b/app/src/main/java/me/impy/aegis/ui/EditProfileActivity.java index d99ffd82..6430dde8 100644 --- a/app/src/main/java/me/impy/aegis/ui/EditProfileActivity.java +++ b/app/src/main/java/me/impy/aegis/ui/EditProfileActivity.java @@ -214,12 +214,10 @@ public class EditProfileActivity extends AegisActivity { return; } - new AlertDialog.Builder(this) - .setTitle("Discard changes?") - .setMessage("Your changes have not been saved") - .setPositiveButton(R.string.save, (dialog, which) -> onSave()) - .setNegativeButton(R.string.discard, (dialog, which) -> super.onBackPressed()) - .show(); + Dialogs.showDiscardDialog(this, + (dialog, which) -> onSave(), + (dialog, which) -> super.onBackPressed() + ); } @Override diff --git a/app/src/main/java/me/impy/aegis/ui/SlotManagerActivity.java b/app/src/main/java/me/impy/aegis/ui/SlotManagerActivity.java index b5a6cf6f..fb0f453b 100644 --- a/app/src/main/java/me/impy/aegis/ui/SlotManagerActivity.java +++ b/app/src/main/java/me/impy/aegis/ui/SlotManagerActivity.java @@ -23,6 +23,7 @@ import me.impy.aegis.db.slots.Slot; import me.impy.aegis.db.slots.SlotCollection; import me.impy.aegis.db.slots.SlotException; import me.impy.aegis.helpers.FingerprintHelper; +import me.impy.aegis.ui.dialogs.Dialogs; import me.impy.aegis.ui.dialogs.FingerprintDialogFragment; import me.impy.aegis.ui.dialogs.PasswordDialogFragment; import me.impy.aegis.ui.views.SlotAdapter; @@ -33,6 +34,8 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li private SlotCollection _slots; private SlotAdapter _adapter; + private boolean _edited = false; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -92,12 +95,11 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li findViewById(R.id.button_add_fingerprint).setVisibility(visibility); } - private boolean onSave() { + private void onSave() { Intent intent = new Intent(); intent.putExtra("slots", _slots); setResult(RESULT_OK, intent); finish(); - return true; } @Override @@ -105,12 +107,15 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li switch (item.getItemId()) { case android.R.id.home: onBackPressed(); - return true; + break; case R.id.action_save: - return onSave(); + onSave(); + break; default: return super.onOptionsItemSelected(item); } + + return true; } @Override @@ -119,6 +124,19 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li return true; } + @Override + public void onBackPressed() { + if (!_edited) { + super.onBackPressed(); + return; + } + + Dialogs.showDiscardDialog(this, + (dialog, which) -> onSave(), + (dialog, which) -> super.onBackPressed() + ); + } + @Override public void onEditSlot(Slot slot) { /*EditText textName = new EditText(this); @@ -129,6 +147,7 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li .setView(textName) .setPositiveButton(android.R.string.ok, (dialog, whichButton) -> { String name = textName.getText().toString(); + _edited = true; }) .setNegativeButton(android.R.string.cancel, null) .show();*/ @@ -147,6 +166,7 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li .setPositiveButton(android.R.string.yes, (dialog, whichButton) -> { _slots.remove(slot); _adapter.removeSlot(slot); + _edited = true; updateFingerprintButton(); }) .setNegativeButton(android.R.string.no, null) @@ -164,6 +184,7 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li _slots.add(slot); _adapter.addSlot(slot); + _edited = true; updateFingerprintButton(); } diff --git a/app/src/main/java/me/impy/aegis/ui/dialogs/Dialogs.java b/app/src/main/java/me/impy/aegis/ui/dialogs/Dialogs.java index 81912428..0044c3f9 100644 --- a/app/src/main/java/me/impy/aegis/ui/dialogs/Dialogs.java +++ b/app/src/main/java/me/impy/aegis/ui/dialogs/Dialogs.java @@ -4,6 +4,8 @@ import android.app.Activity; import android.content.DialogInterface; import android.support.v7.app.AlertDialog; +import me.impy.aegis.R; + public class Dialogs { private Dialogs() { @@ -17,4 +19,13 @@ public class Dialogs { .setNegativeButton(android.R.string.no, null) .show(); } + + public static AlertDialog showDiscardDialog(Activity activity, DialogInterface.OnClickListener onSave, DialogInterface.OnClickListener onDiscard) { + return new AlertDialog.Builder(activity) + .setTitle("Discard changes?") + .setMessage("Your changes have not been saved") + .setPositiveButton(R.string.save, onSave) + .setNegativeButton(R.string.discard, onDiscard) + .show(); + } }