mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Solve VerifyError exception for old device
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user