From 1f57d493565970d575fc7bd6297ec74c0250da37 Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Fri, 30 Oct 2020 14:18:18 -0700 Subject: [PATCH] Add FingerprintManager#hasEnrolledTemplatesForAnySensor Also fixes places where "e.rethrowFromSystemServer()" wasn't actually throwing the exception Bug: 171420675 Test: Builds Change-Id: I8a077a9184d6efaeb39ed66652a7f44fa9f8ddb6 --- .../fingerprint/FingerprintManager.java | 29 +++++++++++++++---- .../fingerprint/IFingerprintService.aidl | 3 ++ .../fingerprint/FingerprintService.java | 21 ++++++++++++++ 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java index 2aefb1da4783f..434c71ed2eaeb 100644 --- a/core/java/android/hardware/fingerprint/FingerprintManager.java +++ b/core/java/android/hardware/fingerprint/FingerprintManager.java @@ -797,6 +797,26 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing return hasEnrolledFingerprints(userId); } + /** + * Checks if the specified user has enrollments in any of the specified sensors. + * @hide + */ + @RequiresPermission(USE_BIOMETRIC_INTERNAL) + public boolean hasEnrolledTemplatesForAnySensor(int userId, + @NonNull List sensors) { + if (mService == null) { + Slog.w(TAG, "hasEnrolledTemplatesForAnySensor: no fingerprint service"); + return false; + } + + try { + return mService.hasEnrolledTemplatesForAnySensor(userId, sensors, + mContext.getOpPackageName()); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + /** * @hide */ @@ -810,7 +830,7 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing try { mService.setUdfpsOverlayController(controller); } catch (RemoteException e) { - e.rethrowFromSystemServer(); + throw e.rethrowFromSystemServer(); } } @@ -827,7 +847,7 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing try { mService.onPointerDown(sensorId, x, y, minor, major); } catch (RemoteException e) { - e.rethrowFromSystemServer(); + throw e.rethrowFromSystemServer(); } } @@ -844,7 +864,7 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing try { mService.onPointerUp(sensorId); } catch (RemoteException e) { - e.rethrowFromSystemServer(); + throw e.rethrowFromSystemServer(); } } @@ -917,9 +937,8 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing } return mService.getSensorPropertiesInternal(mContext.getOpPackageName()); } catch (RemoteException e) { - e.rethrowFromSystemServer(); + throw e.rethrowFromSystemServer(); } - return new ArrayList<>(); } /** diff --git a/core/java/android/hardware/fingerprint/IFingerprintService.aidl b/core/java/android/hardware/fingerprint/IFingerprintService.aidl index 95668372c5a19..be14f812bf987 100644 --- a/core/java/android/hardware/fingerprint/IFingerprintService.aidl +++ b/core/java/android/hardware/fingerprint/IFingerprintService.aidl @@ -101,6 +101,9 @@ interface IFingerprintService { // Determine if a user has at least one enrolled fingerprint boolean hasEnrolledFingerprints(int userId, String opPackageName); + // Determine if a user has at least one enrolled fingerprint in any of the specified sensors + boolean hasEnrolledTemplatesForAnySensor(int userId, in List sensors, String opPackageName); + // Return the LockoutTracker status for the specified user int getLockoutModeForUser(int userId); 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 5dcadee20e13d..abce6f6702d72 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 @@ -506,6 +506,27 @@ public class FingerprintService extends SystemService { .isEmpty(); } + @Override // Binder call + public boolean hasEnrolledTemplatesForAnySensor(int userId, + @NonNull List sensors, + @NonNull String opPackageName) { + Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL); + + for (FingerprintSensorPropertiesInternal prop : sensors) { + final ServiceProvider provider = getProviderForSensor(prop.sensorId); + if (provider == null) { + Slog.w(TAG, "Null provider for sensorId: " + prop.sensorId + + ", caller: " + opPackageName); + continue; + } + + if (!provider.getEnrolledFingerprints(prop.sensorId, userId).isEmpty()) { + return true; + } + } + return false; + } + @Override // Binder call public @LockoutTracker.LockoutMode int getLockoutModeForUser(int userId) { Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL);