Loading packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricViewBinder.kt +7 −1 Original line number Diff line number Diff line Loading @@ -339,7 +339,13 @@ object BiometricViewBinder { launch { delay(authState.delay) legacyCallback.onAction(Callback.ACTION_AUTHENTICATED) legacyCallback.onAction( if (authState.isAuthenticatedAndExplicitlyConfirmed) { Callback.ACTION_AUTHENTICATED_AND_CONFIRMED } else { Callback.ACTION_AUTHENTICATED } ) } } } Loading packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptAuthState.kt +17 −7 Original line number Diff line number Diff line Loading @@ -29,10 +29,16 @@ data class PromptAuthState( val needsUserConfirmation: Boolean = false, val delay: Long = 0, ) { private var wasConfirmed = false /** If authentication was successful and the user has confirmed (or does not need to). */ val isAuthenticatedAndConfirmed: Boolean get() = isAuthenticated && !needsUserConfirmation /** Same as [isAuthenticatedAndConfirmed] but only true if the user clicked a confirm button. */ val isAuthenticatedAndExplicitlyConfirmed: Boolean get() = isAuthenticated && wasConfirmed /** If a successful authentication has not occurred. */ val isNotAuthenticated: Boolean get() = !isAuthenticated Loading @@ -45,12 +51,16 @@ data class PromptAuthState( val isAuthenticatedByFingerprint: Boolean get() = isAuthenticated && authenticatedModality == BiometricModality.Fingerprint /** Copies this state, but toggles [needsUserConfirmation] to false. */ fun asConfirmed(): PromptAuthState = /** * Copies this state, but toggles [needsUserConfirmation] to false and ensures that * [isAuthenticatedAndExplicitlyConfirmed] is true. */ fun asExplicitlyConfirmed(): PromptAuthState = PromptAuthState( isAuthenticated = isAuthenticated, authenticatedModality = authenticatedModality, needsUserConfirmation = false, delay = delay, ) .apply { wasConfirmed = true } } packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModel.kt +1 −1 Original line number Diff line number Diff line Loading @@ -414,7 +414,7 @@ constructor( return } _isAuthenticated.value = authState.asConfirmed() _isAuthenticated.value = authState.asExplicitlyConfirmed() _message.value = PromptMessage.Empty _legacyState.value = AuthBiometricView.STATE_AUTHENTICATED Loading packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptAuthStateTest.kt +7 −1 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ class PromptAuthStateTest : SysuiTestCase() { with(PromptAuthState(isAuthenticated = false)) { assertThat(isNotAuthenticated).isTrue() assertThat(isAuthenticatedAndConfirmed).isFalse() assertThat(isAuthenticatedAndExplicitlyConfirmed).isFalse() assertThat(isAuthenticatedByFace).isFalse() assertThat(isAuthenticatedByFingerprint).isFalse() } Loading @@ -43,6 +44,7 @@ class PromptAuthStateTest : SysuiTestCase() { with(PromptAuthState(isAuthenticated = true)) { assertThat(isNotAuthenticated).isFalse() assertThat(isAuthenticatedAndConfirmed).isTrue() assertThat(isAuthenticatedAndExplicitlyConfirmed).isFalse() assertThat(isAuthenticatedByFace).isFalse() assertThat(isAuthenticatedByFingerprint).isFalse() } Loading @@ -50,10 +52,12 @@ class PromptAuthStateTest : SysuiTestCase() { with(PromptAuthState(isAuthenticated = true, needsUserConfirmation = true)) { assertThat(isNotAuthenticated).isFalse() assertThat(isAuthenticatedAndConfirmed).isFalse() assertThat(isAuthenticatedAndExplicitlyConfirmed).isFalse() assertThat(isAuthenticatedByFace).isFalse() assertThat(isAuthenticatedByFingerprint).isFalse() assertThat(asConfirmed().isAuthenticatedAndConfirmed).isTrue() assertThat(asExplicitlyConfirmed().isAuthenticatedAndConfirmed).isTrue() assertThat(asExplicitlyConfirmed().isAuthenticatedAndExplicitlyConfirmed).isTrue() } } Loading @@ -64,6 +68,7 @@ class PromptAuthStateTest : SysuiTestCase() { ) { assertThat(isNotAuthenticated).isFalse() assertThat(isAuthenticatedAndConfirmed).isTrue() assertThat(isAuthenticatedAndExplicitlyConfirmed).isFalse() assertThat(isAuthenticatedByFace).isTrue() assertThat(isAuthenticatedByFingerprint).isFalse() } Loading @@ -79,6 +84,7 @@ class PromptAuthStateTest : SysuiTestCase() { ) { assertThat(isNotAuthenticated).isFalse() assertThat(isAuthenticatedAndConfirmed).isTrue() assertThat(isAuthenticatedAndExplicitlyConfirmed).isFalse() assertThat(isAuthenticatedByFace).isFalse() assertThat(isAuthenticatedByFingerprint).isTrue() } Loading Loading
packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricViewBinder.kt +7 −1 Original line number Diff line number Diff line Loading @@ -339,7 +339,13 @@ object BiometricViewBinder { launch { delay(authState.delay) legacyCallback.onAction(Callback.ACTION_AUTHENTICATED) legacyCallback.onAction( if (authState.isAuthenticatedAndExplicitlyConfirmed) { Callback.ACTION_AUTHENTICATED_AND_CONFIRMED } else { Callback.ACTION_AUTHENTICATED } ) } } } Loading
packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptAuthState.kt +17 −7 Original line number Diff line number Diff line Loading @@ -29,10 +29,16 @@ data class PromptAuthState( val needsUserConfirmation: Boolean = false, val delay: Long = 0, ) { private var wasConfirmed = false /** If authentication was successful and the user has confirmed (or does not need to). */ val isAuthenticatedAndConfirmed: Boolean get() = isAuthenticated && !needsUserConfirmation /** Same as [isAuthenticatedAndConfirmed] but only true if the user clicked a confirm button. */ val isAuthenticatedAndExplicitlyConfirmed: Boolean get() = isAuthenticated && wasConfirmed /** If a successful authentication has not occurred. */ val isNotAuthenticated: Boolean get() = !isAuthenticated Loading @@ -45,12 +51,16 @@ data class PromptAuthState( val isAuthenticatedByFingerprint: Boolean get() = isAuthenticated && authenticatedModality == BiometricModality.Fingerprint /** Copies this state, but toggles [needsUserConfirmation] to false. */ fun asConfirmed(): PromptAuthState = /** * Copies this state, but toggles [needsUserConfirmation] to false and ensures that * [isAuthenticatedAndExplicitlyConfirmed] is true. */ fun asExplicitlyConfirmed(): PromptAuthState = PromptAuthState( isAuthenticated = isAuthenticated, authenticatedModality = authenticatedModality, needsUserConfirmation = false, delay = delay, ) .apply { wasConfirmed = true } }
packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModel.kt +1 −1 Original line number Diff line number Diff line Loading @@ -414,7 +414,7 @@ constructor( return } _isAuthenticated.value = authState.asConfirmed() _isAuthenticated.value = authState.asExplicitlyConfirmed() _message.value = PromptMessage.Empty _legacyState.value = AuthBiometricView.STATE_AUTHENTICATED Loading
packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptAuthStateTest.kt +7 −1 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ class PromptAuthStateTest : SysuiTestCase() { with(PromptAuthState(isAuthenticated = false)) { assertThat(isNotAuthenticated).isTrue() assertThat(isAuthenticatedAndConfirmed).isFalse() assertThat(isAuthenticatedAndExplicitlyConfirmed).isFalse() assertThat(isAuthenticatedByFace).isFalse() assertThat(isAuthenticatedByFingerprint).isFalse() } Loading @@ -43,6 +44,7 @@ class PromptAuthStateTest : SysuiTestCase() { with(PromptAuthState(isAuthenticated = true)) { assertThat(isNotAuthenticated).isFalse() assertThat(isAuthenticatedAndConfirmed).isTrue() assertThat(isAuthenticatedAndExplicitlyConfirmed).isFalse() assertThat(isAuthenticatedByFace).isFalse() assertThat(isAuthenticatedByFingerprint).isFalse() } Loading @@ -50,10 +52,12 @@ class PromptAuthStateTest : SysuiTestCase() { with(PromptAuthState(isAuthenticated = true, needsUserConfirmation = true)) { assertThat(isNotAuthenticated).isFalse() assertThat(isAuthenticatedAndConfirmed).isFalse() assertThat(isAuthenticatedAndExplicitlyConfirmed).isFalse() assertThat(isAuthenticatedByFace).isFalse() assertThat(isAuthenticatedByFingerprint).isFalse() assertThat(asConfirmed().isAuthenticatedAndConfirmed).isTrue() assertThat(asExplicitlyConfirmed().isAuthenticatedAndConfirmed).isTrue() assertThat(asExplicitlyConfirmed().isAuthenticatedAndExplicitlyConfirmed).isTrue() } } Loading @@ -64,6 +68,7 @@ class PromptAuthStateTest : SysuiTestCase() { ) { assertThat(isNotAuthenticated).isFalse() assertThat(isAuthenticatedAndConfirmed).isTrue() assertThat(isAuthenticatedAndExplicitlyConfirmed).isFalse() assertThat(isAuthenticatedByFace).isTrue() assertThat(isAuthenticatedByFingerprint).isFalse() } Loading @@ -79,6 +84,7 @@ class PromptAuthStateTest : SysuiTestCase() { ) { assertThat(isNotAuthenticated).isFalse() assertThat(isAuthenticatedAndConfirmed).isTrue() assertThat(isAuthenticatedAndExplicitlyConfirmed).isFalse() assertThat(isAuthenticatedByFace).isFalse() assertThat(isAuthenticatedByFingerprint).isTrue() } Loading