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

Commit a43f785c authored by Austin Delgado's avatar Austin Delgado Committed by Android Build Coastguard Worker
Browse files

Fix Biometric prompt reset lockout flow

Update AuthSession to always show device credential on lockout since
Prompt handles both credential allowed and not allowed cases.

Bug: 445786997
Test: atest PromptSelectorInteractorImplTestAuthSessionTest
Flag: EXEMPT BUGFIX
Cherrypick-From: https://googleplex-android-review.googlesource.com/q/commit:dfc73d9d2f48dd6e87954b2de8342bf51d9c1555
Merged-In: I31d03a21ea0890c7677b0d47d49612d35cdadf20
Change-Id: I31d03a21ea0890c7677b0d47d49612d35cdadf20
parent 97f24bd9
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -541,8 +541,6 @@ class PromptSelectorInteractorImplTest : SysuiTestCase() {
            isLandscape = false,
        )

        // not using biometrics, should be null with no fallback option
        assertThat(currentPrompt).isNull()
        if (Flags.bpFallbackOptions()) {
            if (kind == PromptKind.Password) {
                assertThat(credentialKind).isEqualTo(PromptKind.Password)
+19 −23
Original line number Diff line number Diff line
@@ -169,9 +169,6 @@ constructor(
            ) {
                return@combine null
            }

            when (kind) {
                is PromptKind.Biometric -> {
            BiometricPromptRequest.Biometric(
                info = promptInfo,
                userInfo =
@@ -184,15 +181,14 @@ constructor(
                modalities =
                    if (Flags.bpFallbackOptions()) {
                        modalities
                            } else {
                    } else if (kind is PromptKind.Biometric) {
                        kind.activeModalities
                    } else {
                        BiometricModalities()
                    },
                opPackageName = opPackageName,
            )
        }
                else -> null
            }
        }

    override val promptKind: StateFlow<PromptKind> = promptRepository.promptKind

+1 −1
Original line number Diff line number Diff line
@@ -536,7 +536,7 @@ public final class AuthSession implements IBinder.DeathRecipient {
            case STATE_AUTH_STARTED:
            case STATE_AUTH_PENDING_CONFIRM:
            case STATE_AUTH_STARTED_UI_SHOWING: {
                if (isAllowDeviceCredential() && errorLockout) {
                if (errorLockout) {
                    // SystemUI handles transition from biometric to device credential.
                    mState = STATE_SHOWING_DEVICE_CREDENTIAL;
                    mStatusBarService.onBiometricError(modality, error, vendorCode);
+4 −3
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import static com.android.server.biometrics.BiometricServiceStateProto.STATE_AUT
import static com.android.server.biometrics.BiometricServiceStateProto.STATE_AUTH_STARTED;
import static com.android.server.biometrics.BiometricServiceStateProto.STATE_AUTH_STARTED_UI_SHOWING;
import static com.android.server.biometrics.BiometricServiceStateProto.STATE_ERROR_PENDING_SYSUI;
import static com.android.server.biometrics.BiometricServiceStateProto.STATE_SHOWING_DEVICE_CREDENTIAL;

import static com.google.common.truth.Truth.assertThat;

@@ -342,12 +343,12 @@ public class AuthSessionTest {
        for (BiometricSensor sensor : session.mPreAuthInfo.eligibleSensors) {
            assertEquals(BiometricSensor.STATE_CANCELING, sensor.getSensorState());
        }
        assertEquals(STATE_ERROR_PENDING_SYSUI, session.getState());
        assertEquals(STATE_SHOWING_DEVICE_CREDENTIAL, session.getState());

        // If the sensor is STATE_CANCELING, delayed onAuthenticationRejected() shouldn't change the
        // session state to STATE_AUTH_PAUSED.
        session.onAuthenticationRejected(1);
        assertEquals(STATE_ERROR_PENDING_SYSUI, session.getState());
        assertEquals(STATE_SHOWING_DEVICE_CREDENTIAL, session.getState());
    }

    @Test
@@ -1018,7 +1019,7 @@ public class AuthSessionTest {
        session.onDialogAnimatedIn(true);
        session.onDeviceCredentialPressed();
        assertThat(session.getState()).isEqualTo(
                BiometricServiceStateProto.STATE_SHOWING_DEVICE_CREDENTIAL);
                STATE_SHOWING_DEVICE_CREDENTIAL);

        session.onResumeAuthentication();