Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a944e547 authored by Joe Bolinger's avatar Joe Bolinger
Browse files

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
parent 1dcbf03d
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -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
                                    }
                                )
                            }
                        }
                    }
+17 −7
Original line number Diff line number Diff line
@@ -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,
            )
            .apply { wasConfirmed = true }
}
+1 −1
Original line number Diff line number Diff line
@@ -414,7 +414,7 @@ constructor(
            return
        }

        _isAuthenticated.value = authState.asConfirmed()
        _isAuthenticated.value = authState.asExplicitlyConfirmed()
        _message.value = PromptMessage.Empty
        _legacyState.value = AuthBiometricView.STATE_AUTHENTICATED

+7 −1
Original line number Diff line number Diff line
@@ -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()
        }