summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/hardware/fingerprint/IFingerprintService.aidl6
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/Fingerprint21.java10
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticationClient.java31
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintEnrollClient.java31
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java31
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);
}
}