Loading core/java/android/hardware/fingerprint/FingerprintManager.java +70 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -684,6 +685,75 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing return hasEnrolledFingerprints(userId); } /** * @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. * Loading core/java/android/hardware/fingerprint/IFingerprintService.aidl +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java +6 −22 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 { 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. 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); } if (fpm.isUdfps()) { mUdfpsController = new UdfpsController(mContext, mWindowManager); } } Loading packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +7 −19 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading Loading @@ -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; } Loading Loading @@ -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); Loading services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java +5 −1 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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(); } Loading Loading
core/java/android/hardware/fingerprint/FingerprintManager.java +70 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -684,6 +685,75 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing return hasEnrolledFingerprints(userId); } /** * @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. * Loading
core/java/android/hardware/fingerprint/IFingerprintService.aidl +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading
packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java +6 −22 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 { 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. 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); } if (fpm.isUdfps()) { mUdfpsController = new UdfpsController(mContext, mWindowManager); } } Loading
packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +7 −19 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading Loading @@ -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; } Loading Loading @@ -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); Loading
services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java +5 −1 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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(); } Loading