Loading services/core/java/com/android/server/biometrics/AuthSession.java +2 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading services/tests/servicestests/src/com/android/server/biometrics/AuthSessionTest.java +39 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 */, Loading Loading
services/core/java/com/android/server/biometrics/AuthSession.java +2 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading
services/tests/servicestests/src/com/android/server/biometrics/AuthSessionTest.java +39 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 */, Loading