Loading services/core/java/com/android/server/biometrics/sensors/face/aidl/AidlResponseHandler.java +6 −3 Original line number Original line Diff line number Diff line Loading @@ -80,13 +80,16 @@ public class AidlResponseHandler extends ISessionCallback.Stub { private final AuthSessionCoordinator mAuthSessionCoordinator; private final AuthSessionCoordinator mAuthSessionCoordinator; @NonNull @NonNull private final AidlResponseHandlerCallback mAidlResponseHandlerCallback; private final AidlResponseHandlerCallback mAidlResponseHandlerCallback; @NonNull private final FaceUtils mBiometricUtils; public AidlResponseHandler(@NonNull Context context, public AidlResponseHandler(@NonNull Context context, @NonNull BiometricScheduler scheduler, int sensorId, int userId, @NonNull BiometricScheduler scheduler, int sensorId, int userId, @NonNull LockoutTracker lockoutTracker, @NonNull LockoutTracker lockoutTracker, @NonNull LockoutResetDispatcher lockoutResetDispatcher, @NonNull LockoutResetDispatcher lockoutResetDispatcher, @NonNull AuthSessionCoordinator authSessionCoordinator, @NonNull AuthSessionCoordinator authSessionCoordinator, @NonNull AidlResponseHandlerCallback aidlResponseHandlerCallback) { @NonNull AidlResponseHandlerCallback aidlResponseHandlerCallback, @NonNull FaceUtils biometricUtils) { mContext = context; mContext = context; mScheduler = scheduler; mScheduler = scheduler; mSensorId = sensorId; mSensorId = sensorId; Loading @@ -95,6 +98,7 @@ public class AidlResponseHandler extends ISessionCallback.Stub { mLockoutResetDispatcher = lockoutResetDispatcher; mLockoutResetDispatcher = lockoutResetDispatcher; mAuthSessionCoordinator = authSessionCoordinator; mAuthSessionCoordinator = authSessionCoordinator; mAidlResponseHandlerCallback = aidlResponseHandlerCallback; mAidlResponseHandlerCallback = aidlResponseHandlerCallback; mBiometricUtils = biometricUtils; } } @Override @Override Loading Loading @@ -167,8 +171,7 @@ public class AidlResponseHandler extends ISessionCallback.Stub { } else { } else { currentUserId = client.getTargetUserId(); currentUserId = client.getTargetUserId(); } } final CharSequence name = FaceUtils.getInstance(mSensorId) final CharSequence name = mBiometricUtils.getUniqueName(mContext, currentUserId); .getUniqueName(mContext, currentUserId); final Face face = new Face(name, enrollmentId, mSensorId); final Face face = new Face(name, enrollmentId, mSensorId); handleResponse(FaceEnrollClient.class, (c) -> { handleResponse(FaceEnrollClient.class, (c) -> { Loading services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java +5 −3 Original line number Original line Diff line number Diff line Loading @@ -60,7 +60,6 @@ import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.EnrollClient; import com.android.server.biometrics.sensors.EnrollClient; import com.android.server.biometrics.sensors.face.FaceService; import com.android.server.biometrics.sensors.face.FaceService; import com.android.server.biometrics.sensors.face.FaceUtils; import java.io.IOException; import java.io.IOException; import java.util.ArrayList; import java.util.ArrayList; Loading @@ -85,6 +84,7 @@ public class FaceEnrollClient extends EnrollClient<AidlSession> { private final int mMaxTemplatesPerUser; private final int mMaxTemplatesPerUser; private final boolean mDebugConsent; private final boolean mDebugConsent; private final @android.hardware.face.FaceEnrollOptions.EnrollReason int mEnrollReason; private final @android.hardware.face.FaceEnrollOptions.EnrollReason int mEnrollReason; private final BiometricUtils<Face> mBiometricUtils; private final ClientMonitorCallback mPreviewHandleDeleterCallback = private final ClientMonitorCallback mPreviewHandleDeleterCallback = new ClientMonitorCallback() { new ClientMonitorCallback() { Loading @@ -107,7 +107,8 @@ public class FaceEnrollClient extends EnrollClient<AidlSession> { @NonNull BiometricLogger logger, @NonNull BiometricContext biometricContext, @NonNull BiometricLogger logger, @NonNull BiometricContext biometricContext, int maxTemplatesPerUser, boolean debugConsent, int maxTemplatesPerUser, boolean debugConsent, android.hardware.face.FaceEnrollOptions options, android.hardware.face.FaceEnrollOptions options, @NonNull AuthenticationStateListeners authenticationStateListeners) { @NonNull AuthenticationStateListeners authenticationStateListeners, @NonNull BiometricUtils<Face> biometricUtils) { super(context, lazyDaemon, token, listener, userId, hardwareAuthToken, opPackageName, utils, super(context, lazyDaemon, token, listener, userId, hardwareAuthToken, opPackageName, utils, timeoutSec, sensorId, false /* shouldVibrate */, logger, biometricContext, timeoutSec, sensorId, false /* shouldVibrate */, logger, biometricContext, BiometricFaceConstants.reasonToMetric(options.getEnrollReason())); BiometricFaceConstants.reasonToMetric(options.getEnrollReason())); Loading @@ -122,6 +123,7 @@ public class FaceEnrollClient extends EnrollClient<AidlSession> { mDebugConsent = debugConsent; mDebugConsent = debugConsent; mDisabledFeatures = disabledFeatures; mDisabledFeatures = disabledFeatures; mPreviewSurface = previewSurface; mPreviewSurface = previewSurface; mBiometricUtils = biometricUtils; Slog.w(TAG, "EnrollOptions " Slog.w(TAG, "EnrollOptions " + android.hardware.face.FaceEnrollOptions.enrollReasonToString( + android.hardware.face.FaceEnrollOptions.enrollReasonToString( options.getEnrollReason())); options.getEnrollReason())); Loading @@ -144,7 +146,7 @@ public class FaceEnrollClient extends EnrollClient<AidlSession> { @Override @Override protected boolean hasReachedEnrollmentLimit() { protected boolean hasReachedEnrollmentLimit() { return FaceUtils.getInstance(getSensorId()).getBiometricsForUser(getContext(), return mBiometricUtils.getBiometricsForUser(getContext(), getTargetUserId()).size() >= mMaxTemplatesPerUser; getTargetUserId()).size() >= mMaxTemplatesPerUser; } } Loading services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalCleanupClient.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -30,7 +30,6 @@ import com.android.server.biometrics.sensors.BiometricUtils; import com.android.server.biometrics.sensors.InternalCleanupClient; import com.android.server.biometrics.sensors.InternalCleanupClient; import com.android.server.biometrics.sensors.InternalEnumerateClient; import com.android.server.biometrics.sensors.InternalEnumerateClient; import com.android.server.biometrics.sensors.RemovalClient; import com.android.server.biometrics.sensors.RemovalClient; import com.android.server.biometrics.sensors.face.FaceUtils; import java.util.List; import java.util.List; import java.util.Map; import java.util.Map; Loading Loading @@ -75,7 +74,7 @@ public class FaceInternalCleanupClient extends InternalCleanupClient<Face, AidlS @Override @Override protected void onAddUnknownTemplate(int userId, protected void onAddUnknownTemplate(int userId, @NonNull BiometricAuthenticator.Identifier identifier) { @NonNull BiometricAuthenticator.Identifier identifier) { FaceUtils.getInstance(getSensorId()).addBiometricForUser( mBiometricUtils.addBiometricForUser( getContext(), getTargetUserId(), (Face) identifier); getContext(), getTargetUserId(), (Face) identifier); } } Loading services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java +15 −14 Original line number Original line Diff line number Diff line Loading @@ -72,7 +72,6 @@ import com.android.server.biometrics.sensors.LockoutResetDispatcher; import com.android.server.biometrics.sensors.LockoutTracker; import com.android.server.biometrics.sensors.LockoutTracker; import com.android.server.biometrics.sensors.PerformanceTracker; import com.android.server.biometrics.sensors.PerformanceTracker; import com.android.server.biometrics.sensors.SensorList; import com.android.server.biometrics.sensors.SensorList; import com.android.server.biometrics.sensors.face.FaceUtils; import com.android.server.biometrics.sensors.face.ServiceProvider; import com.android.server.biometrics.sensors.face.ServiceProvider; import com.android.server.biometrics.sensors.face.UsageStats; import com.android.server.biometrics.sensors.face.UsageStats; import com.android.server.biometrics.sensors.face.hidl.HidlToAidlSensorAdapter; import com.android.server.biometrics.sensors.face.hidl.HidlToAidlSensorAdapter; Loading Loading @@ -326,8 +325,8 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { } } if (Build.isDebuggable()) { if (Build.isDebuggable()) { BiometricUtils<Face> utils = FaceUtils.getInstance( BiometricUtils<Face> utils = mFaceSensors.get( mFaceSensors.keyAt(0)); mFaceSensors.keyAt(0)).getFaceUtilsInstance(); for (UserInfo user : UserManager.get(mContext).getAliveUsers()) { for (UserInfo user : UserManager.get(mContext).getAliveUsers()) { List<Face> enrollments = utils.getBiometricsForUser(mContext, user.id); List<Face> enrollments = utils.getBiometricsForUser(mContext, user.id); Slog.d(getTag(), "Expecting enrollments for user " + user.id + ": " Slog.d(getTag(), "Expecting enrollments for user " + user.id + ": " Loading Loading @@ -386,7 +385,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { new InvalidationRequesterClient<>(mContext, userId, sensorId, new InvalidationRequesterClient<>(mContext, userId, sensorId, BiometricLogger.ofUnknown(mContext), BiometricLogger.ofUnknown(mContext), mBiometricContext, mBiometricContext, FaceUtils.getInstance(sensorId)); mFaceSensors.get(sensorId).getFaceUtilsInstance()); scheduleForSensor(sensorId, client); scheduleForSensor(sensorId, client); }); }); } } Loading Loading @@ -415,7 +414,8 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { @NonNull @NonNull @Override @Override public List<Face> getEnrolledFaces(int sensorId, int userId) { public List<Face> getEnrolledFaces(int sensorId, int userId) { return FaceUtils.getInstance(sensorId).getBiometricsForUser(mContext, userId); return mFaceSensors.get(sensorId).getFaceUtilsInstance() .getBiometricsForUser(mContext, userId); } } @Override @Override Loading Loading @@ -497,13 +497,14 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { final FaceEnrollClient client = new FaceEnrollClient(mContext, final FaceEnrollClient client = new FaceEnrollClient(mContext, mFaceSensors.get(sensorId).getLazySession(), token, mFaceSensors.get(sensorId).getLazySession(), token, new ClientMonitorCallbackConverter(receiver), userId, hardwareAuthToken, new ClientMonitorCallbackConverter(receiver), userId, hardwareAuthToken, opPackageName, id, FaceUtils.getInstance(sensorId), disabledFeatures, opPackageName, id, mFaceSensors.get(sensorId).getFaceUtilsInstance(), ENROLL_TIMEOUT_SEC, previewSurface, sensorId, disabledFeatures, ENROLL_TIMEOUT_SEC, previewSurface, sensorId, createLogger(BiometricsProtoEnums.ACTION_ENROLL, createLogger(BiometricsProtoEnums.ACTION_ENROLL, BiometricsProtoEnums.CLIENT_UNKNOWN, BiometricsProtoEnums.CLIENT_UNKNOWN, mAuthenticationStatsCollector), mAuthenticationStatsCollector), mBiometricContext, maxTemplatesPerUser, debugConsent, options, mBiometricContext, maxTemplatesPerUser, debugConsent, options, mAuthenticationStateListeners); mAuthenticationStateListeners, mFaceSensors.get(sensorId).getFaceUtilsInstance()); scheduleForSensor(sensorId, client, mBiometricStateCallback); scheduleForSensor(sensorId, client, mBiometricStateCallback); }); }); return id; return id; Loading Loading @@ -615,7 +616,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { @Override @Override public void scheduleRemoveAll(int sensorId, @NonNull IBinder token, int userId, public void scheduleRemoveAll(int sensorId, @NonNull IBinder token, int userId, @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName) { @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName) { final List<Face> faces = FaceUtils.getInstance(sensorId) final List<Face> faces = mFaceSensors.get(sensorId).getFaceUtilsInstance() .getBiometricsForUser(mContext, userId); .getBiometricsForUser(mContext, userId); final int[] faceIds = new int[faces.size()]; final int[] faceIds = new int[faces.size()]; for (int i = 0; i < faces.size(); i++) { for (int i = 0; i < faces.size(); i++) { Loading @@ -632,7 +633,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { final FaceRemovalClient client = new FaceRemovalClient(mContext, final FaceRemovalClient client = new FaceRemovalClient(mContext, mFaceSensors.get(sensorId).getLazySession(), token, mFaceSensors.get(sensorId).getLazySession(), token, new ClientMonitorCallbackConverter(receiver), faceIds, userId, new ClientMonitorCallbackConverter(receiver), faceIds, userId, opPackageName, FaceUtils.getInstance(sensorId), sensorId, opPackageName, mFaceSensors.get(sensorId).getFaceUtilsInstance(), sensorId, createLogger(BiometricsProtoEnums.ACTION_REMOVE, createLogger(BiometricsProtoEnums.ACTION_REMOVE, BiometricsProtoEnums.CLIENT_UNKNOWN, BiometricsProtoEnums.CLIENT_UNKNOWN, mAuthenticationStatsCollector), mAuthenticationStatsCollector), Loading Loading @@ -666,7 +667,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName) { @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName) { mHandler.post(() -> { mHandler.post(() -> { mFaceSensors.get(sensorId).scheduleFaceUpdateActiveUserClient(userId); mFaceSensors.get(sensorId).scheduleFaceUpdateActiveUserClient(userId); final List<Face> faces = FaceUtils.getInstance(sensorId) final List<Face> faces = mFaceSensors.get(sensorId).getFaceUtilsInstance() .getBiometricsForUser(mContext, userId); .getBiometricsForUser(mContext, userId); if (faces.isEmpty()) { if (faces.isEmpty()) { Slog.w(getTag(), "Ignoring setFeature, no templates enrolled for user: " + userId); Slog.w(getTag(), "Ignoring setFeature, no templates enrolled for user: " + userId); Loading @@ -687,7 +688,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { @NonNull ClientMonitorCallbackConverter callback, @NonNull String opPackageName) { @NonNull ClientMonitorCallbackConverter callback, @NonNull String opPackageName) { mHandler.post(() -> { mHandler.post(() -> { mFaceSensors.get(sensorId).scheduleFaceUpdateActiveUserClient(userId); mFaceSensors.get(sensorId).scheduleFaceUpdateActiveUserClient(userId); final List<Face> faces = FaceUtils.getInstance(sensorId) final List<Face> faces = mFaceSensors.get(sensorId).getFaceUtilsInstance() .getBiometricsForUser(mContext, userId); .getBiometricsForUser(mContext, userId); if (faces.isEmpty()) { if (faces.isEmpty()) { Slog.w(getTag(), "Ignoring getFeature, no templates enrolled for user: " + userId); Slog.w(getTag(), "Ignoring getFeature, no templates enrolled for user: " + userId); Loading Loading @@ -727,7 +728,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { BiometricsProtoEnums.CLIENT_UNKNOWN, BiometricsProtoEnums.CLIENT_UNKNOWN, mAuthenticationStatsCollector), mAuthenticationStatsCollector), mBiometricContext, mBiometricContext, FaceUtils.getInstance(sensorId), mFaceSensors.get(sensorId).getFaceUtilsInstance(), mFaceSensors.get(sensorId).getAuthenticatorIds()); mFaceSensors.get(sensorId).getAuthenticatorIds()); if (favorHalEnrollments) { if (favorHalEnrollments) { client.setFavorHalEnrollments(); client.setFavorHalEnrollments(); Loading Loading @@ -768,7 +769,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { JSONArray sets = new JSONArray(); JSONArray sets = new JSONArray(); for (UserInfo user : UserManager.get(mContext).getUsers()) { for (UserInfo user : UserManager.get(mContext).getUsers()) { final int userId = user.getUserHandle().getIdentifier(); final int userId = user.getUserHandle().getIdentifier(); final int c = FaceUtils.getInstance(sensorId) final int c = mFaceSensors.get(sensorId).getFaceUtilsInstance() .getBiometricsForUser(mContext, userId).size(); .getBiometricsForUser(mContext, userId).size(); JSONObject set = new JSONObject(); JSONObject set = new JSONObject(); set.put("id", userId); set.put("id", userId); Loading services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java +6 −3 Original line number Original line Diff line number Diff line Loading @@ -158,7 +158,7 @@ public class Sensor { Slog.e(TAG, "Face sensor hardware unavailable."); Slog.e(TAG, "Face sensor hardware unavailable."); mCurrentSession = null; mCurrentSession = null; } } }); }, getFaceUtilsInstance()); return Sensor.this.getStartUserClient(resultController, sensorId, return Sensor.this.getStartUserClient(resultController, sensorId, newUserId, provider); newUserId, provider); Loading Loading @@ -280,8 +280,7 @@ public class Sensor { final long userToken = proto.start(SensorStateProto.USER_STATES); final long userToken = proto.start(SensorStateProto.USER_STATES); proto.write(UserStateProto.USER_ID, userId); proto.write(UserStateProto.USER_ID, userId); proto.write(UserStateProto.NUM_ENROLLED, proto.write(UserStateProto.NUM_ENROLLED, FaceUtils.getInstance(mSensorProperties.sensorId) getFaceUtilsInstance().getBiometricsForUser(mContext, userId).size()); .getBiometricsForUser(mContext, userId).size()); proto.end(userToken); proto.end(userToken); } } Loading Loading @@ -358,4 +357,8 @@ public class Sensor { Supplier<AidlSession> lazySession) { Supplier<AidlSession> lazySession) { mLazySession = lazySession; mLazySession = lazySession; } } public FaceUtils getFaceUtilsInstance() { return FaceUtils.getInstance(mSensorProperties.sensorId); } } } Loading
services/core/java/com/android/server/biometrics/sensors/face/aidl/AidlResponseHandler.java +6 −3 Original line number Original line Diff line number Diff line Loading @@ -80,13 +80,16 @@ public class AidlResponseHandler extends ISessionCallback.Stub { private final AuthSessionCoordinator mAuthSessionCoordinator; private final AuthSessionCoordinator mAuthSessionCoordinator; @NonNull @NonNull private final AidlResponseHandlerCallback mAidlResponseHandlerCallback; private final AidlResponseHandlerCallback mAidlResponseHandlerCallback; @NonNull private final FaceUtils mBiometricUtils; public AidlResponseHandler(@NonNull Context context, public AidlResponseHandler(@NonNull Context context, @NonNull BiometricScheduler scheduler, int sensorId, int userId, @NonNull BiometricScheduler scheduler, int sensorId, int userId, @NonNull LockoutTracker lockoutTracker, @NonNull LockoutTracker lockoutTracker, @NonNull LockoutResetDispatcher lockoutResetDispatcher, @NonNull LockoutResetDispatcher lockoutResetDispatcher, @NonNull AuthSessionCoordinator authSessionCoordinator, @NonNull AuthSessionCoordinator authSessionCoordinator, @NonNull AidlResponseHandlerCallback aidlResponseHandlerCallback) { @NonNull AidlResponseHandlerCallback aidlResponseHandlerCallback, @NonNull FaceUtils biometricUtils) { mContext = context; mContext = context; mScheduler = scheduler; mScheduler = scheduler; mSensorId = sensorId; mSensorId = sensorId; Loading @@ -95,6 +98,7 @@ public class AidlResponseHandler extends ISessionCallback.Stub { mLockoutResetDispatcher = lockoutResetDispatcher; mLockoutResetDispatcher = lockoutResetDispatcher; mAuthSessionCoordinator = authSessionCoordinator; mAuthSessionCoordinator = authSessionCoordinator; mAidlResponseHandlerCallback = aidlResponseHandlerCallback; mAidlResponseHandlerCallback = aidlResponseHandlerCallback; mBiometricUtils = biometricUtils; } } @Override @Override Loading Loading @@ -167,8 +171,7 @@ public class AidlResponseHandler extends ISessionCallback.Stub { } else { } else { currentUserId = client.getTargetUserId(); currentUserId = client.getTargetUserId(); } } final CharSequence name = FaceUtils.getInstance(mSensorId) final CharSequence name = mBiometricUtils.getUniqueName(mContext, currentUserId); .getUniqueName(mContext, currentUserId); final Face face = new Face(name, enrollmentId, mSensorId); final Face face = new Face(name, enrollmentId, mSensorId); handleResponse(FaceEnrollClient.class, (c) -> { handleResponse(FaceEnrollClient.class, (c) -> { Loading
services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java +5 −3 Original line number Original line Diff line number Diff line Loading @@ -60,7 +60,6 @@ import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.EnrollClient; import com.android.server.biometrics.sensors.EnrollClient; import com.android.server.biometrics.sensors.face.FaceService; import com.android.server.biometrics.sensors.face.FaceService; import com.android.server.biometrics.sensors.face.FaceUtils; import java.io.IOException; import java.io.IOException; import java.util.ArrayList; import java.util.ArrayList; Loading @@ -85,6 +84,7 @@ public class FaceEnrollClient extends EnrollClient<AidlSession> { private final int mMaxTemplatesPerUser; private final int mMaxTemplatesPerUser; private final boolean mDebugConsent; private final boolean mDebugConsent; private final @android.hardware.face.FaceEnrollOptions.EnrollReason int mEnrollReason; private final @android.hardware.face.FaceEnrollOptions.EnrollReason int mEnrollReason; private final BiometricUtils<Face> mBiometricUtils; private final ClientMonitorCallback mPreviewHandleDeleterCallback = private final ClientMonitorCallback mPreviewHandleDeleterCallback = new ClientMonitorCallback() { new ClientMonitorCallback() { Loading @@ -107,7 +107,8 @@ public class FaceEnrollClient extends EnrollClient<AidlSession> { @NonNull BiometricLogger logger, @NonNull BiometricContext biometricContext, @NonNull BiometricLogger logger, @NonNull BiometricContext biometricContext, int maxTemplatesPerUser, boolean debugConsent, int maxTemplatesPerUser, boolean debugConsent, android.hardware.face.FaceEnrollOptions options, android.hardware.face.FaceEnrollOptions options, @NonNull AuthenticationStateListeners authenticationStateListeners) { @NonNull AuthenticationStateListeners authenticationStateListeners, @NonNull BiometricUtils<Face> biometricUtils) { super(context, lazyDaemon, token, listener, userId, hardwareAuthToken, opPackageName, utils, super(context, lazyDaemon, token, listener, userId, hardwareAuthToken, opPackageName, utils, timeoutSec, sensorId, false /* shouldVibrate */, logger, biometricContext, timeoutSec, sensorId, false /* shouldVibrate */, logger, biometricContext, BiometricFaceConstants.reasonToMetric(options.getEnrollReason())); BiometricFaceConstants.reasonToMetric(options.getEnrollReason())); Loading @@ -122,6 +123,7 @@ public class FaceEnrollClient extends EnrollClient<AidlSession> { mDebugConsent = debugConsent; mDebugConsent = debugConsent; mDisabledFeatures = disabledFeatures; mDisabledFeatures = disabledFeatures; mPreviewSurface = previewSurface; mPreviewSurface = previewSurface; mBiometricUtils = biometricUtils; Slog.w(TAG, "EnrollOptions " Slog.w(TAG, "EnrollOptions " + android.hardware.face.FaceEnrollOptions.enrollReasonToString( + android.hardware.face.FaceEnrollOptions.enrollReasonToString( options.getEnrollReason())); options.getEnrollReason())); Loading @@ -144,7 +146,7 @@ public class FaceEnrollClient extends EnrollClient<AidlSession> { @Override @Override protected boolean hasReachedEnrollmentLimit() { protected boolean hasReachedEnrollmentLimit() { return FaceUtils.getInstance(getSensorId()).getBiometricsForUser(getContext(), return mBiometricUtils.getBiometricsForUser(getContext(), getTargetUserId()).size() >= mMaxTemplatesPerUser; getTargetUserId()).size() >= mMaxTemplatesPerUser; } } Loading
services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalCleanupClient.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -30,7 +30,6 @@ import com.android.server.biometrics.sensors.BiometricUtils; import com.android.server.biometrics.sensors.InternalCleanupClient; import com.android.server.biometrics.sensors.InternalCleanupClient; import com.android.server.biometrics.sensors.InternalEnumerateClient; import com.android.server.biometrics.sensors.InternalEnumerateClient; import com.android.server.biometrics.sensors.RemovalClient; import com.android.server.biometrics.sensors.RemovalClient; import com.android.server.biometrics.sensors.face.FaceUtils; import java.util.List; import java.util.List; import java.util.Map; import java.util.Map; Loading Loading @@ -75,7 +74,7 @@ public class FaceInternalCleanupClient extends InternalCleanupClient<Face, AidlS @Override @Override protected void onAddUnknownTemplate(int userId, protected void onAddUnknownTemplate(int userId, @NonNull BiometricAuthenticator.Identifier identifier) { @NonNull BiometricAuthenticator.Identifier identifier) { FaceUtils.getInstance(getSensorId()).addBiometricForUser( mBiometricUtils.addBiometricForUser( getContext(), getTargetUserId(), (Face) identifier); getContext(), getTargetUserId(), (Face) identifier); } } Loading
services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java +15 −14 Original line number Original line Diff line number Diff line Loading @@ -72,7 +72,6 @@ import com.android.server.biometrics.sensors.LockoutResetDispatcher; import com.android.server.biometrics.sensors.LockoutTracker; import com.android.server.biometrics.sensors.LockoutTracker; import com.android.server.biometrics.sensors.PerformanceTracker; import com.android.server.biometrics.sensors.PerformanceTracker; import com.android.server.biometrics.sensors.SensorList; import com.android.server.biometrics.sensors.SensorList; import com.android.server.biometrics.sensors.face.FaceUtils; import com.android.server.biometrics.sensors.face.ServiceProvider; import com.android.server.biometrics.sensors.face.ServiceProvider; import com.android.server.biometrics.sensors.face.UsageStats; import com.android.server.biometrics.sensors.face.UsageStats; import com.android.server.biometrics.sensors.face.hidl.HidlToAidlSensorAdapter; import com.android.server.biometrics.sensors.face.hidl.HidlToAidlSensorAdapter; Loading Loading @@ -326,8 +325,8 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { } } if (Build.isDebuggable()) { if (Build.isDebuggable()) { BiometricUtils<Face> utils = FaceUtils.getInstance( BiometricUtils<Face> utils = mFaceSensors.get( mFaceSensors.keyAt(0)); mFaceSensors.keyAt(0)).getFaceUtilsInstance(); for (UserInfo user : UserManager.get(mContext).getAliveUsers()) { for (UserInfo user : UserManager.get(mContext).getAliveUsers()) { List<Face> enrollments = utils.getBiometricsForUser(mContext, user.id); List<Face> enrollments = utils.getBiometricsForUser(mContext, user.id); Slog.d(getTag(), "Expecting enrollments for user " + user.id + ": " Slog.d(getTag(), "Expecting enrollments for user " + user.id + ": " Loading Loading @@ -386,7 +385,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { new InvalidationRequesterClient<>(mContext, userId, sensorId, new InvalidationRequesterClient<>(mContext, userId, sensorId, BiometricLogger.ofUnknown(mContext), BiometricLogger.ofUnknown(mContext), mBiometricContext, mBiometricContext, FaceUtils.getInstance(sensorId)); mFaceSensors.get(sensorId).getFaceUtilsInstance()); scheduleForSensor(sensorId, client); scheduleForSensor(sensorId, client); }); }); } } Loading Loading @@ -415,7 +414,8 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { @NonNull @NonNull @Override @Override public List<Face> getEnrolledFaces(int sensorId, int userId) { public List<Face> getEnrolledFaces(int sensorId, int userId) { return FaceUtils.getInstance(sensorId).getBiometricsForUser(mContext, userId); return mFaceSensors.get(sensorId).getFaceUtilsInstance() .getBiometricsForUser(mContext, userId); } } @Override @Override Loading Loading @@ -497,13 +497,14 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { final FaceEnrollClient client = new FaceEnrollClient(mContext, final FaceEnrollClient client = new FaceEnrollClient(mContext, mFaceSensors.get(sensorId).getLazySession(), token, mFaceSensors.get(sensorId).getLazySession(), token, new ClientMonitorCallbackConverter(receiver), userId, hardwareAuthToken, new ClientMonitorCallbackConverter(receiver), userId, hardwareAuthToken, opPackageName, id, FaceUtils.getInstance(sensorId), disabledFeatures, opPackageName, id, mFaceSensors.get(sensorId).getFaceUtilsInstance(), ENROLL_TIMEOUT_SEC, previewSurface, sensorId, disabledFeatures, ENROLL_TIMEOUT_SEC, previewSurface, sensorId, createLogger(BiometricsProtoEnums.ACTION_ENROLL, createLogger(BiometricsProtoEnums.ACTION_ENROLL, BiometricsProtoEnums.CLIENT_UNKNOWN, BiometricsProtoEnums.CLIENT_UNKNOWN, mAuthenticationStatsCollector), mAuthenticationStatsCollector), mBiometricContext, maxTemplatesPerUser, debugConsent, options, mBiometricContext, maxTemplatesPerUser, debugConsent, options, mAuthenticationStateListeners); mAuthenticationStateListeners, mFaceSensors.get(sensorId).getFaceUtilsInstance()); scheduleForSensor(sensorId, client, mBiometricStateCallback); scheduleForSensor(sensorId, client, mBiometricStateCallback); }); }); return id; return id; Loading Loading @@ -615,7 +616,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { @Override @Override public void scheduleRemoveAll(int sensorId, @NonNull IBinder token, int userId, public void scheduleRemoveAll(int sensorId, @NonNull IBinder token, int userId, @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName) { @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName) { final List<Face> faces = FaceUtils.getInstance(sensorId) final List<Face> faces = mFaceSensors.get(sensorId).getFaceUtilsInstance() .getBiometricsForUser(mContext, userId); .getBiometricsForUser(mContext, userId); final int[] faceIds = new int[faces.size()]; final int[] faceIds = new int[faces.size()]; for (int i = 0; i < faces.size(); i++) { for (int i = 0; i < faces.size(); i++) { Loading @@ -632,7 +633,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { final FaceRemovalClient client = new FaceRemovalClient(mContext, final FaceRemovalClient client = new FaceRemovalClient(mContext, mFaceSensors.get(sensorId).getLazySession(), token, mFaceSensors.get(sensorId).getLazySession(), token, new ClientMonitorCallbackConverter(receiver), faceIds, userId, new ClientMonitorCallbackConverter(receiver), faceIds, userId, opPackageName, FaceUtils.getInstance(sensorId), sensorId, opPackageName, mFaceSensors.get(sensorId).getFaceUtilsInstance(), sensorId, createLogger(BiometricsProtoEnums.ACTION_REMOVE, createLogger(BiometricsProtoEnums.ACTION_REMOVE, BiometricsProtoEnums.CLIENT_UNKNOWN, BiometricsProtoEnums.CLIENT_UNKNOWN, mAuthenticationStatsCollector), mAuthenticationStatsCollector), Loading Loading @@ -666,7 +667,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName) { @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName) { mHandler.post(() -> { mHandler.post(() -> { mFaceSensors.get(sensorId).scheduleFaceUpdateActiveUserClient(userId); mFaceSensors.get(sensorId).scheduleFaceUpdateActiveUserClient(userId); final List<Face> faces = FaceUtils.getInstance(sensorId) final List<Face> faces = mFaceSensors.get(sensorId).getFaceUtilsInstance() .getBiometricsForUser(mContext, userId); .getBiometricsForUser(mContext, userId); if (faces.isEmpty()) { if (faces.isEmpty()) { Slog.w(getTag(), "Ignoring setFeature, no templates enrolled for user: " + userId); Slog.w(getTag(), "Ignoring setFeature, no templates enrolled for user: " + userId); Loading @@ -687,7 +688,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { @NonNull ClientMonitorCallbackConverter callback, @NonNull String opPackageName) { @NonNull ClientMonitorCallbackConverter callback, @NonNull String opPackageName) { mHandler.post(() -> { mHandler.post(() -> { mFaceSensors.get(sensorId).scheduleFaceUpdateActiveUserClient(userId); mFaceSensors.get(sensorId).scheduleFaceUpdateActiveUserClient(userId); final List<Face> faces = FaceUtils.getInstance(sensorId) final List<Face> faces = mFaceSensors.get(sensorId).getFaceUtilsInstance() .getBiometricsForUser(mContext, userId); .getBiometricsForUser(mContext, userId); if (faces.isEmpty()) { if (faces.isEmpty()) { Slog.w(getTag(), "Ignoring getFeature, no templates enrolled for user: " + userId); Slog.w(getTag(), "Ignoring getFeature, no templates enrolled for user: " + userId); Loading Loading @@ -727,7 +728,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { BiometricsProtoEnums.CLIENT_UNKNOWN, BiometricsProtoEnums.CLIENT_UNKNOWN, mAuthenticationStatsCollector), mAuthenticationStatsCollector), mBiometricContext, mBiometricContext, FaceUtils.getInstance(sensorId), mFaceSensors.get(sensorId).getFaceUtilsInstance(), mFaceSensors.get(sensorId).getAuthenticatorIds()); mFaceSensors.get(sensorId).getAuthenticatorIds()); if (favorHalEnrollments) { if (favorHalEnrollments) { client.setFavorHalEnrollments(); client.setFavorHalEnrollments(); Loading Loading @@ -768,7 +769,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { JSONArray sets = new JSONArray(); JSONArray sets = new JSONArray(); for (UserInfo user : UserManager.get(mContext).getUsers()) { for (UserInfo user : UserManager.get(mContext).getUsers()) { final int userId = user.getUserHandle().getIdentifier(); final int userId = user.getUserHandle().getIdentifier(); final int c = FaceUtils.getInstance(sensorId) final int c = mFaceSensors.get(sensorId).getFaceUtilsInstance() .getBiometricsForUser(mContext, userId).size(); .getBiometricsForUser(mContext, userId).size(); JSONObject set = new JSONObject(); JSONObject set = new JSONObject(); set.put("id", userId); set.put("id", userId); Loading
services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java +6 −3 Original line number Original line Diff line number Diff line Loading @@ -158,7 +158,7 @@ public class Sensor { Slog.e(TAG, "Face sensor hardware unavailable."); Slog.e(TAG, "Face sensor hardware unavailable."); mCurrentSession = null; mCurrentSession = null; } } }); }, getFaceUtilsInstance()); return Sensor.this.getStartUserClient(resultController, sensorId, return Sensor.this.getStartUserClient(resultController, sensorId, newUserId, provider); newUserId, provider); Loading Loading @@ -280,8 +280,7 @@ public class Sensor { final long userToken = proto.start(SensorStateProto.USER_STATES); final long userToken = proto.start(SensorStateProto.USER_STATES); proto.write(UserStateProto.USER_ID, userId); proto.write(UserStateProto.USER_ID, userId); proto.write(UserStateProto.NUM_ENROLLED, proto.write(UserStateProto.NUM_ENROLLED, FaceUtils.getInstance(mSensorProperties.sensorId) getFaceUtilsInstance().getBiometricsForUser(mContext, userId).size()); .getBiometricsForUser(mContext, userId).size()); proto.end(userToken); proto.end(userToken); } } Loading Loading @@ -358,4 +357,8 @@ public class Sensor { Supplier<AidlSession> lazySession) { Supplier<AidlSession> lazySession) { mLazySession = lazySession; mLazySession = lazySession; } } public FaceUtils getFaceUtilsInstance() { return FaceUtils.getInstance(mSensorProperties.sensorId); } } }