diff --git a/app/src/main/java/com/keepassdroid/PasswordActivity.java b/app/src/main/java/com/keepassdroid/PasswordActivity.java index 21bce4103..8740bbab9 100644 --- a/app/src/main/java/com/keepassdroid/PasswordActivity.java +++ b/app/src/main/java/com/keepassdroid/PasswordActivity.java @@ -309,12 +309,9 @@ public void onAuthenticationError( final int errorCode, final CharSequence errString) { - // this is triggered on stop/start listening done by helper to switch between modes so don't restart here - // errorCode = 5 - // errString = "Fingerprint operation canceled." - //onException(); - //confirmationView.setText(errString); - // true false fingerprint readings are handled otherwise with the toast messages, see below in code + if (errorCode != 5) { // FINGERPRINT_ERROR_CANCELLED (not defined in support library) + onException(errString); + } } @Override @@ -347,7 +344,7 @@ public void onAuthenticationSucceeded(final FingerprintManagerCompat.Authenticat @Override public void onAuthenticationFailed() { - onException(); + onException(R.string.fingerprint_notrecognized); } }); } @@ -363,17 +360,23 @@ private String getPreferenceKeyIvSpec() { } private int toggleMode(final int newMode) { - mode = newMode; - switch (mode) { - case Cipher.ENCRYPT_MODE: - fingerPrintHelper.initEncryptData(); - break; - case Cipher.DECRYPT_MODE: - final String ivSpecValue = prefsNoBackup.getString(getPreferenceKeyIvSpec(), null); - if (ivSpecValue != null) { - fingerPrintHelper.initDecryptData(ivSpecValue); - } - break; + if (mode != newMode) { + mode = newMode; + switch (mode) { + case Cipher.ENCRYPT_MODE: + fingerPrintHelper.initEncryptData(); + break; + case Cipher.DECRYPT_MODE: + final String ivSpecValue = prefsNoBackup.getString(getPreferenceKeyIvSpec(), null); + if (ivSpecValue != null) { + fingerPrintHelper.initDecryptData(ivSpecValue); + } + break; + } + } + else { + fingerPrintHelper.stopListening(); + fingerPrintHelper.startListening(); } return mode; @@ -467,7 +470,6 @@ public void handleDecryptedResult(final String value) { @Override public void onInvalidKeyException() { Toast.makeText(this, R.string.fingerprint_invalid_key, Toast.LENGTH_SHORT).show(); - checkAvailability(); // restarts listening } @Override @@ -478,10 +480,20 @@ public void onException() { @Override public void onException(boolean showMessage) { if (showMessage) { - Toast.makeText(this, R.string.fingerprint_error, Toast.LENGTH_SHORT).show(); + onException(R.string.fingerprint_error); } } + @Override + public void onException(int resId) { + Toast.makeText(this, resId, Toast.LENGTH_SHORT).show(); + } + + @Override + public void onException(CharSequence message) { + Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); + } + private class DefaultCheckChange implements CompoundButton.OnCheckedChangeListener { @Override diff --git a/app/src/main/java/com/keepassdroid/fingerprint/FingerPrintHelper.java b/app/src/main/java/com/keepassdroid/fingerprint/FingerPrintHelper.java index 06701b4c9..9a7b0470a 100644 --- a/app/src/main/java/com/keepassdroid/fingerprint/FingerPrintHelper.java +++ b/app/src/main/java/com/keepassdroid/fingerprint/FingerPrintHelper.java @@ -101,6 +101,9 @@ public interface FingerPrintCallback { void onException(boolean showWarningMessage); + void onException(CharSequence message); + + void onException(int resId); } public FingerPrintHelper( diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0c3c8388f..7a13bc40d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,6 +1,6 @@