Loading services/core/java/com/android/server/biometrics/sensors/face/Face10.java +25 −5 Original line number Diff line number Diff line Loading @@ -25,12 +25,14 @@ import android.app.UserSwitchObserver; import android.content.Context; import android.content.pm.UserInfo; import android.hardware.biometrics.BiometricConstants; import android.hardware.biometrics.BiometricFaceConstants; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.face.V1_0.IBiometricsFace; import android.hardware.biometrics.face.V1_0.IBiometricsFaceClientCallback; import android.hardware.face.Face; import android.hardware.face.FaceSensorProperties; import android.hardware.face.IFaceServiceReceiver; import android.os.Binder; import android.os.Build; import android.os.Handler; import android.os.IBinder; Loading Loading @@ -109,6 +111,9 @@ class Face10 implements IHwBinder.DeathRecipient { @Override public void onUserSwitching(int newUserId) { scheduleInternalCleanup(newUserId); scheduleGetFeature(new Binder(), newUserId, BiometricFaceConstants.FEATURE_REQUIRE_ATTENTION, null, mContext.getOpPackageName()); } }; Loading Loading @@ -360,6 +365,9 @@ class Face10 implements IHwBinder.DeathRecipient { if (halId != 0) { scheduleLoadAuthenticatorIds(); scheduleInternalCleanup(ActivityManager.getCurrentUser()); scheduleGetFeature(new Binder(), ActivityManager.getCurrentUser(), BiometricFaceConstants.FEATURE_REQUIRE_ATTENTION, null, mContext.getOpPackageName()); } else { Slog.e(TAG, "Unable to set callback"); mDaemon = null; Loading Loading @@ -450,7 +458,7 @@ class Face10 implements IHwBinder.DeathRecipient { } void scheduleGetFeature(@NonNull IBinder token, int userId, int feature, @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName) { @Nullable ClientMonitorCallbackConverter listener, @NonNull String opPackageName) { mHandler.post(() -> { final List<Face> faces = getEnrolledFaces(userId); if (faces.isEmpty()) { Loading @@ -461,10 +469,22 @@ class Face10 implements IHwBinder.DeathRecipient { scheduleUpdateActiveUserWithoutHandler(userId); final int faceId = faces.get(0).getBiometricId(); final FaceGetFeatureClient client = new FaceGetFeatureClient(mContext, mLazyDaemon, token, new ClientMonitorCallbackConverter(receiver), userId, opPackageName, mSensorId, feature, faceId); mScheduler.scheduleClientMonitor(client); final FaceGetFeatureClient client = new FaceGetFeatureClient(mContext, mLazyDaemon, token, listener, userId, opPackageName, mSensorId, feature, faceId); mScheduler.scheduleClientMonitor(client, new ClientMonitor.Callback() { @Override public void onClientFinished( @NonNull ClientMonitor<?> clientMonitor, boolean success) { if (success && feature == BiometricFaceConstants.FEATURE_REQUIRE_ATTENTION) { final int settingsValue = client.getValue() ? 1 : 0; Slog.d(TAG, "Updating attention value for user: " + userId + " to value: " + settingsValue); Settings.Secure.putIntForUser(mContext.getContentResolver(), Settings.Secure.FACE_UNLOCK_ATTENTION_REQUIRED, settingsValue, userId); } } }); }); } Loading services/core/java/com/android/server/biometrics/sensors/face/FaceGetFeatureClient.java +14 −3 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.server.biometrics.sensors.face; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.face.V1_0.IBiometricsFace; Loading @@ -39,9 +40,10 @@ public class FaceGetFeatureClient extends ClientMonitor<IBiometricsFace> { private final int mFeature; private final int mFaceId; private boolean mValue; FaceGetFeatureClient(@NonNull Context context, @NonNull LazyDaemon<IBiometricsFace> lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull IBinder token, @Nullable ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId, int feature, int faceId) { super(context, lazyDaemon, token, listener, userId, owner, 0 /* cookie */, sensorId, BiometricsProtoEnums.MODALITY_UNKNOWN, BiometricsProtoEnums.ACTION_UNKNOWN, Loading @@ -54,7 +56,9 @@ public class FaceGetFeatureClient extends ClientMonitor<IBiometricsFace> { @Override public void unableToStart() { try { if (getListener() != null) { getListener().onFeatureGet(false /* success */, mFeature, false /* value */); } } catch (RemoteException e) { Slog.e(TAG, "Unable to send error", e); } Loading @@ -70,11 +74,18 @@ public class FaceGetFeatureClient extends ClientMonitor<IBiometricsFace> { protected void startHalOperation() { try { final OptionalBool result = getFreshDaemon().getFeature(mFeature, mFaceId); getListener().onFeatureGet(result.status == Status.OK, mFeature, result.value); mValue = result.value; if (getListener() != null) { getListener().onFeatureGet(result.status == Status.OK, mFeature, mValue); } mCallback.onClientFinished(this, true /* success */); } catch (RemoteException e) { Slog.e(TAG, "Unable to getFeature", e); mCallback.onClientFinished(this, false /* success */); } } boolean getValue() { return mValue; } } services/core/java/com/android/server/biometrics/sensors/face/FaceService.java +3 −2 Original line number Diff line number Diff line Loading @@ -25,9 +25,9 @@ import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.IBiometricSensorReceiver; import android.hardware.biometrics.IBiometricServiceLockoutResetCallback; import android.hardware.face.Face; import android.hardware.face.FaceSensorProperties; import android.hardware.face.IFaceService; import android.hardware.face.IFaceServiceReceiver; import android.hardware.face.FaceSensorProperties; import android.os.Binder; import android.os.IBinder; import android.os.NativeHandle; Loading Loading @@ -303,7 +303,8 @@ public class FaceService extends SystemService { public void getFeature(final IBinder token, int userId, int feature, IFaceServiceReceiver receiver, final String opPackageName) { Utils.checkPermission(getContext(), MANAGE_BIOMETRIC); mFace10.scheduleGetFeature(token, userId, feature, receiver, opPackageName); mFace10.scheduleGetFeature(token, userId, feature, new ClientMonitorCallbackConverter(receiver), opPackageName); } @Override // Binder call Loading Loading
services/core/java/com/android/server/biometrics/sensors/face/Face10.java +25 −5 Original line number Diff line number Diff line Loading @@ -25,12 +25,14 @@ import android.app.UserSwitchObserver; import android.content.Context; import android.content.pm.UserInfo; import android.hardware.biometrics.BiometricConstants; import android.hardware.biometrics.BiometricFaceConstants; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.face.V1_0.IBiometricsFace; import android.hardware.biometrics.face.V1_0.IBiometricsFaceClientCallback; import android.hardware.face.Face; import android.hardware.face.FaceSensorProperties; import android.hardware.face.IFaceServiceReceiver; import android.os.Binder; import android.os.Build; import android.os.Handler; import android.os.IBinder; Loading Loading @@ -109,6 +111,9 @@ class Face10 implements IHwBinder.DeathRecipient { @Override public void onUserSwitching(int newUserId) { scheduleInternalCleanup(newUserId); scheduleGetFeature(new Binder(), newUserId, BiometricFaceConstants.FEATURE_REQUIRE_ATTENTION, null, mContext.getOpPackageName()); } }; Loading Loading @@ -360,6 +365,9 @@ class Face10 implements IHwBinder.DeathRecipient { if (halId != 0) { scheduleLoadAuthenticatorIds(); scheduleInternalCleanup(ActivityManager.getCurrentUser()); scheduleGetFeature(new Binder(), ActivityManager.getCurrentUser(), BiometricFaceConstants.FEATURE_REQUIRE_ATTENTION, null, mContext.getOpPackageName()); } else { Slog.e(TAG, "Unable to set callback"); mDaemon = null; Loading Loading @@ -450,7 +458,7 @@ class Face10 implements IHwBinder.DeathRecipient { } void scheduleGetFeature(@NonNull IBinder token, int userId, int feature, @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName) { @Nullable ClientMonitorCallbackConverter listener, @NonNull String opPackageName) { mHandler.post(() -> { final List<Face> faces = getEnrolledFaces(userId); if (faces.isEmpty()) { Loading @@ -461,10 +469,22 @@ class Face10 implements IHwBinder.DeathRecipient { scheduleUpdateActiveUserWithoutHandler(userId); final int faceId = faces.get(0).getBiometricId(); final FaceGetFeatureClient client = new FaceGetFeatureClient(mContext, mLazyDaemon, token, new ClientMonitorCallbackConverter(receiver), userId, opPackageName, mSensorId, feature, faceId); mScheduler.scheduleClientMonitor(client); final FaceGetFeatureClient client = new FaceGetFeatureClient(mContext, mLazyDaemon, token, listener, userId, opPackageName, mSensorId, feature, faceId); mScheduler.scheduleClientMonitor(client, new ClientMonitor.Callback() { @Override public void onClientFinished( @NonNull ClientMonitor<?> clientMonitor, boolean success) { if (success && feature == BiometricFaceConstants.FEATURE_REQUIRE_ATTENTION) { final int settingsValue = client.getValue() ? 1 : 0; Slog.d(TAG, "Updating attention value for user: " + userId + " to value: " + settingsValue); Settings.Secure.putIntForUser(mContext.getContentResolver(), Settings.Secure.FACE_UNLOCK_ATTENTION_REQUIRED, settingsValue, userId); } } }); }); } Loading
services/core/java/com/android/server/biometrics/sensors/face/FaceGetFeatureClient.java +14 −3 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.server.biometrics.sensors.face; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.face.V1_0.IBiometricsFace; Loading @@ -39,9 +40,10 @@ public class FaceGetFeatureClient extends ClientMonitor<IBiometricsFace> { private final int mFeature; private final int mFaceId; private boolean mValue; FaceGetFeatureClient(@NonNull Context context, @NonNull LazyDaemon<IBiometricsFace> lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull IBinder token, @Nullable ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId, int feature, int faceId) { super(context, lazyDaemon, token, listener, userId, owner, 0 /* cookie */, sensorId, BiometricsProtoEnums.MODALITY_UNKNOWN, BiometricsProtoEnums.ACTION_UNKNOWN, Loading @@ -54,7 +56,9 @@ public class FaceGetFeatureClient extends ClientMonitor<IBiometricsFace> { @Override public void unableToStart() { try { if (getListener() != null) { getListener().onFeatureGet(false /* success */, mFeature, false /* value */); } } catch (RemoteException e) { Slog.e(TAG, "Unable to send error", e); } Loading @@ -70,11 +74,18 @@ public class FaceGetFeatureClient extends ClientMonitor<IBiometricsFace> { protected void startHalOperation() { try { final OptionalBool result = getFreshDaemon().getFeature(mFeature, mFaceId); getListener().onFeatureGet(result.status == Status.OK, mFeature, result.value); mValue = result.value; if (getListener() != null) { getListener().onFeatureGet(result.status == Status.OK, mFeature, mValue); } mCallback.onClientFinished(this, true /* success */); } catch (RemoteException e) { Slog.e(TAG, "Unable to getFeature", e); mCallback.onClientFinished(this, false /* success */); } } boolean getValue() { return mValue; } }
services/core/java/com/android/server/biometrics/sensors/face/FaceService.java +3 −2 Original line number Diff line number Diff line Loading @@ -25,9 +25,9 @@ import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.IBiometricSensorReceiver; import android.hardware.biometrics.IBiometricServiceLockoutResetCallback; import android.hardware.face.Face; import android.hardware.face.FaceSensorProperties; import android.hardware.face.IFaceService; import android.hardware.face.IFaceServiceReceiver; import android.hardware.face.FaceSensorProperties; import android.os.Binder; import android.os.IBinder; import android.os.NativeHandle; Loading Loading @@ -303,7 +303,8 @@ public class FaceService extends SystemService { public void getFeature(final IBinder token, int userId, int feature, IFaceServiceReceiver receiver, final String opPackageName) { Utils.checkPermission(getContext(), MANAGE_BIOMETRIC); mFace10.scheduleGetFeature(token, userId, feature, receiver, opPackageName); mFace10.scheduleGetFeature(token, userId, feature, new ClientMonitorCallbackConverter(receiver), opPackageName); } @Override // Binder call Loading