diff options
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(); } |