summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/hardware/fingerprint/FingerprintManager.java70
-rw-r--r--core/java/android/hardware/fingerprint/IFingerprintService.aidl4
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java28
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java26
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java6
5 files changed, 90 insertions, 44 deletions
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java
index 4ca75d9a09cf..7b1048ed1de5 100644
--- a/core/java/android/hardware/fingerprint/FingerprintManager.java
+++ b/core/java/android/hardware/fingerprint/FingerprintManager.java
@@ -19,6 +19,7 @@ package android.hardware.fingerprint;
import static android.Manifest.permission.INTERACT_ACROSS_USERS;
import static android.Manifest.permission.MANAGE_FINGERPRINT;
import static android.Manifest.permission.USE_BIOMETRIC;
+import static android.Manifest.permission.USE_BIOMETRIC_INTERNAL;
import static android.Manifest.permission.USE_FINGERPRINT;
import android.annotation.NonNull;
@@ -685,6 +686,75 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
}
/**
+ * @hide
+ */
+ @RequiresPermission(USE_BIOMETRIC_INTERNAL)
+ public boolean isUdfps() {
+ if (mService == null) {
+ Slog.w(TAG, "isUdfps: no fingerprint service");
+ return false;
+ }
+
+ try {
+ return mService.isUdfps();
+ } catch (RemoteException e) {
+ e.rethrowFromSystemServer();
+ }
+ return false;
+ }
+
+ /**
+ * @hide
+ */
+ @RequiresPermission(USE_BIOMETRIC_INTERNAL)
+ public void setUdfpsOverlayController(IUdfpsOverlayController controller) {
+ if (mService == null) {
+ Slog.w(TAG, "setUdfpsOverlayController: no fingerprint service");
+ return;
+ }
+
+ try {
+ mService.setUdfpsOverlayController(controller);
+ } catch (RemoteException e) {
+ e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @hide
+ */
+ @RequiresPermission(USE_BIOMETRIC_INTERNAL)
+ public void onFingerDown(int x, int y, float minor, float major) {
+ if (mService == null) {
+ Slog.w(TAG, "onFingerDown: no fingerprint service");
+ return;
+ }
+
+ try {
+ mService.onFingerDown(x, y, minor, major);
+ } catch (RemoteException e) {
+ e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @hide
+ */
+ @RequiresPermission(USE_BIOMETRIC_INTERNAL)
+ public void onFingerUp() {
+ if (mService == null) {
+ Slog.w(TAG, "onFingerDown: no fingerprint service");
+ return;
+ }
+
+ try {
+ mService.onFingerUp();
+ } catch (RemoteException e) {
+ e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Determine if there is at least one fingerprint enrolled.
*
* @return true if at least one fingerprint is enrolled, false otherwise
diff --git a/core/java/android/hardware/fingerprint/IFingerprintService.aidl b/core/java/android/hardware/fingerprint/IFingerprintService.aidl
index 38d7d2bc9e27..21ac687166f0 100644
--- a/core/java/android/hardware/fingerprint/IFingerprintService.aidl
+++ b/core/java/android/hardware/fingerprint/IFingerprintService.aidl
@@ -114,8 +114,8 @@ interface IFingerprintService {
// Notifies about a finger leaving the sensor area.
void onFingerUp();
- // Returns whether the specified sensor is an under-display fingerprint sensor (UDFPS).
- boolean isUdfps(int sensorId);
+ // Returns whether the sensor is an under-display fingerprint sensor (UDFPS).
+ boolean isUdfps();
// Sets the controller for managing the UDFPS overlay.
void setUdfpsOverlayController(in IUdfpsOverlayController controller);
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
index 7b441d64af06..42911374dc87 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
@@ -246,11 +246,6 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks,
IActivityTaskManager getActivityTaskManager() {
return ActivityTaskManager.getService();
}
-
- IFingerprintService getFingerprintService() {
- return IFingerprintService.Stub.asInterface(
- ServiceManager.getService(Context.FINGERPRINT_SERVICE));
- }
}
@Inject
@@ -276,23 +271,12 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks,
mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
mActivityTaskManager = mInjector.getActivityTaskManager();
- if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
- IFingerprintService fingerprintService = mInjector.getFingerprintService();
- if (fingerprintService == null) {
- Log.e(TAG, "FEATURE_FINGERPRINT is available, but FingerprintService is null");
- } else {
- boolean isUdfps = false;
- try {
- // TODO(b/160024833): Enumerate through all of the sensors and check whether
- // at least one of them is UDFPS.
- isUdfps = fingerprintService.isUdfps(0 /* sensorId */);
- } catch (RemoteException e) {
- Log.w(TAG, "Unable to check whether the sensor is a UDFPS", e);
- }
- if (isUdfps) {
- mUdfpsController = new UdfpsController(mContext, fingerprintService,
- mWindowManager);
- }
+ final FingerprintManager fpm = mContext.getSystemService(FingerprintManager.class);
+ if (fpm != null && fpm.isHardwareDetected()) {
+ // TODO(b/160024833): Enumerate through all of the sensors and check whether
+ // at least one of them is UDFPS.
+ if (fpm.isUdfps()) {
+ mUdfpsController = new UdfpsController(mContext, mWindowManager);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
index 04f2892783bd..739c2b155444 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
@@ -20,6 +20,7 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.PixelFormat;
import android.graphics.Point;
+import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.IFingerprintService;
import android.hardware.fingerprint.IUdfpsOverlayController;
import android.os.Handler;
@@ -44,7 +45,7 @@ class UdfpsController {
private static final String TAG = "UdfpsController";
private final Context mContext;
- private final IFingerprintService mFingerprintService;
+ private final FingerprintManager mFingerprintManager;
private final WindowManager mWindowManager;
private final Handler mHandler;
@@ -94,10 +95,9 @@ class UdfpsController {
}
};
- UdfpsController(Context context, IFingerprintService fingerprintService,
- WindowManager windowManager) {
+ UdfpsController(Context context, WindowManager windowManager) {
mContext = context;
- mFingerprintService = fingerprintService;
+ mFingerprintManager = context.getSystemService(FingerprintManager.class);
mWindowManager = windowManager;
mHandler = new Handler(Looper.getMainLooper());
start();
@@ -133,11 +133,7 @@ class UdfpsController {
mHbmEnableCommand = mContext.getResources().getString(R.string.udfps_hbm_enable_command);
mHbmDisableCommand = mContext.getResources().getString(R.string.udfps_hbm_disable_command);
- try {
- mFingerprintService.setUdfpsOverlayController(new UdfpsOverlayController());
- } catch (RemoteException e) {
- Log.e(TAG, "start | failed to set UDFPS controller", e);
- }
+ mFingerprintManager.setUdfpsOverlayController(new UdfpsOverlayController());
mIsOverlayShowing = false;
}
@@ -175,19 +171,11 @@ class UdfpsController {
Log.e(TAG, "onFingerDown | failed to enable HBM: " + e.getMessage());
}
mView.onFingerDown();
- try {
- mFingerprintService.onFingerDown(x, y, minor, major);
- } catch (RemoteException e) {
- Log.e(TAG, "onFingerDown | failed to propagate onFingerDown", e);
- }
+ mFingerprintManager.onFingerDown(x, y, minor, major);
}
private void onFingerUp() {
- try {
- mFingerprintService.onFingerUp();
- } catch (RemoteException e) {
- Log.e(TAG, "onFingeUp | failed to propagate onFingerUp", e);
- }
+ mFingerprintManager.onFingerUp();
mView.onFingerUp();
try {
FileWriter fw = new FileWriter(mHbmPath);
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 e0cb7ec91c8a..ce9565ac0f7d 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
@@ -213,6 +213,10 @@ public class FingerprintService extends SystemService {
final long token = Binder.clearCallingIdentity();
try {
+ if (mFingerprint21 == null) {
+ Slog.e(TAG, "No HAL");
+ return false;
+ }
return mFingerprint21.isHardwareDetected();
} finally {
Binder.restoreCallingIdentity(token);
@@ -313,7 +317,7 @@ public class FingerprintService extends SystemService {
}
@Override
- public boolean isUdfps(int sensorId) {
+ public boolean isUdfps() {
Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL);
return mFingerprint21.isUdfps();
}