From 17584ae5fb9b49d75f0b77252aadfa26cbbd5dcd Mon Sep 17 00:00:00 2001 From: tarsin Date: Tue, 6 Dec 2022 12:01:48 +0800 Subject: [PATCH] Avoid double authenticating on Android 10 --- .../com/hippo/ehviewer/ui/SecurityActivity.kt | 49 +++++++++++++++---- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/SecurityActivity.kt b/app/src/main/java/com/hippo/ehviewer/ui/SecurityActivity.kt index e417c22e6..2bf5f83ec 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/SecurityActivity.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/SecurityActivity.kt @@ -45,39 +45,68 @@ class SecurityActivity : AppCompatActivity() { onSuccess() } + @Synchronized private fun startAuthentication( title: String, subtitle: String? = null, confirmationRequired: Boolean = true, ) { + if (isAuthenticating) return + isAuthenticating = true startClass2BiometricOrCredentialAuthentication( title = title, subtitle = subtitle, confirmationRequired = confirmationRequired, executor = ContextCompat.getMainExecutor(this), - callback = AuthenticationCallback() + callback = callback( + { _, _, _ -> onFailed() }, + { _, _ -> onSuccess() }, + { onFailed() } + ) ) } - inner class AuthenticationCallback : AuthPromptCallback() { - override fun onAuthenticationSucceeded( + inline fun callback( + crossinline onAuthenticationError: ( + activity: FragmentActivity?, + errorCode: Int, + errString: CharSequence + ) -> Unit, + crossinline onAuthenticationSucceeded: ( activity: FragmentActivity?, result: BiometricPrompt.AuthenticationResult - ) { - onSuccess() - } - + ) -> Unit, + crossinline onAuthenticationFailed: ( + activity: FragmentActivity? + ) -> Unit + ) = object : AuthPromptCallback() { override fun onAuthenticationError( activity: FragmentActivity?, errorCode: Int, errString: CharSequence - ) { - moveTaskToBack(true) - } + ) = onAuthenticationError(activity, errorCode, errString) + + override fun onAuthenticationSucceeded( + activity: FragmentActivity?, + result: BiometricPrompt.AuthenticationResult + ) = onAuthenticationSucceeded(activity, result) + + override fun onAuthenticationFailed(activity: FragmentActivity?) = + onAuthenticationFailed(activity) } private fun onSuccess() { + isAuthenticating = false EhApplication.locked = false finish() } + + private fun onFailed() { + moveTaskToBack(true) + isAuthenticating = false + } + + companion object { + private var isAuthenticating = false + } } \ No newline at end of file