Loading services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java +8 −1 Original line number Diff line number Diff line Loading @@ -92,6 +92,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession> private long mSideFpsLastAcquireStartTime; private Runnable mAuthSuccessRunnable; private final Clock mClock; private boolean mDidFinishSfps; FingerprintAuthenticationClient( @NonNull Context context, Loading Loading @@ -197,8 +198,9 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession> @Override protected void handleLifecycleAfterAuth(boolean authenticated) { if (authenticated) { if (authenticated && !mDidFinishSfps) { mCallback.onClientFinished(this, true /* success */); mDidFinishSfps = true; } } Loading Loading @@ -490,11 +492,16 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession> if (mSensorProps.isAnySidefpsType()) { Slog.i(TAG, "(sideFPS): onPowerPressed"); mHandler.post(() -> { if (mDidFinishSfps) { return; } Slog.i(TAG, "(sideFPS): finishing auth"); // Ignore auths after a power has been detected mHandler.removeMessages(MESSAGE_AUTH_SUCCESS); // Do not call onError() as that will send an additional callback to coex. mDidFinishSfps = true; onErrorInternal(BiometricConstants.BIOMETRIC_ERROR_POWER_PRESSED, 0, true); stopHalOperation(); mSensorOverlays.hide(getSensorId()); }); } Loading services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java +9 −2 Original line number Diff line number Diff line Loading @@ -372,6 +372,7 @@ public class FingerprintAuthenticationClientTest { @Test public void fingerprintPowerIgnoresAuthInWindow() throws Exception { when(mSensorProps.isAnySidefpsType()).thenReturn(true); when(mHal.authenticate(anyLong())).thenReturn(mCancellationSignal); final FingerprintAuthenticationClient client = createClient(1); client.start(mCallback); Loading @@ -382,11 +383,13 @@ public class FingerprintAuthenticationClientTest { mLooper.dispatchAll(); verify(mCallback).onClientFinished(any(), eq(false)); verify(mCancellationSignal).cancel(); } @Test public void fingerprintAuthIgnoredWaitingForPower() throws Exception { when(mSensorProps.isAnySidefpsType()).thenReturn(true); when(mHal.authenticate(anyLong())).thenReturn(mCancellationSignal); final FingerprintAuthenticationClient client = createClient(1); client.start(mCallback); Loading @@ -397,11 +400,13 @@ public class FingerprintAuthenticationClientTest { mLooper.dispatchAll(); verify(mCallback).onClientFinished(any(), eq(false)); verify(mCancellationSignal).cancel(); } @Test public void fingerprintAuthSucceedsAfterPowerWindow() throws Exception { public void fingerprintAuthFailsWhenAuthAfterPower() throws Exception { when(mSensorProps.isAnySidefpsType()).thenReturn(true); when(mHal.authenticate(anyLong())).thenReturn(mCancellationSignal); final FingerprintAuthenticationClient client = createClient(1); client.start(mCallback); Loading @@ -415,7 +420,9 @@ public class FingerprintAuthenticationClientTest { mLooper.moveTimeForward(1000); mLooper.dispatchAll(); verify(mCallback).onClientFinished(any(), eq(true)); verify(mCallback, never()).onClientFinished(any(), eq(true)); verify(mCallback).onClientFinished(any(), eq(false)); when(mHal.authenticateWithContext(anyLong(), any())).thenReturn(mCancellationSignal); } @Test Loading Loading
services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java +8 −1 Original line number Diff line number Diff line Loading @@ -92,6 +92,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession> private long mSideFpsLastAcquireStartTime; private Runnable mAuthSuccessRunnable; private final Clock mClock; private boolean mDidFinishSfps; FingerprintAuthenticationClient( @NonNull Context context, Loading Loading @@ -197,8 +198,9 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession> @Override protected void handleLifecycleAfterAuth(boolean authenticated) { if (authenticated) { if (authenticated && !mDidFinishSfps) { mCallback.onClientFinished(this, true /* success */); mDidFinishSfps = true; } } Loading Loading @@ -490,11 +492,16 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession> if (mSensorProps.isAnySidefpsType()) { Slog.i(TAG, "(sideFPS): onPowerPressed"); mHandler.post(() -> { if (mDidFinishSfps) { return; } Slog.i(TAG, "(sideFPS): finishing auth"); // Ignore auths after a power has been detected mHandler.removeMessages(MESSAGE_AUTH_SUCCESS); // Do not call onError() as that will send an additional callback to coex. mDidFinishSfps = true; onErrorInternal(BiometricConstants.BIOMETRIC_ERROR_POWER_PRESSED, 0, true); stopHalOperation(); mSensorOverlays.hide(getSensorId()); }); } Loading
services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java +9 −2 Original line number Diff line number Diff line Loading @@ -372,6 +372,7 @@ public class FingerprintAuthenticationClientTest { @Test public void fingerprintPowerIgnoresAuthInWindow() throws Exception { when(mSensorProps.isAnySidefpsType()).thenReturn(true); when(mHal.authenticate(anyLong())).thenReturn(mCancellationSignal); final FingerprintAuthenticationClient client = createClient(1); client.start(mCallback); Loading @@ -382,11 +383,13 @@ public class FingerprintAuthenticationClientTest { mLooper.dispatchAll(); verify(mCallback).onClientFinished(any(), eq(false)); verify(mCancellationSignal).cancel(); } @Test public void fingerprintAuthIgnoredWaitingForPower() throws Exception { when(mSensorProps.isAnySidefpsType()).thenReturn(true); when(mHal.authenticate(anyLong())).thenReturn(mCancellationSignal); final FingerprintAuthenticationClient client = createClient(1); client.start(mCallback); Loading @@ -397,11 +400,13 @@ public class FingerprintAuthenticationClientTest { mLooper.dispatchAll(); verify(mCallback).onClientFinished(any(), eq(false)); verify(mCancellationSignal).cancel(); } @Test public void fingerprintAuthSucceedsAfterPowerWindow() throws Exception { public void fingerprintAuthFailsWhenAuthAfterPower() throws Exception { when(mSensorProps.isAnySidefpsType()).thenReturn(true); when(mHal.authenticate(anyLong())).thenReturn(mCancellationSignal); final FingerprintAuthenticationClient client = createClient(1); client.start(mCallback); Loading @@ -415,7 +420,9 @@ public class FingerprintAuthenticationClientTest { mLooper.moveTimeForward(1000); mLooper.dispatchAll(); verify(mCallback).onClientFinished(any(), eq(true)); verify(mCallback, never()).onClientFinished(any(), eq(true)); verify(mCallback).onClientFinished(any(), eq(false)); when(mHal.authenticateWithContext(anyLong(), any())).thenReturn(mCancellationSignal); } @Test Loading