Port commit I5d2669b0f234f3707085369d253fab5868b4218f from legacy prompt to new prompt.
Bug: 272510026 Test: atest PromptAuthStateTest Test: atest atest android.server.biometrics.cts.BiometricsAtomsTests Change-Id: Ic35903b109ebed60bbb38bead20686f1da766c28
This commit is contained in:
@@ -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
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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,
|
||||
)
|
||||
isAuthenticated = isAuthenticated,
|
||||
authenticatedModality = authenticatedModality,
|
||||
needsUserConfirmation = false,
|
||||
delay = delay,
|
||||
)
|
||||
.apply { wasConfirmed = true }
|
||||
}
|
||||
|
||||
@@ -414,7 +414,7 @@ constructor(
|
||||
return
|
||||
}
|
||||
|
||||
_isAuthenticated.value = authState.asConfirmed()
|
||||
_isAuthenticated.value = authState.asExplicitlyConfirmed()
|
||||
_message.value = PromptMessage.Empty
|
||||
_legacyState.value = AuthBiometricView.STATE_AUTHENTICATED
|
||||
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,6 +68,7 @@ class PromptAuthStateTest : SysuiTestCase() {
|
||||
) {
|
||||
assertThat(isNotAuthenticated).isFalse()
|
||||
assertThat(isAuthenticatedAndConfirmed).isTrue()
|
||||
assertThat(isAuthenticatedAndExplicitlyConfirmed).isFalse()
|
||||
assertThat(isAuthenticatedByFace).isTrue()
|
||||
assertThat(isAuthenticatedByFingerprint).isFalse()
|
||||
}
|
||||
@@ -79,6 +84,7 @@ class PromptAuthStateTest : SysuiTestCase() {
|
||||
) {
|
||||
assertThat(isNotAuthenticated).isFalse()
|
||||
assertThat(isAuthenticatedAndConfirmed).isTrue()
|
||||
assertThat(isAuthenticatedAndExplicitlyConfirmed).isFalse()
|
||||
assertThat(isAuthenticatedByFace).isFalse()
|
||||
assertThat(isAuthenticatedByFingerprint).isTrue()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user