Prompt the user about unsaved changes in SlotManagerActivity

Close #13
This commit is contained in:
Alexander Bakker 2018-05-14 21:02:35 +02:00
parent be222cd877
commit b5c957d4d1
3 changed files with 40 additions and 10 deletions

View file

@ -214,12 +214,10 @@ public class EditProfileActivity extends AegisActivity {
return; return;
} }
new AlertDialog.Builder(this) Dialogs.showDiscardDialog(this,
.setTitle("Discard changes?") (dialog, which) -> onSave(),
.setMessage("Your changes have not been saved") (dialog, which) -> super.onBackPressed()
.setPositiveButton(R.string.save, (dialog, which) -> onSave()) );
.setNegativeButton(R.string.discard, (dialog, which) -> super.onBackPressed())
.show();
} }
@Override @Override

View file

@ -23,6 +23,7 @@ import me.impy.aegis.db.slots.Slot;
import me.impy.aegis.db.slots.SlotCollection; import me.impy.aegis.db.slots.SlotCollection;
import me.impy.aegis.db.slots.SlotException; import me.impy.aegis.db.slots.SlotException;
import me.impy.aegis.helpers.FingerprintHelper; 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.FingerprintDialogFragment;
import me.impy.aegis.ui.dialogs.PasswordDialogFragment; import me.impy.aegis.ui.dialogs.PasswordDialogFragment;
import me.impy.aegis.ui.views.SlotAdapter; import me.impy.aegis.ui.views.SlotAdapter;
@ -33,6 +34,8 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li
private SlotCollection _slots; private SlotCollection _slots;
private SlotAdapter _adapter; private SlotAdapter _adapter;
private boolean _edited = false;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -92,12 +95,11 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li
findViewById(R.id.button_add_fingerprint).setVisibility(visibility); findViewById(R.id.button_add_fingerprint).setVisibility(visibility);
} }
private boolean onSave() { private void onSave() {
Intent intent = new Intent(); Intent intent = new Intent();
intent.putExtra("slots", _slots); intent.putExtra("slots", _slots);
setResult(RESULT_OK, intent); setResult(RESULT_OK, intent);
finish(); finish();
return true;
} }
@Override @Override
@ -105,12 +107,15 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li
switch (item.getItemId()) { switch (item.getItemId()) {
case android.R.id.home: case android.R.id.home:
onBackPressed(); onBackPressed();
return true; break;
case R.id.action_save: case R.id.action_save:
return onSave(); onSave();
break;
default: default:
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
return true;
} }
@Override @Override
@ -119,6 +124,19 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li
return true; return true;
} }
@Override
public void onBackPressed() {
if (!_edited) {
super.onBackPressed();
return;
}
Dialogs.showDiscardDialog(this,
(dialog, which) -> onSave(),
(dialog, which) -> super.onBackPressed()
);
}
@Override @Override
public void onEditSlot(Slot slot) { public void onEditSlot(Slot slot) {
/*EditText textName = new EditText(this); /*EditText textName = new EditText(this);
@ -129,6 +147,7 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li
.setView(textName) .setView(textName)
.setPositiveButton(android.R.string.ok, (dialog, whichButton) -> { .setPositiveButton(android.R.string.ok, (dialog, whichButton) -> {
String name = textName.getText().toString(); String name = textName.getText().toString();
_edited = true;
}) })
.setNegativeButton(android.R.string.cancel, null) .setNegativeButton(android.R.string.cancel, null)
.show();*/ .show();*/
@ -147,6 +166,7 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li
.setPositiveButton(android.R.string.yes, (dialog, whichButton) -> { .setPositiveButton(android.R.string.yes, (dialog, whichButton) -> {
_slots.remove(slot); _slots.remove(slot);
_adapter.removeSlot(slot); _adapter.removeSlot(slot);
_edited = true;
updateFingerprintButton(); updateFingerprintButton();
}) })
.setNegativeButton(android.R.string.no, null) .setNegativeButton(android.R.string.no, null)
@ -164,6 +184,7 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li
_slots.add(slot); _slots.add(slot);
_adapter.addSlot(slot); _adapter.addSlot(slot);
_edited = true;
updateFingerprintButton(); updateFingerprintButton();
} }

View file

@ -4,6 +4,8 @@ import android.app.Activity;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import me.impy.aegis.R;
public class Dialogs { public class Dialogs {
private Dialogs() { private Dialogs() {
@ -17,4 +19,13 @@ public class Dialogs {
.setNegativeButton(android.R.string.no, null) .setNegativeButton(android.R.string.no, null)
.show(); .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();
}
} }