Loading packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +2 −2 Original line number Diff line number Diff line Loading @@ -2182,8 +2182,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private void updateFaceEnrolled(int userId) { mIsFaceEnrolled = whitelistIpcs( () -> mFaceManager != null && mFaceManager.isHardwareDetected() && mFaceManager.hasEnrolledTemplates(userId) && mBiometricEnabledForUser.get(userId)); && mBiometricEnabledForUser.get(userId)) && mAuthController.isFaceAuthEnrolled(userId); } public boolean isFaceSupported() { Loading packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java +12 −1 Original line number Diff line number Diff line Loading @@ -151,6 +151,7 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba @Nullable private List<FingerprintSensorPropertiesInternal> mSidefpsProps; @NonNull private final SparseBooleanArray mUdfpsEnrolledForUser; @NonNull private final SparseBooleanArray mFaceEnrolledForUser; @NonNull private final SensorPrivacyManager mSensorPrivacyManager; private final WakefulnessLifecycle mWakefulnessLifecycle; private boolean mAllFingerprintAuthenticatorsRegistered; Loading Loading @@ -345,6 +346,15 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba } } } if (mFaceProps == null) { Log.d(TAG, "handleEnrollmentsChanged, mFaceProps is null"); } else { for (FaceSensorPropertiesInternal prop : mFaceProps) { if (prop.sensorId == sensorId) { mFaceEnrolledForUser.put(userId, hasEnrollments); } } } for (Callback cb : mCallbacks) { cb.onEnrollmentsChanged(modality); } Loading Loading @@ -709,6 +719,7 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba mWindowManager = windowManager; mInteractionJankMonitor = jankMonitor; mUdfpsEnrolledForUser = new SparseBooleanArray(); mFaceEnrolledForUser = new SparseBooleanArray(); mVibratorHelper = vibrator; mOrientationListener = new BiometricDisplayListener( Loading Loading @@ -1057,7 +1068,7 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba return false; } return mFaceManager.hasEnrolledTemplates(userId); return mFaceEnrolledForUser.get(userId); } /** Loading services/core/java/com/android/server/biometrics/sensors/face/FaceService.java +5 −4 Original line number Diff line number Diff line Loading @@ -588,8 +588,9 @@ public class FaceService extends SystemService { } try { final SensorProps[] props = face.getSensorProps(); final FaceProvider provider = new FaceProvider(getContext(), props, instance, mLockoutResetDispatcher, BiometricContext.getInstance(getContext())); final FaceProvider provider = new FaceProvider(getContext(), mBiometricStateCallback, props, instance, mLockoutResetDispatcher, BiometricContext.getInstance(getContext())); providers.add(provider); } catch (RemoteException e) { Slog.e(TAG, "Remote exception in getSensorProps: " + fqName); Loading @@ -600,14 +601,14 @@ public class FaceService extends SystemService { } @android.annotation.EnforcePermission(android.Manifest.permission.USE_BIOMETRIC_INTERNAL) @Override // Binder call public void registerAuthenticators( @NonNull List<FaceSensorPropertiesInternal> hidlSensors) { mRegistry.registerAll(() -> { final List<ServiceProvider> providers = new ArrayList<>(); for (FaceSensorPropertiesInternal hidlSensor : hidlSensors) { providers.add( Face10.newInstance(getContext(), hidlSensor, mLockoutResetDispatcher)); Face10.newInstance(getContext(), mBiometricStateCallback, hidlSensor, mLockoutResetDispatcher)); } providers.addAll(getAidlProviders()); return providers; Loading services/core/java/com/android/server/biometrics/sensors/face/aidl/BiometricTestSessionImpl.java +1 −3 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.server.biometrics.sensors.face.aidl; import static android.Manifest.permission.TEST_BIOMETRIC; import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.ITestSession; Loading @@ -33,8 +31,8 @@ import android.os.RemoteException; import android.util.Slog; import com.android.server.biometrics.HardwareAuthTokenUtils; import com.android.server.biometrics.Utils; import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.BiometricStateCallback; import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.face.FaceUtils; Loading services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java +23 −5 Original line number Diff line number Diff line Loading @@ -52,8 +52,10 @@ import com.android.server.biometrics.log.BiometricContext; import com.android.server.biometrics.log.BiometricLogger; import com.android.server.biometrics.sensors.AuthenticationClient; import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.BiometricStateCallback; import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.InvalidationRequesterClient; import com.android.server.biometrics.sensors.LockoutResetDispatcher; import com.android.server.biometrics.sensors.PerformanceTracker; Loading @@ -80,6 +82,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { private boolean mTestHalEnabled; @NonNull private final Context mContext; @NonNull private final BiometricStateCallback mBiometricStateCallback; @NonNull private final String mHalInstanceName; @NonNull @VisibleForTesting final SparseArray<Sensor> mSensors; // Map of sensors that this HAL supports Loading Loading @@ -121,11 +124,14 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { } } public FaceProvider(@NonNull Context context, @NonNull SensorProps[] props, public FaceProvider(@NonNull Context context, @NonNull BiometricStateCallback biometricStateCallback, @NonNull SensorProps[] props, @NonNull String halInstanceName, @NonNull LockoutResetDispatcher lockoutResetDispatcher, @NonNull BiometricContext biometricContext) { mContext = context; mBiometricStateCallback = biometricStateCallback; mHalInstanceName = halInstanceName; mSensors = new SparseArray<>(); mHandler = new Handler(Looper.getMainLooper()); Loading Loading @@ -363,9 +369,20 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { BiometricsProtoEnums.CLIENT_UNKNOWN), mBiometricContext, maxTemplatesPerUser, debugConsent); scheduleForSensor(sensorId, client, new ClientMonitorCallback() { @Override public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { mBiometricStateCallback.onClientStarted(clientMonitor); } @Override public void onBiometricAction(int action) { mBiometricStateCallback.onBiometricAction(action); } @Override public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) { mBiometricStateCallback.onClientFinished(clientMonitor, success); if (success) { scheduleLoadAuthenticatorIdsForUser(sensorId, userId); scheduleInvalidationRequest(sensorId, userId); Loading Loading @@ -395,7 +412,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { token, id, callback, userId, opPackageName, sensorId, createLogger(BiometricsProtoEnums.ACTION_AUTHENTICATE, statsClient), mBiometricContext, isStrongBiometric); scheduleForSensor(sensorId, client); scheduleForSensor(sensorId, client, mBiometricStateCallback); }); return id; Loading @@ -422,7 +439,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { mBiometricContext, isStrongBiometric, mUsageStats, mSensors.get(sensorId).getLockoutCache(), allowBackgroundAuthentication, isKeyguardBypassEnabled); scheduleForSensor(sensorId, client); scheduleForSensor(sensorId, client, mBiometricStateCallback); }); } Loading Loading @@ -477,7 +494,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { BiometricsProtoEnums.CLIENT_UNKNOWN), mBiometricContext, mSensors.get(sensorId).getAuthenticatorIds()); scheduleForSensor(sensorId, client); scheduleForSensor(sensorId, client, mBiometricStateCallback); }); } Loading Loading @@ -565,7 +582,8 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { if (favorHalEnrollments) { client.setFavorHalEnrollments(); } scheduleForSensor(sensorId, client, callback); scheduleForSensor(sensorId, client, new ClientMonitorCompositeCallback(callback, mBiometricStateCallback)); }); } Loading Loading
packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +2 −2 Original line number Diff line number Diff line Loading @@ -2182,8 +2182,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private void updateFaceEnrolled(int userId) { mIsFaceEnrolled = whitelistIpcs( () -> mFaceManager != null && mFaceManager.isHardwareDetected() && mFaceManager.hasEnrolledTemplates(userId) && mBiometricEnabledForUser.get(userId)); && mBiometricEnabledForUser.get(userId)) && mAuthController.isFaceAuthEnrolled(userId); } public boolean isFaceSupported() { Loading
packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java +12 −1 Original line number Diff line number Diff line Loading @@ -151,6 +151,7 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba @Nullable private List<FingerprintSensorPropertiesInternal> mSidefpsProps; @NonNull private final SparseBooleanArray mUdfpsEnrolledForUser; @NonNull private final SparseBooleanArray mFaceEnrolledForUser; @NonNull private final SensorPrivacyManager mSensorPrivacyManager; private final WakefulnessLifecycle mWakefulnessLifecycle; private boolean mAllFingerprintAuthenticatorsRegistered; Loading Loading @@ -345,6 +346,15 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba } } } if (mFaceProps == null) { Log.d(TAG, "handleEnrollmentsChanged, mFaceProps is null"); } else { for (FaceSensorPropertiesInternal prop : mFaceProps) { if (prop.sensorId == sensorId) { mFaceEnrolledForUser.put(userId, hasEnrollments); } } } for (Callback cb : mCallbacks) { cb.onEnrollmentsChanged(modality); } Loading Loading @@ -709,6 +719,7 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba mWindowManager = windowManager; mInteractionJankMonitor = jankMonitor; mUdfpsEnrolledForUser = new SparseBooleanArray(); mFaceEnrolledForUser = new SparseBooleanArray(); mVibratorHelper = vibrator; mOrientationListener = new BiometricDisplayListener( Loading Loading @@ -1057,7 +1068,7 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba return false; } return mFaceManager.hasEnrolledTemplates(userId); return mFaceEnrolledForUser.get(userId); } /** Loading
services/core/java/com/android/server/biometrics/sensors/face/FaceService.java +5 −4 Original line number Diff line number Diff line Loading @@ -588,8 +588,9 @@ public class FaceService extends SystemService { } try { final SensorProps[] props = face.getSensorProps(); final FaceProvider provider = new FaceProvider(getContext(), props, instance, mLockoutResetDispatcher, BiometricContext.getInstance(getContext())); final FaceProvider provider = new FaceProvider(getContext(), mBiometricStateCallback, props, instance, mLockoutResetDispatcher, BiometricContext.getInstance(getContext())); providers.add(provider); } catch (RemoteException e) { Slog.e(TAG, "Remote exception in getSensorProps: " + fqName); Loading @@ -600,14 +601,14 @@ public class FaceService extends SystemService { } @android.annotation.EnforcePermission(android.Manifest.permission.USE_BIOMETRIC_INTERNAL) @Override // Binder call public void registerAuthenticators( @NonNull List<FaceSensorPropertiesInternal> hidlSensors) { mRegistry.registerAll(() -> { final List<ServiceProvider> providers = new ArrayList<>(); for (FaceSensorPropertiesInternal hidlSensor : hidlSensors) { providers.add( Face10.newInstance(getContext(), hidlSensor, mLockoutResetDispatcher)); Face10.newInstance(getContext(), mBiometricStateCallback, hidlSensor, mLockoutResetDispatcher)); } providers.addAll(getAidlProviders()); return providers; Loading
services/core/java/com/android/server/biometrics/sensors/face/aidl/BiometricTestSessionImpl.java +1 −3 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.server.biometrics.sensors.face.aidl; import static android.Manifest.permission.TEST_BIOMETRIC; import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.ITestSession; Loading @@ -33,8 +31,8 @@ import android.os.RemoteException; import android.util.Slog; import com.android.server.biometrics.HardwareAuthTokenUtils; import com.android.server.biometrics.Utils; import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.BiometricStateCallback; import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.face.FaceUtils; Loading
services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java +23 −5 Original line number Diff line number Diff line Loading @@ -52,8 +52,10 @@ import com.android.server.biometrics.log.BiometricContext; import com.android.server.biometrics.log.BiometricLogger; import com.android.server.biometrics.sensors.AuthenticationClient; import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.BiometricStateCallback; import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.InvalidationRequesterClient; import com.android.server.biometrics.sensors.LockoutResetDispatcher; import com.android.server.biometrics.sensors.PerformanceTracker; Loading @@ -80,6 +82,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { private boolean mTestHalEnabled; @NonNull private final Context mContext; @NonNull private final BiometricStateCallback mBiometricStateCallback; @NonNull private final String mHalInstanceName; @NonNull @VisibleForTesting final SparseArray<Sensor> mSensors; // Map of sensors that this HAL supports Loading Loading @@ -121,11 +124,14 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { } } public FaceProvider(@NonNull Context context, @NonNull SensorProps[] props, public FaceProvider(@NonNull Context context, @NonNull BiometricStateCallback biometricStateCallback, @NonNull SensorProps[] props, @NonNull String halInstanceName, @NonNull LockoutResetDispatcher lockoutResetDispatcher, @NonNull BiometricContext biometricContext) { mContext = context; mBiometricStateCallback = biometricStateCallback; mHalInstanceName = halInstanceName; mSensors = new SparseArray<>(); mHandler = new Handler(Looper.getMainLooper()); Loading Loading @@ -363,9 +369,20 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { BiometricsProtoEnums.CLIENT_UNKNOWN), mBiometricContext, maxTemplatesPerUser, debugConsent); scheduleForSensor(sensorId, client, new ClientMonitorCallback() { @Override public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { mBiometricStateCallback.onClientStarted(clientMonitor); } @Override public void onBiometricAction(int action) { mBiometricStateCallback.onBiometricAction(action); } @Override public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) { mBiometricStateCallback.onClientFinished(clientMonitor, success); if (success) { scheduleLoadAuthenticatorIdsForUser(sensorId, userId); scheduleInvalidationRequest(sensorId, userId); Loading Loading @@ -395,7 +412,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { token, id, callback, userId, opPackageName, sensorId, createLogger(BiometricsProtoEnums.ACTION_AUTHENTICATE, statsClient), mBiometricContext, isStrongBiometric); scheduleForSensor(sensorId, client); scheduleForSensor(sensorId, client, mBiometricStateCallback); }); return id; Loading @@ -422,7 +439,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { mBiometricContext, isStrongBiometric, mUsageStats, mSensors.get(sensorId).getLockoutCache(), allowBackgroundAuthentication, isKeyguardBypassEnabled); scheduleForSensor(sensorId, client); scheduleForSensor(sensorId, client, mBiometricStateCallback); }); } Loading Loading @@ -477,7 +494,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { BiometricsProtoEnums.CLIENT_UNKNOWN), mBiometricContext, mSensors.get(sensorId).getAuthenticatorIds()); scheduleForSensor(sensorId, client); scheduleForSensor(sensorId, client, mBiometricStateCallback); }); } Loading Loading @@ -565,7 +582,8 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { if (favorHalEnrollments) { client.setFavorHalEnrollments(); } scheduleForSensor(sensorId, client, callback); scheduleForSensor(sensorId, client, new ClientMonitorCompositeCallback(callback, mBiometricStateCallback)); }); } Loading