summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java12
-rw-r--r--services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java11
2 files changed, 18 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java
index 5f38a92f9e13..893c9b16ea02 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java
@@ -94,6 +94,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession>
private long mSideFpsLastAcquireStartTime;
private Runnable mAuthSuccessRunnable;
private final Clock mClock;
+ private boolean mDidFinishSfps;
FingerprintAuthenticationClient(
@NonNull Context context,
@@ -203,8 +204,9 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession>
@Override
protected void handleLifecycleAfterAuth(boolean authenticated) {
- if (authenticated) {
+ if (authenticated && !mDidFinishSfps) {
mCallback.onClientFinished(this, true /* success */);
+ mDidFinishSfps = true;
}
}
@@ -504,12 +506,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.
- onErrorInternal(BiometricConstants.BIOMETRIC_ERROR_POWER_PRESSED,
- 0, true);
+ mDidFinishSfps = true;
+ onErrorInternal(BiometricConstants.BIOMETRIC_ERROR_POWER_PRESSED, 0, true);
+ stopHalOperation();
mSensorOverlays.hide(getSensorId());
});
}
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java
index 22d1bc5ac4ab..5e5b48dd24c1 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java
@@ -373,6 +373,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);
@@ -383,11 +384,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);
@@ -398,11 +401,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);
@@ -416,7 +421,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