From 03ecc2d4b71d18b14fe9c68fe44e2375e2ebd788 Mon Sep 17 00:00:00 2001 From: Haining Chen Date: Wed, 31 Mar 2021 15:16:37 -0700 Subject: [PATCH] Add the current sensor strength into dumpsys Bug: 169730503 Test: atest com.android.server.biometrics Test: atest com.android.systemui.biometrics Change-Id: I67529fc65fb712ff7231f4aa063cb0d84aabd701 --- core/proto/android/server/biometrics.proto | 13 +++++++++---- .../biometrics/BiometricStrengthController.java | 2 ++ .../com/android/server/biometrics/Utils.java | 17 +++++++++++++++++ .../biometrics/sensors/face/aidl/Sensor.java | 2 ++ .../biometrics/sensors/face/hidl/Face10.java | 2 ++ .../sensors/fingerprint/aidl/Sensor.java | 2 ++ .../sensors/fingerprint/hidl/Fingerprint21.java | 2 ++ 7 files changed, 36 insertions(+), 4 deletions(-) diff --git a/core/proto/android/server/biometrics.proto b/core/proto/android/server/biometrics.proto index 4f3ae28bec7d8..c918dbbede268 100644 --- a/core/proto/android/server/biometrics.proto +++ b/core/proto/android/server/biometrics.proto @@ -120,18 +120,23 @@ message SensorStateProto { optional Modality modality = 2; + // The current strength (see {@link BiometricManager.Authenticators}) of this sensor, taking any + // downgraded strengths into effect. It may be different from the sensor's original strength but + // can never be stronger than that. + optional int32 current_strength = 3; + // State of the sensor's scheduler. - optional BiometricSchedulerProto scheduler = 3; + optional BiometricSchedulerProto scheduler = 4; // User states for this sensor. - repeated UserStateProto user_states = 4; + repeated UserStateProto user_states = 5; // True if resetLockout requires a HAT to be verified in the TEE or equivalent. - optional bool reset_lockout_requires_hardware_auth_token = 5; + optional bool reset_lockout_requires_hardware_auth_token = 6; // True if a HAT is required (field above) AND a challenge needs to be generated by the // biometric TEE (or equivalent), and wrapped within the HAT. - optional bool reset_lockout_requires_challenge = 6; + optional bool reset_lockout_requires_challenge = 7; } // State of a specific user for a specific sensor. diff --git a/services/core/java/com/android/server/biometrics/BiometricStrengthController.java b/services/core/java/com/android/server/biometrics/BiometricStrengthController.java index c96a182c7d208..270621cf30ca5 100644 --- a/services/core/java/com/android/server/biometrics/BiometricStrengthController.java +++ b/services/core/java/com/android/server/biometrics/BiometricStrengthController.java @@ -84,6 +84,8 @@ public class BiometricStrengthController { final int id = sensor.id; if (idToStrength.containsKey(id)) { final int newStrength = idToStrength.get(id); + Slog.d(TAG, "updateStrengths: update sensorId=" + id + " to newStrength=" + + newStrength); sensor.updateStrength(newStrength); } } diff --git a/services/core/java/com/android/server/biometrics/Utils.java b/services/core/java/com/android/server/biometrics/Utils.java index f4cb38738f7e9..996f0fd3a55f7 100644 --- a/services/core/java/com/android/server/biometrics/Utils.java +++ b/services/core/java/com/android/server/biometrics/Utils.java @@ -410,6 +410,23 @@ public class Utils { } } + /** + * Returns the sensor's current strength, taking any updated strengths into effect. + * + * @param sensorId The sensor Id + * @return see {@link BiometricManager.Authenticators} + */ + public static @Authenticators.Types int getCurrentStrength(int sensorId) { + IBiometricService service = IBiometricService.Stub.asInterface( + ServiceManager.getService(Context.BIOMETRIC_SERVICE)); + try { + return service.getCurrentStrength(sensorId); + } catch (RemoteException e) { + Slog.e(TAG, "RemoteException", e); + return Authenticators.EMPTY_SET; + } + } + /** * Checks if a client package matches Keyguard and can perform internal biometric operations. * diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java index ee367756dc04d..2752ff4683b2d 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java @@ -546,6 +546,8 @@ public class Sensor { proto.write(SensorStateProto.SENSOR_ID, mSensorProperties.sensorId); proto.write(SensorStateProto.MODALITY, SensorStateProto.FACE); + proto.write(SensorStateProto.CURRENT_STRENGTH, + Utils.getCurrentStrength(mSensorProperties.sensorId)); proto.write(SensorStateProto.SCHEDULER, mScheduler.dumpProtoState(clearSchedulerBuffer)); for (UserInfo user : UserManager.get(mContext).getUsers()) { diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java index 4ffbe06c11bae..5be70e7d1ec79 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java @@ -792,6 +792,8 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { proto.write(SensorStateProto.SENSOR_ID, mSensorProperties.sensorId); proto.write(SensorStateProto.MODALITY, SensorStateProto.FACE); + proto.write(SensorStateProto.CURRENT_STRENGTH, + Utils.getCurrentStrength(mSensorProperties.sensorId)); proto.write(SensorStateProto.SCHEDULER, mScheduler.dumpProtoState(clearSchedulerBuffer)); for (UserInfo user : UserManager.get(mContext).getUsers()) { diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java index 4862d849613d9..94e5da41f2f07 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java @@ -526,6 +526,8 @@ class Sensor { proto.write(SensorStateProto.SENSOR_ID, mSensorProperties.sensorId); proto.write(SensorStateProto.MODALITY, SensorStateProto.FINGERPRINT); + proto.write(SensorStateProto.CURRENT_STRENGTH, + Utils.getCurrentStrength(mSensorProperties.sensorId)); proto.write(SensorStateProto.SCHEDULER, mScheduler.dumpProtoState(clearSchedulerBuffer)); for (UserInfo user : UserManager.get(mContext).getUsers()) { 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 e149ca9428dde..f5a7e8080c4e0 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 @@ -753,6 +753,8 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider proto.write(SensorStateProto.SENSOR_ID, mSensorProperties.sensorId); proto.write(SensorStateProto.MODALITY, SensorStateProto.FINGERPRINT); + proto.write(SensorStateProto.CURRENT_STRENGTH, + Utils.getCurrentStrength(mSensorProperties.sensorId)); proto.write(SensorStateProto.SCHEDULER, mScheduler.dumpProtoState(clearSchedulerBuffer)); for (UserInfo user : UserManager.get(mContext).getUsers()) {