diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java index dfec2e3e308f7..0d50499bd02a1 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java @@ -67,7 +67,13 @@ public interface ServiceProvider { @NonNull List getSensorProperties(); - @NonNull + /** + * Returns the internal properties of the specified sensor, if owned by this provider. + * + * @param sensorId The ID of a fingerprint sensor, or -1 for any sensor. + * @return An object representing the internal properties of the specified sensor. + */ + @Nullable FingerprintSensorPropertiesInternal getSensorProperties(int sensorId); void scheduleResetLockout(int sensorId, int userId, @Nullable byte[] hardwareAuthToken); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java index 598cc8992c2db..d798198782eae 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java @@ -16,6 +16,8 @@ package com.android.server.biometrics.sensors.fingerprint.aidl; +import static android.hardware.fingerprint.FingerprintManager.SENSOR_ID_ANY; + import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; @@ -240,10 +242,17 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi return props; } - @NonNull + @Nullable @Override public FingerprintSensorPropertiesInternal getSensorProperties(int sensorId) { - return mSensors.get(sensorId).getSensorProperties(); + if (mSensors.size() == 0) { + return null; + } else if (sensorId == SENSOR_ID_ANY) { + return mSensors.valueAt(0).getSensorProperties(); + } else { + final Sensor sensor = mSensors.get(sensorId); + return sensor != null ? sensor.getSensorProperties() : null; + } } private void scheduleLoadAuthenticatorIds(int sensorId) { diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java index 6e22a797b435b..fd3db6072357e 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java @@ -515,7 +515,7 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider return properties; } - @NonNull + @Nullable @Override public FingerprintSensorPropertiesInternal getSensorProperties(int sensorId) { return mSensorProperties;