diff --git a/app/src/main/java/com/keepassdroid/PasswordActivity.java b/app/src/main/java/com/keepassdroid/PasswordActivity.java index 9058433c9..060c840bd 100644 --- a/app/src/main/java/com/keepassdroid/PasswordActivity.java +++ b/app/src/main/java/com/keepassdroid/PasswordActivity.java @@ -268,10 +268,9 @@ private void errorMessage(int resId) { } // fingerprint related code here - private void initForFingerprint() { fingerPrintHelper = new FingerPrintHelper(this, this); - if (fingerPrintHelper.isFingerprintInitialized()) { + if (fingerPrintHelper.hasEnrolledFingerprints()) { // when text entered we can enable the logon/purchase button and if required update encryption/decryption mode passwordView.addTextChangedListener(new TextWatcher() { @@ -373,7 +372,9 @@ private int toggleMode(final int newMode) { break; case Cipher.DECRYPT_MODE: final String ivSpecValue = prefsNoBackup.getString(getPreferenceKeyIvSpec(), null); - fingerPrintHelper.initDecryptData(ivSpecValue); + if (ivSpecValue != null) { + fingerPrintHelper.initDecryptData(ivSpecValue); + } break; } return newMode; diff --git a/app/src/main/java/com/keepassdroid/compat/KeyGenParameterSpecCompat.java b/app/src/main/java/com/keepassdroid/compat/KeyGenParameterSpecCompat.java index e2dca8ae4..8dd2dd033 100644 --- a/app/src/main/java/com/keepassdroid/compat/KeyGenParameterSpecCompat.java +++ b/app/src/main/java/com/keepassdroid/compat/KeyGenParameterSpecCompat.java @@ -36,7 +36,7 @@ public class KeyGenParameterSpecCompat { static { try { - builder = Class.forName("android.security.keystore.KeyGenParameterSpec.Builder"); + builder = Class.forName("android.security.keystore.KeyGenParameterSpec$Builder"); buildConst = builder.getConstructor(String.class, int.class); builderBuild = builder.getMethod("build", (Class [])null); setBlockModes = builder.getMethod("setBlockModes", String[].class); @@ -59,9 +59,9 @@ public static AlgorithmParameterSpec build(String keystoreAlias, int purpose, St try { Object inst = buildConst.newInstance(keystoreAlias, purpose); - inst = setBlockModes.invoke(inst, new Object[] {blockMode}); + inst = setBlockModes.invoke(inst, new Object[] {new String[] {blockMode}}); inst = setUserAuthReq.invoke(inst, userAuthReq); - inst = setEncPad.invoke(inst, new Object[] {encPadding}); + inst = setEncPad.invoke(inst, new Object[] {new String[] {encPadding}}); return (AlgorithmParameterSpec) builderBuild.invoke(inst, null); diff --git a/app/src/main/java/com/keepassdroid/fingerprint/FingerPrintHelper.java b/app/src/main/java/com/keepassdroid/fingerprint/FingerPrintHelper.java index 503596e83..06701b4c9 100644 --- a/app/src/main/java/com/keepassdroid/fingerprint/FingerPrintHelper.java +++ b/app/src/main/java/com/keepassdroid/fingerprint/FingerPrintHelper.java @@ -142,7 +142,7 @@ public boolean isFingerprintInitialized() { public void initEncryptData() { if (!isFingerprintInitialized()) { - if (fingerPrintCallback != null) { + if (fingerPrintCallback != null && hasEnrolledFingerprints()) { fingerPrintCallback.onException(); } return; @@ -166,7 +166,7 @@ public void initEncryptData() { public void encryptData(final String value) { if (!isFingerprintInitialized()) { - if (fingerPrintCallback != null) { + if (fingerPrintCallback != null && hasEnrolledFingerprints()) { fingerPrintCallback.onException(); } return; @@ -194,6 +194,8 @@ public void initDecryptData(final String ivSpecValue) { fingerPrintCallback.onException(false); } return; + } else if (!hasEnrolledFingerprints()) { + return; } try { createNewKeyIfNeeded(false);