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:
Joe Bolinger
2023-06-09 02:59:55 +00:00
parent 1dcbf03d53
commit a944e5473b
4 changed files with 32 additions and 10 deletions

View File

@@ -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
}
)
}
}
}

View File

@@ -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 }
}

View File

@@ -414,7 +414,7 @@ constructor(
return
}
_isAuthenticated.value = authState.asConfirmed()
_isAuthenticated.value = authState.asExplicitlyConfirmed()
_message.value = PromptMessage.Empty
_legacyState.value = AuthBiometricView.STATE_AUTHENTICATED

View File

@@ -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()
}