Do nothing in duplicate onDialogAnimatedIn calls
Bug: 233448368 Test: atest AuthSessionTest Change-Id: I171604ee6dc40f1d44ac65525c32ff97f1fa1d76
This commit is contained in:
@@ -538,13 +538,12 @@ public final class AuthSession implements IBinder.DeathRecipient {
|
|||||||
|
|
||||||
void onDialogAnimatedIn() {
|
void onDialogAnimatedIn() {
|
||||||
if (mState != STATE_AUTH_STARTED) {
|
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;
|
mState = STATE_AUTH_STARTED_UI_SHOWING;
|
||||||
|
|
||||||
startAllPreparedFingerprintSensors();
|
startAllPreparedFingerprintSensors();
|
||||||
mState = STATE_AUTH_STARTED_UI_SHOWING;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void onTryAgainPressed() {
|
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.BiometricAuthenticator.TYPE_FINGERPRINT;
|
||||||
import static android.hardware.biometrics.BiometricPrompt.DISMISSED_REASON_NEGATIVE;
|
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.assertEquals;
|
||||||
import static junit.framework.Assert.assertFalse;
|
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.anyLong;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.mock;
|
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.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@@ -279,6 +283,43 @@ public class AuthSessionTest {
|
|||||||
session.mPreAuthInfo.eligibleSensors.get(fingerprintSensorId).getSensorState());
|
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
|
@Test
|
||||||
public void testCancelAuthentication_whenStateAuthCalled_invokesCancel()
|
public void testCancelAuthentication_whenStateAuthCalled_invokesCancel()
|
||||||
throws RemoteException {
|
throws RemoteException {
|
||||||
|
|||||||
Reference in New Issue
Block a user