Do nothing in duplicate onDialogAnimatedIn calls
Bug: 233448368 Test: atest AuthSessionTest Change-Id: I171604ee6dc40f1d44ac65525c32ff97f1fa1d76 Merged-In: I171604ee6dc40f1d44ac65525c32ff97f1fa1d76
This commit is contained in:
@@ -538,13 +538,12 @@ public final class AuthSession implements IBinder.DeathRecipient {
|
||||
|
||||
void onDialogAnimatedIn() {
|
||||
if (mState != STATE_AUTH_STARTED) {
|
||||
Slog.w(TAG, "onDialogAnimatedIn, unexpected state: " + mState);
|
||||
Slog.e(TAG, "onDialogAnimatedIn, unexpected state: " + mState);
|
||||
return;
|
||||
}
|
||||
|
||||
mState = STATE_AUTH_STARTED_UI_SHOWING;
|
||||
|
||||
startAllPreparedFingerprintSensors();
|
||||
mState = STATE_AUTH_STARTED_UI_SHOWING;
|
||||
}
|
||||
|
||||
void onTryAgainPressed() {
|
||||
|
||||
@@ -20,7 +20,9 @@ import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE;
|
||||
import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FINGERPRINT;
|
||||
import static android.hardware.biometrics.BiometricPrompt.DISMISSED_REASON_NEGATIVE;
|
||||
|
||||
import static com.android.server.biometrics.BiometricServiceStateProto.*;
|
||||
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_STARTED_UI_SHOWING;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
import static junit.framework.Assert.assertFalse;
|
||||
@@ -32,6 +34,8 @@ import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@@ -279,6 +283,43 @@ public class AuthSessionTest {
|
||||
session.mPreAuthInfo.eligibleSensors.get(fingerprintSensorId).getSensorState());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnDialogAnimatedInDoesNothingDuringInvalidState() throws Exception {
|
||||
setupFingerprint(0 /* id */, FingerprintSensorProperties.TYPE_UDFPS_OPTICAL);
|
||||
final long operationId = 123;
|
||||
final int userId = 10;
|
||||
|
||||
final AuthSession session = createAuthSession(mSensors,
|
||||
false /* checkDevicePolicyManager */,
|
||||
Authenticators.BIOMETRIC_STRONG,
|
||||
TEST_REQUEST_ID,
|
||||
operationId,
|
||||
userId);
|
||||
final IBiometricAuthenticator impl = session.mPreAuthInfo.eligibleSensors.get(0).impl;
|
||||
|
||||
session.goToInitialState();
|
||||
for (BiometricSensor sensor : session.mPreAuthInfo.eligibleSensors) {
|
||||
assertEquals(BiometricSensor.STATE_WAITING_FOR_COOKIE, sensor.getSensorState());
|
||||
session.onCookieReceived(
|
||||
session.mPreAuthInfo.eligibleSensors.get(sensor.id).getCookie());
|
||||
}
|
||||
assertTrue(session.allCookiesReceived());
|
||||
assertEquals(STATE_AUTH_STARTED, session.getState());
|
||||
verify(impl, never()).startPreparedClient(anyInt());
|
||||
|
||||
// First invocation should start the client monitor.
|
||||
session.onDialogAnimatedIn();
|
||||
assertEquals(STATE_AUTH_STARTED_UI_SHOWING, session.getState());
|
||||
verify(impl).startPreparedClient(anyInt());
|
||||
|
||||
// Subsequent invocations should not start the client monitor again.
|
||||
session.onDialogAnimatedIn();
|
||||
session.onDialogAnimatedIn();
|
||||
session.onDialogAnimatedIn();
|
||||
assertEquals(STATE_AUTH_STARTED_UI_SHOWING, session.getState());
|
||||
verify(impl, times(1)).startPreparedClient(anyInt());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCancelAuthentication_whenStateAuthCalled_invokesCancel()
|
||||
throws RemoteException {
|
||||
|
||||
Reference in New Issue
Block a user