@@ -9,6 +9,7 @@ import android.os.Handler
9
9
import androidx.annotation.StringRes
10
10
import androidx.biometric.BiometricConstants
11
11
import androidx.biometric.BiometricManager
12
+ import androidx.biometric.BiometricManager.Authenticators
12
13
import androidx.biometric.BiometricPrompt
13
14
import androidx.core.content.getSystemService
14
15
import androidx.fragment.app.FragmentActivity
@@ -60,13 +61,15 @@ object BiometricAuthenticator {
60
61
callback(Result .Success (result.cryptoObject))
61
62
}
62
63
}
63
- val biometricPrompt = BiometricPrompt (activity, { handler.post(it) }, authCallback)
64
- val promptInfo = BiometricPrompt .PromptInfo .Builder ()
65
- .setTitle(activity.getString(dialogTitleRes))
66
- .build()
67
- if (BiometricManager .from(activity).canAuthenticate(BiometricManager .Authenticators .DEVICE_CREDENTIAL )
68
- == BiometricManager .BIOMETRIC_SUCCESS || activity.getSystemService<KeyguardManager >()?.isDeviceSecure == true ) {
69
- biometricPrompt.authenticate(promptInfo)
64
+ val validAuthenticators = Authenticators .DEVICE_CREDENTIAL or Authenticators .BIOMETRIC_STRONG
65
+ val canAuth = BiometricManager .from(activity).canAuthenticate(validAuthenticators) == BiometricManager .BIOMETRIC_SUCCESS
66
+ val deviceHasKeyguard = activity.getSystemService<KeyguardManager >()?.isDeviceSecure == true
67
+ if (canAuth || deviceHasKeyguard) {
68
+ val promptInfo = BiometricPrompt .PromptInfo .Builder ()
69
+ .setTitle(activity.getString(dialogTitleRes))
70
+ .setAllowedAuthenticators(validAuthenticators)
71
+ .build()
72
+ BiometricPrompt (activity, { handler.post(it) }, authCallback).authenticate(promptInfo)
70
73
} else {
71
74
callback(Result .HardwareUnavailableOrDisabled )
72
75
}
0 commit comments