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

Commit af194063 authored by Diya Bera's avatar Diya Bera Committed by Android (Google) Code Review
Browse files

Merge "Start fingerprint when state = STATE_AUTH_PAUSED" into main

parents b07e38a7 9de9f24d
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -576,7 +576,8 @@ public final class AuthSession implements IBinder.DeathRecipient {
    }

    void onDialogAnimatedIn(boolean startFingerprintNow) {
        if (mState != STATE_AUTH_STARTED && mState != STATE_ERROR_PENDING_SYSUI) {
        if (mState != STATE_AUTH_STARTED && mState != STATE_ERROR_PENDING_SYSUI
                && mState != STATE_AUTH_PAUSED) {
            Slog.e(TAG, "onDialogAnimatedIn, unexpected state: " + mState);
            return;
        }
+39 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static android.hardware.biometrics.BiometricPrompt.DISMISSED_REASON_NEGAT

import static com.android.server.biometrics.BiometricServiceStateProto.STATE_AUTH_CALLED;
import static com.android.server.biometrics.BiometricServiceStateProto.STATE_AUTH_STARTED;
import static com.android.server.biometrics.BiometricServiceStateProto.STATE_AUTH_PAUSED;
import static com.android.server.biometrics.BiometricServiceStateProto.STATE_AUTH_STARTED_UI_SHOWING;
import static com.android.server.biometrics.BiometricServiceStateProto.STATE_ERROR_PENDING_SYSUI;

@@ -288,6 +289,44 @@ public class AuthSessionTest {
                BiometricSensor.STATE_AUTHENTICATING);
    }

    @Test
    public void testOnRejectionReceivedBeforeOnDialogAnimatedIn() throws RemoteException {
        final int fingerprintId = 0;
        final int faceId = 1;
        setupFingerprint(fingerprintId, FingerprintSensorProperties.TYPE_REAR);
        setupFace(faceId, false /* confirmationAlwaysRequired */,
                mock(IBiometricAuthenticator.class));
        final AuthSession session = createAuthSession(mSensors,
                false /* checkDevicePolicyManager */,
                Authenticators.BIOMETRIC_STRONG,
                TEST_REQUEST_ID,
                0 /* operationId */,
                0 /* userId */);
        session.goToInitialState();

        for (BiometricSensor sensor : session.mPreAuthInfo.eligibleSensors) {
            assertThat(sensor.getSensorState()).isEqualTo(BiometricSensor.STATE_WAITING_FOR_COOKIE);
            session.onCookieReceived(
                    session.mPreAuthInfo.eligibleSensors.get(sensor.id).getCookie());
        }
        assertThat(session.allCookiesReceived()).isTrue();
        assertThat(session.getState()).isEqualTo(STATE_AUTH_STARTED);

        final BiometricSensor faceSensor = session.mPreAuthInfo.eligibleSensors.get(faceId);
        final BiometricSensor fingerprintSensor = session.mPreAuthInfo.eligibleSensors.get(
                fingerprintId);
        session.onAuthenticationRejected(faceId);

        assertThat(faceSensor.getSensorState()).isEqualTo(BiometricSensor.STATE_CANCELING);
        assertThat(session.getState()).isEqualTo(STATE_AUTH_PAUSED);

        session.onDialogAnimatedIn(true);

        assertThat(session.getState()).isEqualTo(STATE_AUTH_STARTED_UI_SHOWING);
        assertThat(fingerprintSensor.getSensorState()).isEqualTo(
                BiometricSensor.STATE_AUTHENTICATING);
    }

    @Test
    public void testCancelReducesAppetiteForCookies() throws Exception {
        setupFace(0 /* id */, false /* confirmationAlwaysRequired */,