From ae9471fe51458f5044f04de4414c8841895c7cc9 Mon Sep 17 00:00:00 2001 From: Joshua Mccloskey Date: Tue, 19 Oct 2021 14:19:13 -0700 Subject: [PATCH] Added lockout callback to FaceAuthenticationClient Test: Verified a haptic is received after a face is locked out. Fixes: 187800411 1. Make sure only a face is enrolled. 2. Auth 5 times with eyes closed. 3. Verify a haptic is received after the fifth failed auth(locked out). Change-Id: I2275787964a1aaed0f4a91a9b6c378eadea3fc3f --- .../sensors/AuthenticationClient.java | 37 +++++++++++++++++++ .../face/aidl/FaceAuthenticationClient.java | 2 + 2 files changed, 39 insertions(+) diff --git a/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java index 85d6d7fb2f6a3..031f6eeeca5fa 100644 --- a/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java @@ -360,6 +360,43 @@ public abstract class AuthenticationClient extends AcquisitionClient } } + /** + * Only call this method on interfaces where lockout does not come from onError, I.E. the + * old HIDL implementation. + */ + protected void onLockoutTimed(long durationMillis) { + final ClientMonitorCallbackConverter listener = getListener(); + final CoexCoordinator coordinator = CoexCoordinator.getInstance(); + coordinator.onAuthenticationError(this, BiometricConstants.BIOMETRIC_ERROR_LOCKOUT, + new CoexCoordinator.ErrorCallback() { + @Override + public void sendHapticFeedback() { + if (listener != null && mShouldVibrate) { + vibrateError(); + } + } + }); + } + + /** + * Only call this method on interfaces where lockout does not come from onError, I.E. the + * old HIDL implementation. + */ + protected void onLockoutPermanent() { + final ClientMonitorCallbackConverter listener = getListener(); + final CoexCoordinator coordinator = CoexCoordinator.getInstance(); + coordinator.onAuthenticationError(this, + BiometricConstants.BIOMETRIC_ERROR_LOCKOUT_PERMANENT, + new CoexCoordinator.ErrorCallback() { + @Override + public void sendHapticFeedback() { + if (listener != null && mShouldVibrate) { + vibrateError(); + } + } + }); + } + private void sendCancelOnly(@Nullable ClientMonitorCallbackConverter listener) { if (listener == null) { Slog.e(TAG, "Unable to sendAuthenticationCanceled, listener null"); diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java index cbceba6cc959e..97d791b7e1c9e 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java @@ -225,6 +225,7 @@ class FaceAuthenticationClient extends AuthenticationClient implements @Override public void onLockoutTimed(long durationMillis) { + super.onLockoutTimed(durationMillis); mLockoutCache.setLockoutModeForUser(getTargetUserId(), LockoutTracker.LOCKOUT_TIMED); // Lockout metrics are logged as an error code. final int error = BiometricFaceConstants.FACE_ERROR_LOCKOUT; @@ -239,6 +240,7 @@ class FaceAuthenticationClient extends AuthenticationClient implements @Override public void onLockoutPermanent() { + super.onLockoutPermanent(); mLockoutCache.setLockoutModeForUser(getTargetUserId(), LockoutTracker.LOCKOUT_PERMANENT); // Lockout metrics are logged as an error code. final int error = BiometricFaceConstants.FACE_ERROR_LOCKOUT_PERMANENT;