Decrease amount of getAuthenticatorId invocations to the HAL
The HIDL contract is to update the authenticatorID when a new template
is enrolled. Thus, only update the authenticatorId cache when
1) the user is actually switching, which is infrequent
2) a user has enrolled a new biometric
Fixes: 133578311
Test: Authenticator ID is updated when new enrollment occurs
Change-Id: If79cb43ac1f42676995c955203653cb5fae0f10f
diff --git a/services/core/java/com/android/server/biometrics/face/FaceService.java b/services/core/java/com/android/server/biometrics/face/FaceService.java
index 0f2b16a..d172fbc 100644
--- a/services/core/java/com/android/server/biometrics/face/FaceService.java
+++ b/services/core/java/com/android/server/biometrics/face/FaceService.java
@@ -707,6 +707,18 @@
final Face face = new Face(getBiometricUtils()
.getUniqueName(getContext(), userId), faceId, deviceId);
FaceService.super.handleEnrollResult(face, remaining);
+
+ // Enrollment changes the authenticatorId, so update it here.
+ IBiometricsFace daemon = getFaceDaemon();
+ if (remaining == 0 && daemon != null) {
+ try {
+ mAuthenticatorIds.put(userId,
+ hasEnrolledBiometrics(userId) ? daemon.getAuthenticatorId().value
+ : 0L);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Unable to get authenticatorId", e);
+ }
+ }
});
}
@@ -968,9 +980,9 @@
daemon.setActiveUser(userId, faceDir.getAbsolutePath());
mCurrentUserId = userId;
+ mAuthenticatorIds.put(userId,
+ hasEnrolledBiometrics(userId) ? daemon.getAuthenticatorId().value : 0L);
}
- mAuthenticatorIds.put(userId,
- hasEnrolledBiometrics(userId) ? daemon.getAuthenticatorId().value : 0L);
} catch (RemoteException e) {
Slog.e(TAG, "Failed to setActiveUser():", e);
}