Update logic when multiple face sensors exist
FaceService should get the provider for the specified sensor, instead
of getting the first provider.
Bug: 172957689
Test: atest CtsBiometricsTestCases
Change-Id: I8a3074501e90901df1121cf988dc504cf0d04d7f
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/FaceService.java b/services/core/java/com/android/server/biometrics/sensors/face/FaceService.java
index 7dc2cba..cb56e8c 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/FaceService.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/FaceService.java
@@ -127,17 +127,6 @@
return properties;
}
- @NonNull
- private List<Face> getEnrolledFaces(int userId, String opPackageName) {
- final Pair<Integer, ServiceProvider> provider = getSingleProvider();
- if (provider == null) {
- Slog.w(TAG, "Null provider for getEnrolledFaces, caller: " + opPackageName);
- return Collections.emptyList();
- }
-
- return provider.second.getEnrolledFaces(provider.first, userId);
- }
-
/**
* Receives the incoming binder calls from FaceManager.
*/
@@ -438,6 +427,7 @@
pw.println("Dumping for sensorId: " + props.sensorId
+ ", provider: " + provider.getClass().getSimpleName());
provider.dumpInternal(props.sensorId, pw);
+ pw.println();
}
}
}
@@ -471,7 +461,13 @@
Utils.checkPermission(getContext(), INTERACT_ACROSS_USERS);
}
- return FaceService.this.getEnrolledFaces(userId, opPackageName);
+ final ServiceProvider provider = getProviderForSensor(sensorId);
+ if (provider == null) {
+ Slog.w(TAG, "Null provider for getEnrolledFaces, caller: " + opPackageName);
+ return Collections.emptyList();
+ }
+
+ return provider.getEnrolledFaces(sensorId, userId);
}
@Override // Binder call
@@ -482,7 +478,16 @@
Utils.checkPermission(getContext(), INTERACT_ACROSS_USERS);
}
- return !FaceService.this.getEnrolledFaces(userId, opPackageName).isEmpty();
+ final ServiceProvider provider = getProviderForSensor(sensorId);
+ if (provider == null) {
+ Slog.w(TAG, "Null provider for hasEnrolledFaces, caller: " + opPackageName);
+ return false;
+ }
+
+ final boolean enrolled = provider.getEnrolledFaces(sensorId, userId).size() > 0;
+ Slog.d(TAG, "hasEnrolledFaces, sensor: " + sensorId + ", enrolled: " + enrolled);
+
+ return provider.getEnrolledFaces(sensorId, userId).size() > 0;
}
@Override // Binder call