diff options
5 files changed, 69 insertions, 40 deletions
diff --git a/core/java/android/hardware/fingerprint/IFingerprintService.aidl b/core/java/android/hardware/fingerprint/IFingerprintService.aidl index ad58fea4281c..38d7d2bc9e27 100644 --- a/core/java/android/hardware/fingerprint/IFingerprintService.aidl +++ b/core/java/android/hardware/fingerprint/IFingerprintService.aidl @@ -117,12 +117,6 @@ interface IFingerprintService { // Returns whether the specified sensor is an under-display fingerprint sensor (UDFPS). boolean isUdfps(int sensorId); - // Shows the UDFPS overlay. - void showUdfpsOverlay(); - - // Hides the UDFPS overlay. - void hideUdfpsOverlay(); - // Sets the controller for managing the UDFPS overlay. void setUdfpsOverlayController(in IUdfpsOverlayController controller); } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/Fingerprint21.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/Fingerprint21.java index 5d48e56c7aed..0a9497291f37 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/Fingerprint21.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/Fingerprint21.java @@ -32,6 +32,7 @@ import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint; import android.hardware.biometrics.fingerprint.V2_2.IBiometricsFingerprintClientCallback; import android.hardware.fingerprint.Fingerprint; import android.hardware.fingerprint.IFingerprintServiceReceiver; +import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.Handler; import android.os.IBinder; import android.os.IHwBinder; @@ -93,6 +94,7 @@ class Fingerprint21 implements IHwBinder.DeathRecipient { private final Map<Integer, Long> mAuthenticatorIds; private IBiometricsFingerprint mDaemon; + @Nullable private IUdfpsOverlayController mUdfpsOverlayController; private int mCurrentUserId = UserHandle.USER_NULL; /** @@ -464,7 +466,7 @@ class Fingerprint21 implements IHwBinder.DeathRecipient { final FingerprintEnrollClient client = new FingerprintEnrollClient(mContext, mLazyDaemon, token, new ClientMonitorCallbackConverter(receiver), userId, hardwareAuthToken, opPackageName, FingerprintUtils.getInstance(), - ENROLL_TIMEOUT_SEC, mSensorProperties.sensorId); + ENROLL_TIMEOUT_SEC, mSensorProperties.sensorId, mUdfpsOverlayController); mScheduler.scheduleClientMonitor(client); }); @@ -487,7 +489,7 @@ class Fingerprint21 implements IHwBinder.DeathRecipient { mContext, mLazyDaemon, token, listener, userId, operationId, restricted, opPackageName, cookie, false /* requireConfirmation */, mSensorProperties.sensorId, isStrongBiometric, surface, statsClient, - mTaskStackListener, mLockoutTracker); + mTaskStackListener, mLockoutTracker, mUdfpsOverlayController); mScheduler.scheduleClientMonitor(client); }); } @@ -573,6 +575,10 @@ class Fingerprint21 implements IHwBinder.DeathRecipient { return mSensorProperties.isUdfps; } + void setUdfpsOverlayController(IUdfpsOverlayController controller) { + mUdfpsOverlayController = controller; + } + void dumpProto(FileDescriptor fd) { PerformanceTracker tracker = PerformanceTracker.getInstanceForSensorId(mSensorProperties.sensorId); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticationClient.java index 9cc0b0dd06b8..1999a0f0c9d2 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticationClient.java @@ -25,6 +25,7 @@ import android.hardware.biometrics.BiometricConstants; import android.hardware.biometrics.BiometricFingerprintConstants; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint; +import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; @@ -47,6 +48,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient<IBiometricsFi private static final String TAG = "Biometrics/FingerprintAuthClient"; private final LockoutFrameworkImpl mLockoutFrameworkImpl; + @Nullable private final IUdfpsOverlayController mUdfpsOverlayController; FingerprintAuthenticationClient(@NonNull Context context, @NonNull LazyDaemon<IBiometricsFingerprint> lazyDaemon, @NonNull IBinder token, @@ -54,12 +56,34 @@ class FingerprintAuthenticationClient extends AuthenticationClient<IBiometricsFi boolean restricted, @NonNull String owner, int cookie, boolean requireConfirmation, int sensorId, boolean isStrongBiometric, @Nullable Surface surface, int statsClient, @NonNull TaskStackListener taskStackListener, - @NonNull LockoutFrameworkImpl lockoutTracker) { + @NonNull LockoutFrameworkImpl lockoutTracker, + @Nullable IUdfpsOverlayController udfpsOverlayController) { super(context, lazyDaemon, token, listener, targetUserId, operationId, restricted, owner, cookie, requireConfirmation, sensorId, isStrongBiometric, BiometricsProtoEnums.MODALITY_FINGERPRINT, statsClient, taskStackListener, lockoutTracker); mLockoutFrameworkImpl = lockoutTracker; + mUdfpsOverlayController = udfpsOverlayController; + } + + private void showUdfpsOverlay() { + if (mUdfpsOverlayController != null) { + try { + mUdfpsOverlayController.showUdfpsOverlay(); + } catch (RemoteException e) { + Slog.e(TAG, "Remote exception when showing the UDFPS overlay", e); + } + } + } + + private void hideUdfpsOverlay() { + if (mUdfpsOverlayController != null) { + try { + mUdfpsOverlayController.hideUdfpsOverlay(); + } catch (RemoteException e) { + Slog.e(TAG, "Remote exception when hiding the UDFPS overlay", e); + } + } } @Override @@ -74,6 +98,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient<IBiometricsFi if (authenticated) { resetFailedAttempts(getTargetUserId()); + hideUdfpsOverlay(); mFinishCallback.onClientFinished(this, true /* success */); } else { final @LockoutTracker.LockoutMode int lockoutMode = @@ -86,6 +111,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient<IBiometricsFi // Send the error, but do not invoke the FinishCallback yet. Since lockout is not // controlled by the HAL, the framework must stop the sensor before finishing the // client. + hideUdfpsOverlay(); onErrorInternal(errorCode, 0 /* vendorCode */, false /* finish */); cancel(); } @@ -104,6 +130,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient<IBiometricsFi @Override protected void startHalOperation() { + showUdfpsOverlay(); try { // GroupId was never used. In fact, groupId is always the same as userId. getFreshDaemon().authenticate(mOperationId, getTargetUserId()); @@ -111,12 +138,14 @@ class FingerprintAuthenticationClient extends AuthenticationClient<IBiometricsFi Slog.e(TAG, "Remote exception when requesting auth", e); onError(BiometricFingerprintConstants.FINGERPRINT_ERROR_HW_UNAVAILABLE, 0 /* vendorCode */); + hideUdfpsOverlay(); mFinishCallback.onClientFinished(this, false /* success */); } } @Override protected void stopHalOperation() { + hideUdfpsOverlay(); try { getFreshDaemon().cancel(); } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintEnrollClient.java index 5282bdf774ab..c26dbfdaa75b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintEnrollClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintEnrollClient.java @@ -17,10 +17,12 @@ package com.android.server.biometrics.sensors.fingerprint; import android.annotation.NonNull; +import android.annotation.Nullable; import android.content.Context; import android.hardware.biometrics.BiometricFingerprintConstants; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint; +import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; @@ -39,18 +41,43 @@ public class FingerprintEnrollClient extends EnrollClient<IBiometricsFingerprint private static final String TAG = "FingerprintEnrollClient"; + @Nullable private final IUdfpsOverlayController mUdfpsOverlayController; + FingerprintEnrollClient(@NonNull Context context, @NonNull LazyDaemon<IBiometricsFingerprint> lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull byte[] hardwareAuthToken, @NonNull String owner, @NonNull BiometricUtils utils, - int timeoutSec, int sensorId) { + int timeoutSec, int sensorId, + @Nullable IUdfpsOverlayController udfpsOverlayController) { super(context, lazyDaemon, token, listener, userId, hardwareAuthToken, owner, utils, timeoutSec, BiometricsProtoEnums.MODALITY_FINGERPRINT, sensorId, true /* shouldVibrate */); + mUdfpsOverlayController = udfpsOverlayController; + } + + private void showUdfpsOverlay() { + if (mUdfpsOverlayController != null) { + try { + mUdfpsOverlayController.showUdfpsOverlay(); + } catch (RemoteException e) { + Slog.e(TAG, "Remote exception when showing the UDFPS overlay", e); + } + } + } + + private void hideUdfpsOverlay() { + if (mUdfpsOverlayController != null) { + try { + mUdfpsOverlayController.hideUdfpsOverlay(); + } catch (RemoteException e) { + Slog.e(TAG, "Remote exception when hiding the UDFPS overlay", e); + } + } } @Override protected void startHalOperation() { + showUdfpsOverlay(); try { // GroupId was never used. In fact, groupId is always the same as userId. getFreshDaemon().enroll(mHardwareAuthToken, getTargetUserId(), mTimeoutSec); @@ -58,12 +85,14 @@ public class FingerprintEnrollClient extends EnrollClient<IBiometricsFingerprint Slog.e(TAG, "Remote exception when requesting enroll", e); onError(BiometricFingerprintConstants.FINGERPRINT_ERROR_HW_UNAVAILABLE, 0 /* vendorCode */); + hideUdfpsOverlay(); mFinishCallback.onClientFinished(this, false /* success */); } } @Override protected void stopHalOperation() { + hideUdfpsOverlay(); try { getFreshDaemon().cancel(); } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java index 11e6bf24339e..d092bfd02b7b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java @@ -71,7 +71,6 @@ public class FingerprintService extends SystemService { private final LockoutResetTracker mLockoutResetTracker; private final GestureAvailabilityTracker mGestureAvailabilityTracker; private Fingerprint21 mFingerprint21; - private IUdfpsOverlayController mUdfpsOverlayController; /** * Receives the incoming binder calls from FingerprintManager. @@ -319,37 +318,9 @@ public class FingerprintService extends SystemService { } @Override - public void showUdfpsOverlay() { - Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL); - if (mUdfpsOverlayController == null) { - Slog.e(TAG, "showUdfpsOverlay | mUdfpsOverlayController is null"); - return; - } - try { - mUdfpsOverlayController.showUdfpsOverlay(); - } catch (RemoteException e) { - Slog.e(TAG, "showUdfpsOverlay | RemoteException: ", e); - } - } - - @Override - public void hideUdfpsOverlay() { - Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL); - if (mUdfpsOverlayController == null) { - Slog.e(TAG, "hideUdfpsOverlay | mUdfpsOverlayController is null"); - return; - } - try { - mUdfpsOverlayController.hideUdfpsOverlay(); - } catch (RemoteException e) { - Slog.e(TAG, "hideUdfpsOverlay | RemoteException: ", e); - } - } - - @Override public void setUdfpsOverlayController(IUdfpsOverlayController controller) { Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL); - mUdfpsOverlayController = controller; + mFingerprint21.setUdfpsOverlayController(controller); } } |