Solve VerifyError exception for old device

This commit is contained in:
J-Jamet
2018-02-14 17:23:47 +01:00
parent 82b59662f3
commit e574fba0a5
2 changed files with 52 additions and 48 deletions

View File

@@ -20,7 +20,6 @@
package com.keepassdroid.fingerprint; package com.keepassdroid.fingerprint;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.KeyguardManager; import android.app.KeyguardManager;
import android.content.Context; import android.content.Context;
import android.os.Build; import android.os.Build;
@@ -32,8 +31,6 @@ import android.support.v4.hardware.fingerprint.FingerprintManagerCompat;
import android.support.v4.os.CancellationSignal; import android.support.v4.os.CancellationSignal;
import android.util.Base64; import android.util.Base64;
import com.keepassdroid.compat.BuildCompat;
import java.io.IOException; import java.io.IOException;
import java.security.KeyStore; import java.security.KeyStore;
import java.security.KeyStoreException; import java.security.KeyStoreException;
@@ -47,6 +44,7 @@ import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.IvParameterSpec;
@RequiresApi(api = Build.VERSION_CODES.M)
public class FingerPrintHelper { public class FingerPrintHelper {
private static final String FINGERPRINT_KEYSTORE_KEY = "example-key"; private static final String FINGERPRINT_KEYSTORE_KEY = "example-key";
@@ -89,7 +87,6 @@ public class FingerPrintHelper {
} }
} }
@TargetApi(BuildCompat.VERSION_CODE_M)
public FingerPrintHelper( public FingerPrintHelper(
final Context context, final Context context,
final FingerPrintCallback fingerPrintCallback) { final FingerPrintCallback fingerPrintCallback) {
@@ -123,8 +120,7 @@ public class FingerPrintHelper {
} }
public static boolean isFingerprintSupported(FingerprintManagerCompat fingerprintManager) { public static boolean isFingerprintSupported(FingerprintManagerCompat fingerprintManager) {
return Build.VERSION.SDK_INT >= BuildCompat.VERSION_CODE_M return fingerprintManager != null
&& fingerprintManager != null
&& fingerprintManager.isHardwareDetected(); && fingerprintManager.isHardwareDetected();
} }
@@ -141,7 +137,6 @@ public class FingerPrintHelper {
return isFingerprintInit; return isFingerprintInit;
} }
@RequiresApi(api = Build.VERSION_CODES.M)
public void initEncryptData() { public void initEncryptData() {
if (!isFingerprintInitialized()) { if (!isFingerprintInitialized()) {
return; return;
@@ -182,7 +177,6 @@ public class FingerPrintHelper {
} }
} }
@RequiresApi(api = Build.VERSION_CODES.M)
public void initDecryptData(final String ivSpecValue) { public void initDecryptData(final String ivSpecValue) {
if (!isFingerprintInitialized()) { if (!isFingerprintInitialized()) {
return; return;

View File

@@ -107,8 +107,14 @@ public class NestedSettingsFragment extends PreferenceFragmentCompat {
} }
}); });
SwitchPreference fingerprintEnablePreference = (SwitchPreference) findPreference(getString(R.string.fingerprint_enable_key)); SwitchPreference fingerprintEnablePreference =
if (!FingerPrintHelper.isFingerprintSupported(FingerprintManagerCompat.from(getContext()))) { (SwitchPreference) findPreference(getString(R.string.fingerprint_enable_key));
// < M solve verifyError exception
boolean fingerprintSupported = false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
fingerprintSupported = FingerPrintHelper.isFingerprintSupported(
FingerprintManagerCompat.from(getContext()));
if (!fingerprintSupported) {
// False if under Marshmallow // False if under Marshmallow
fingerprintEnablePreference.setChecked(false); fingerprintEnablePreference.setChecked(false);
fingerprintEnablePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { fingerprintEnablePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@@ -123,45 +129,49 @@ public class NestedSettingsFragment extends PreferenceFragmentCompat {
} }
Preference deleteKeysFingerprints = findPreference(getString(R.string.fingerprint_delete_all_key)); Preference deleteKeysFingerprints = findPreference(getString(R.string.fingerprint_delete_all_key));
deleteKeysFingerprints.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { if (!fingerprintSupported) {
@Override deleteKeysFingerprints.setEnabled(false);
public boolean onPreferenceClick(Preference preference) { } else {
new AlertDialog.Builder(getContext()) deleteKeysFingerprints.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
.setMessage(getResources().getString(R.string.fingerprint_delete_all_warning)) @Override
.setIcon(getResources().getDrawable( public boolean onPreferenceClick(Preference preference) {
android.R.drawable.ic_dialog_alert)) new AlertDialog.Builder(getContext())
.setPositiveButton( .setMessage(getResources().getString(R.string.fingerprint_delete_all_warning))
getResources().getString(android.R.string.yes), .setIcon(getResources().getDrawable(
new DialogInterface.OnClickListener() { android.R.drawable.ic_dialog_alert))
@Override .setPositiveButton(
public void onClick(DialogInterface dialog, getResources().getString(android.R.string.yes),
int which) { new DialogInterface.OnClickListener() {
FingerPrintHelper.deleteEntryKeyInKeystoreForFingerprints( @Override
getContext(), public void onClick(DialogInterface dialog,
new FingerPrintHelper.FingerPrintErrorCallback() { int which) {
@Override FingerPrintHelper.deleteEntryKeyInKeystoreForFingerprints(
public void onInvalidKeyException(Exception e) {} getContext(),
new FingerPrintHelper.FingerPrintErrorCallback() {
@Override @Override
public void onFingerPrintException(Exception e) { public void onInvalidKeyException(Exception e) {
Toast.makeText(getContext(), R.string.fingerprint_error, Toast.LENGTH_SHORT).show(); }
}
});
PrefsUtil.deleteAllValuesFromNoBackupPreferences(getContext());
}
})
.setNegativeButton(
getResources().getString(android.R.string.no),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
}
}).show();
return false;
}
});
@Override
public void onFingerPrintException(Exception e) {
Toast.makeText(getContext(), R.string.fingerprint_error, Toast.LENGTH_SHORT).show();
}
});
PrefsUtil.deleteAllValuesFromNoBackupPreferences(getContext());
}
})
.setNegativeButton(
getResources().getString(android.R.string.no),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
}
}).show();
return false;
}
});
}
break; break;
case NESTED_SCREEN_DB_KEY: case NESTED_SCREEN_DB_KEY: