summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/proto/android/server/biometrics.proto13
-rw-r--r--services/core/java/com/android/server/biometrics/BiometricStrengthController.java2
-rw-r--r--services/core/java/com/android/server/biometrics/Utils.java17
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java2
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java2
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java2
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java2
7 files changed, 36 insertions, 4 deletions
diff --git a/core/proto/android/server/biometrics.proto b/core/proto/android/server/biometrics.proto
index 4f3ae28bec7d..c918dbbede26 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 c96a182c7d20..270621cf30ca 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 f4cb38738f7e..996f0fd3a55f 100644
--- a/services/core/java/com/android/server/biometrics/Utils.java
+++ b/services/core/java/com/android/server/biometrics/Utils.java
@@ -411,6 +411,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.
*
* @param context The system context.
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 ee367756dc04..2752ff4683b2 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 4ffbe06c11ba..5be70e7d1ec7 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 4862d849613d..94e5da41f2f0 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 e149ca9428dd..f5a7e8080c4e 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()) {