Biometrics: Hook up support for halHandlesDisplayTouches prop
Fingerprint AIDL interface supports boolean type sensor prop
halHandlesDisplayTouches, that defines whether the HAL is responsible
for detecting and processing of display touches [1].
If the value is false, the framework was supposed to be responsible for
handling the display touch events and passing them down to the HAL by
using ISession#onPointerDown and ISession#onPointerUp. If the value is
true, the framework was not supposed to notify the HAL about touch
events.
Currently, Android framework is not aware of this prop, so hook it up
for the expected outcome.
[1] https://cs.android.com/android/platform/superproject/main/+/main:hardware/interfaces/biometrics/fingerprint/aidl/android/hardware/biometrics/fingerprint/SensorProps.aidl?q=halHandlesDisplayTouches
Test: Build and verify no regression authenticating or registering
fingerprints with udfps AIDL HAL.
Change-Id: I56166950c6ef7cbb0c4ac2c0b7998e4a909d4af9
diff --git a/core/java/android/hardware/fingerprint/FingerprintSensorPropertiesInternal.java b/core/java/android/hardware/fingerprint/FingerprintSensorPropertiesInternal.java
index 8fbe05c..7ea88a1 100644
--- a/core/java/android/hardware/fingerprint/FingerprintSensorPropertiesInternal.java
+++ b/core/java/android/hardware/fingerprint/FingerprintSensorPropertiesInternal.java
@@ -40,6 +40,7 @@
*/
public final @FingerprintSensorProperties.SensorType int sensorType;
public final boolean halControlsIllumination;
+ public final boolean halHandlesDisplayTouches;
private final List<SensorLocationInternal> mSensorLocations;
@@ -48,6 +49,7 @@
@NonNull List<ComponentInfoInternal> componentInfo,
@FingerprintSensorProperties.SensorType int sensorType,
boolean halControlsIllumination,
+ boolean halHandlesDisplayTouches,
boolean resetLockoutRequiresHardwareAuthToken,
@NonNull List<SensorLocationInternal> sensorLocations) {
// IBiometricsFingerprint@2.1 handles lockout in the framework, so the challenge is not
@@ -58,6 +60,7 @@
resetLockoutRequiresHardwareAuthToken, false /* resetLockoutRequiresChallenge */);
this.sensorType = sensorType;
this.halControlsIllumination = halControlsIllumination;
+ this.halHandlesDisplayTouches = halHandlesDisplayTouches;
this.mSensorLocations = List.copyOf(sensorLocations);
}
@@ -71,7 +74,8 @@
boolean resetLockoutRequiresHardwareAuthToken) {
// TODO(b/179175438): Value should be provided from the HAL
this(sensorId, strength, maxEnrollmentsPerUser, componentInfo, sensorType,
- false /* halControlsIllumination */, resetLockoutRequiresHardwareAuthToken,
+ false /* halControlsIllumination */, false /* halHandlesDisplayTouches */,
+ resetLockoutRequiresHardwareAuthToken,
List.of(new SensorLocationInternal("" /* displayId */, 540 /* sensorLocationX */,
1636 /* sensorLocationY */, 130 /* sensorRadius */)));
}
@@ -80,6 +84,7 @@
super(in);
sensorType = in.readInt();
halControlsIllumination = in.readBoolean();
+ halHandlesDisplayTouches = in.readBoolean();
mSensorLocations = in.createTypedArrayList(SensorLocationInternal.CREATOR);
}
@@ -106,6 +111,7 @@
super.writeToParcel(dest, flags);
dest.writeInt(sensorType);
dest.writeBoolean(halControlsIllumination);
+ dest.writeBoolean(halHandlesDisplayTouches);
dest.writeTypedList(mSensorLocations);
}
diff --git a/core/java/android/hardware/fingerprint/HidlFingerprintSensorConfig.java b/core/java/android/hardware/fingerprint/HidlFingerprintSensorConfig.java
index 9febcab..95721b7 100644
--- a/core/java/android/hardware/fingerprint/HidlFingerprintSensorConfig.java
+++ b/core/java/android/hardware/fingerprint/HidlFingerprintSensorConfig.java
@@ -76,6 +76,7 @@
commonProps.maxEnrollmentsPerUser = context.getResources().getInteger(
R.integer.config_fingerprintMaxTemplatesPerUser);
halControlsIllumination = false;
+ halHandlesDisplayTouches = false;
sensorLocations = new SensorLocation[1];
// Non-empty workaroundLocations indicates that the sensor is SFPS.
diff --git a/core/tests/coretests/src/android/hardware/fingerprint/FingerprintManagerTest.java b/core/tests/coretests/src/android/hardware/fingerprint/FingerprintManagerTest.java
index c3ea7d3..8bed636 100644
--- a/core/tests/coretests/src/android/hardware/fingerprint/FingerprintManagerTest.java
+++ b/core/tests/coretests/src/android/hardware/fingerprint/FingerprintManagerTest.java
@@ -110,6 +110,7 @@
new ArrayList<>() /* componentInfo */,
FingerprintSensorProperties.TYPE_UNKNOWN,
true /* halControlsIllumination */,
+ false /* halHandlesDisplayTouches */,
true /* resetLockoutRequiresHardwareAuthToken */,
new ArrayList<>() /* sensorLocations */));
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/data/repository/FingerprintRepositoryImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/data/repository/FingerprintRepositoryImplTest.kt
index ffabc83..d1ba7f8 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/data/repository/FingerprintRepositoryImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/data/repository/FingerprintRepositoryImplTest.kt
@@ -104,6 +104,7 @@
),
FingerprintSensorProperties.TYPE_REAR,
false /* halControlsIllumination */,
+ false /* halHandlesDisplayTouches */,
true /* resetLockoutRequiresHardwareAuthToken */,
listOf<SensorLocationInternal>(
SensorLocationInternal(
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/FingerprintPropertyRepository.kt b/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/FingerprintPropertyRepository.kt
index c4e1ccf..3d56ebb 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/FingerprintPropertyRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/FingerprintPropertyRepository.kt
@@ -163,6 +163,7 @@
listOf<ComponentInfoInternal>(),
FingerprintSensorProperties.TYPE_UNKNOWN,
false /* halControlsIllumination */,
+ false /* halHandlesDisplayTouches */,
true /* resetLockoutRequiresHardwareAuthToken */,
listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT),
)
@@ -174,6 +175,7 @@
listOf<ComponentInfoInternal>(),
FingerprintSensorProperties.TYPE_UNKNOWN,
false /* halControlsIllumination */,
+ false /* halHandlesDisplayTouches */,
true /* resetLockoutRequiresHardwareAuthToken */,
listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT),
)
diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java
index b6768c9..abe2fca2 100644
--- a/services/core/java/com/android/server/biometrics/AuthService.java
+++ b/services/core/java/com/android/server/biometrics/AuthService.java
@@ -1011,6 +1011,7 @@
return new FingerprintSensorPropertiesInternal(sensorId,
Utils.authenticatorStrengthToPropertyStrength(strength), maxEnrollmentsPerUser,
componentInfo, sensorType, true /* halControlsIllumination */,
+ false /* halHandlesDisplayTouches */,
resetLockoutRequiresHardwareAuthToken,
List.of(new SensorLocationInternal("" /* display */, udfpsProps[0],
udfpsProps[1], udfpsProps[2])));
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 c18d925..0ee5958 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
@@ -750,6 +750,9 @@
@Override
public void onPointerDown(long requestId, int sensorId, PointerContext pc) {
+ if (mFingerprintSensors.get(sensorId).getSensorProperties().halHandlesDisplayTouches) {
+ return;
+ }
mFingerprintSensors.get(sensorId).getScheduler().getCurrentClientIfMatches(
requestId, (client) -> {
if (!(client instanceof Udfps)) {
@@ -762,6 +765,9 @@
@Override
public void onPointerUp(long requestId, int sensorId, PointerContext pc) {
+ if (mFingerprintSensors.get(sensorId).getSensorProperties().halHandlesDisplayTouches) {
+ return;
+ }
mFingerprintSensors.get(sensorId).getScheduler().getCurrentClientIfMatches(
requestId, (client) -> {
if (!(client instanceof Udfps)) {
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 25d1fe7..77f35b2 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
@@ -224,6 +224,7 @@
componentInfo,
prop.sensorType,
prop.halControlsIllumination,
+ prop.halHandlesDisplayTouches,
resetLockoutRequiresHardwareAuthToken,
!workaroundLocations.isEmpty() ? workaroundLocations :
Arrays.stream(prop.sensorLocations).map(location ->