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

Commit a1783404 authored by Joe Bolinger's avatar Joe Bolinger Committed by Android (Google) Code Review
Browse files

Merge "Port commit I5d2669b0f234f3707085369d253fab5868b4218f from legacy...

Merge "Port commit I5d2669b0f234f3707085369d253fab5868b4218f from legacy prompt to new prompt." into udc-d1-dev
parents 783bf63c a944e547
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()
        }