diff options
12 files changed, 125 insertions, 65 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 8699e324adf9..52c3b416c03a 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -2227,8 +2227,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() { diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java index 9493975ca00f..cd026c2363af 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java @@ -153,6 +153,7 @@ public class AuthController implements CoreStartable, CommandQueue.Callbacks, @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; @@ -349,6 +350,15 @@ public class AuthController implements CoreStartable, CommandQueue.Callbacks, } } } + 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); } @@ -715,6 +725,7 @@ public class AuthController implements CoreStartable, CommandQueue.Callbacks, mWindowManager = windowManager; mInteractionJankMonitor = jankMonitor; mUdfpsEnrolledForUser = new SparseBooleanArray(); + mFaceEnrolledForUser = new SparseBooleanArray(); mVibratorHelper = vibrator; mOrientationListener = new BiometricDisplayListener( @@ -1067,7 +1078,7 @@ public class AuthController implements CoreStartable, CommandQueue.Callbacks, return false; } - return mFaceManager.hasEnrolledTemplates(userId); + return mFaceEnrolledForUser.get(userId); } /** diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java index 7281bc8c851b..b91a5be0cb5a 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java @@ -236,8 +236,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { when(mActivityService.getCurrentUser()).thenReturn(mCurrentUserInfo); when(mActivityService.getCurrentUserId()).thenReturn(mCurrentUserId); when(mFaceManager.isHardwareDetected()).thenReturn(true); - when(mFaceManager.hasEnrolledTemplates()).thenReturn(true); - when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(true); + when(mAuthController.isFaceAuthEnrolled(anyInt())).thenReturn(true); when(mFaceManager.getSensorPropertiesInternal()).thenReturn(mFaceSensorProperties); when(mSessionTracker.getSessionId(SESSION_KEYGUARD)).thenReturn(mKeyguardInstanceId); @@ -592,7 +591,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { verify(mFaceManager).authenticate(any(), any(), any(), any(), anyInt(), anyBoolean()); verify(mFaceManager).isHardwareDetected(); - verify(mFaceManager).hasEnrolledTemplates(anyInt()); + verify(mFaceManager, never()).hasEnrolledTemplates(anyInt()); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java index 8e45067c8e13..88a806d93243 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java @@ -25,7 +25,9 @@ import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWA import static com.google.common.truth.Truth.assertThat; import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertNull; +import static junit.framework.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; @@ -236,7 +238,7 @@ public class AuthControllerTest extends SysuiTestCase { 2 /* sensorId */, SensorProperties.STRENGTH_STRONG, 1 /* maxEnrollmentsPerUser */, - fpComponentInfo, + faceComponentInfo, FaceSensorProperties.TYPE_RGB, true /* supportsFaceDetection */, true /* supportsSelfIllumination */, @@ -276,8 +278,6 @@ public class AuthControllerTest extends SysuiTestCase { reset(mFingerprintManager); reset(mFaceManager); - when(mVibratorHelper.hasVibrator()).thenReturn(true); - // This test requires an uninitialized AuthController. AuthController authController = new TestableAuthController(mContextSpy, mExecution, mCommandQueue, mActivityTaskManager, mWindowManager, mFingerprintManager, @@ -308,8 +308,6 @@ public class AuthControllerTest extends SysuiTestCase { reset(mFingerprintManager); reset(mFaceManager); - when(mVibratorHelper.hasVibrator()).thenReturn(true); - // This test requires an uninitialized AuthController. AuthController authController = new TestableAuthController(mContextSpy, mExecution, mCommandQueue, mActivityTaskManager, mWindowManager, mFingerprintManager, @@ -343,6 +341,36 @@ public class AuthControllerTest extends SysuiTestCase { } @Test + public void testFaceAuthEnrollmentStatus() throws RemoteException { + final int userId = 0; + + reset(mFaceManager); + mAuthController.start(); + + verify(mFaceManager).addAuthenticatorsRegisteredCallback( + mFaceAuthenticatorsRegisteredCaptor.capture()); + + mFaceAuthenticatorsRegisteredCaptor.getValue().onAllAuthenticatorsRegistered( + mFaceManager.getSensorPropertiesInternal()); + mTestableLooper.processAllMessages(); + + verify(mFaceManager).registerBiometricStateListener( + mBiometricStateCaptor.capture()); + + assertFalse(mAuthController.isFaceAuthEnrolled(userId)); + + // Enrollments changed for an unknown sensor. + for (BiometricStateListener listener : mBiometricStateCaptor.getAllValues()) { + listener.onEnrollmentsChanged(userId, + 2 /* sensorId */, true /* hasEnrollments */); + } + mTestableLooper.processAllMessages(); + + assertTrue(mAuthController.isFaceAuthEnrolled(userId)); + } + + + @Test public void testSendsReasonUserCanceled_whenDismissedByUserCancel() throws Exception { showDialog(new int[]{1} /* sensorIds */, false /* credentialAllowed */); mAuthController.onDismissed(AuthDialogCallback.DISMISSED_USER_CANCELED, 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 2761ec04aa7e..7a5b58413014 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 @@ -600,8 +600,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); @@ -612,14 +613,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; diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/BiometricTestSessionImpl.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/BiometricTestSessionImpl.java index 73c272f7a779..cfbb5dce4c2b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/BiometricTestSessionImpl.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/BiometricTestSessionImpl.java @@ -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; @@ -33,7 +31,6 @@ 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.ClientMonitorCallback; import com.android.server.biometrics.sensors.face.FaceUtils; diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java index c12994c993e6..6488185c727d 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java @@ -52,9 +52,11 @@ 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.BiometricScheduler; 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; @@ -81,6 +83,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 @@ -122,11 +125,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()); @@ -363,16 +369,18 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { createLogger(BiometricsProtoEnums.ACTION_ENROLL, BiometricsProtoEnums.CLIENT_UNKNOWN), mBiometricContext, maxTemplatesPerUser, debugConsent); - scheduleForSensor(sensorId, client, new ClientMonitorCallback() { - @Override - public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, - boolean success) { - if (success) { - scheduleLoadAuthenticatorIdsForUser(sensorId, userId); - scheduleInvalidationRequest(sensorId, userId); - } - } - }); + scheduleForSensor(sensorId, client, new ClientMonitorCompositeCallback( + mBiometricStateCallback, new ClientMonitorCallback() { + @Override + public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, + boolean success) { + ClientMonitorCallback.super.onClientFinished(clientMonitor, success); + if (success) { + scheduleLoadAuthenticatorIdsForUser(sensorId, userId); + scheduleInvalidationRequest(sensorId, userId); + } + } + })); }); return id; } @@ -396,7 +404,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; @@ -424,7 +432,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { mBiometricContext, isStrongBiometric, mUsageStats, mSensors.get(sensorId).getLockoutCache(), allowBackgroundAuthentication, isKeyguardBypassEnabled, biometricStrength); - scheduleForSensor(sensorId, client); + scheduleForSensor(sensorId, client, mBiometricStateCallback); }); } @@ -479,7 +487,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { BiometricsProtoEnums.CLIENT_UNKNOWN), mBiometricContext, mSensors.get(sensorId).getAuthenticatorIds()); - scheduleForSensor(sensorId, client); + scheduleForSensor(sensorId, client, mBiometricStateCallback); }); } @@ -568,7 +576,8 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { if (favorHalEnrollments) { client.setFavorHalEnrollments(); } - scheduleForSensor(sensorId, client, callback); + scheduleForSensor(sensorId, client, new ClientMonitorCompositeCallback(callback, + mBiometricStateCallback)); }); } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/BiometricTestSessionImpl.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/BiometricTestSessionImpl.java index 14af216a9dc5..7a6a274f8dd7 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/BiometricTestSessionImpl.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/BiometricTestSessionImpl.java @@ -16,8 +16,6 @@ package com.android.server.biometrics.sensors.face.hidl; -import static android.Manifest.permission.TEST_BIOMETRIC; - import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.ITestSession; @@ -30,7 +28,6 @@ import android.os.Binder; import android.os.RemoteException; import android.util.Slog; -import com.android.server.biometrics.Utils; import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.face.FaceUtils; @@ -53,6 +50,7 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { @NonNull private final Set<Integer> mEnrollmentIds; @NonNull private final Random mRandom; + private final IFaceServiceReceiver mReceiver = new IFaceServiceReceiver.Stub() { @Override public void onEnrollResult(Face face, int remaining) { @@ -116,7 +114,8 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { }; BiometricTestSessionImpl(@NonNull Context context, int sensorId, - @NonNull ITestSessionCallback callback, @NonNull Face10 face10, + @NonNull ITestSessionCallback callback, + @NonNull Face10 face10, @NonNull Face10.HalResultController halResultController) { mContext = context; mSensorId = sensorId; diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java index c0a119ff5f1e..0e0ee1966024 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java @@ -62,8 +62,10 @@ import com.android.server.biometrics.sensors.AuthenticationConsumer; import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.BiometricNotificationUtils; import com.android.server.biometrics.sensors.BiometricScheduler; +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.EnumerateConsumer; import com.android.server.biometrics.sensors.ErrorConsumer; import com.android.server.biometrics.sensors.LockoutResetDispatcher; @@ -110,6 +112,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { private boolean mTestHalEnabled; @NonNull private final FaceSensorPropertiesInternal mSensorProperties; + @NonNull private final BiometricStateCallback mBiometricStateCallback; @NonNull private final Context mContext; @NonNull private final BiometricScheduler mScheduler; @NonNull private final Handler mHandler; @@ -336,6 +339,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { @VisibleForTesting Face10(@NonNull Context context, + @NonNull BiometricStateCallback biometricStateCallback, @NonNull FaceSensorPropertiesInternal sensorProps, @NonNull LockoutResetDispatcher lockoutResetDispatcher, @NonNull Handler handler, @@ -343,6 +347,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { @NonNull BiometricContext biometricContext) { mSensorProperties = sensorProps; mContext = context; + mBiometricStateCallback = biometricStateCallback; mSensorId = sensorProps.sensorId; mScheduler = scheduler; mHandler = handler; @@ -366,11 +371,12 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { } public static Face10 newInstance(@NonNull Context context, + @NonNull BiometricStateCallback biometricStateCallback, @NonNull FaceSensorPropertiesInternal sensorProps, @NonNull LockoutResetDispatcher lockoutResetDispatcher) { final Handler handler = new Handler(Looper.getMainLooper()); - return new Face10(context, sensorProps, lockoutResetDispatcher, handler, - new BiometricScheduler(TAG, BiometricScheduler.SENSOR_TYPE_FACE, + return new Face10(context, biometricStateCallback, sensorProps, lockoutResetDispatcher, + handler, new BiometricScheduler(TAG, BiometricScheduler.SENSOR_TYPE_FACE, null /* gestureAvailabilityTracker */), BiometricContext.getInstance(context)); } @@ -615,8 +621,19 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { mScheduler.scheduleClientMonitor(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) { // Update authenticatorIds scheduleUpdateActiveUserWithoutHandler(client.getTargetUserId()); @@ -661,7 +678,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { createLogger(BiometricsProtoEnums.ACTION_AUTHENTICATE, statsClient), mBiometricContext, isStrongBiometric, mLockoutTracker, mUsageStats, allowBackgroundAuthentication, isKeyguardBypassEnabled); - mScheduler.scheduleClientMonitor(client); + mScheduler.scheduleClientMonitor(client, mBiometricStateCallback); }); } @@ -696,7 +713,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { createLogger(BiometricsProtoEnums.ACTION_REMOVE, BiometricsProtoEnums.CLIENT_UNKNOWN), mBiometricContext, mAuthenticatorIds); - mScheduler.scheduleClientMonitor(client); + mScheduler.scheduleClientMonitor(client, mBiometricStateCallback); }); } @@ -714,7 +731,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { createLogger(BiometricsProtoEnums.ACTION_REMOVE, BiometricsProtoEnums.CLIENT_UNKNOWN), mBiometricContext, mAuthenticatorIds); - mScheduler.scheduleClientMonitor(client); + mScheduler.scheduleClientMonitor(client, mBiometricStateCallback); }); } @@ -806,14 +823,15 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { BiometricsProtoEnums.CLIENT_UNKNOWN), mBiometricContext, enrolledList, FaceUtils.getLegacyInstance(mSensorId), mAuthenticatorIds); - mScheduler.scheduleClientMonitor(client, callback); + mScheduler.scheduleClientMonitor(client, new ClientMonitorCompositeCallback(callback, + mBiometricStateCallback)); }); } @Override public void scheduleInternalCleanup(int sensorId, int userId, @Nullable ClientMonitorCallback callback) { - scheduleInternalCleanup(userId, callback); + scheduleInternalCleanup(userId, mBiometricStateCallback); } @Override @@ -1011,7 +1029,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { @Override public ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback, @NonNull String opPackageName) { - return new BiometricTestSessionImpl(mContext, mSensorId, callback, this, - mHalResultController); + return new BiometricTestSessionImpl(mContext, mSensorId, callback, + this, mHalResultController); } } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java index 17ba07f2c2bd..628c16afed5c 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java @@ -384,28 +384,18 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi mBiometricContext, mSensors.get(sensorId).getSensorProperties(), mUdfpsOverlayController, mSidefpsController, maxTemplatesPerUser, enrollReason); - scheduleForSensor(sensorId, client, new ClientMonitorCallback() { - - @Override - public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { - mBiometricStateCallback.onClientStarted(clientMonitor); - } - - @Override - public void onBiometricAction(int action) { - mBiometricStateCallback.onBiometricAction(action); - } - + scheduleForSensor(sensorId, client, new ClientMonitorCompositeCallback( + mBiometricStateCallback, new ClientMonitorCallback() { @Override public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) { - mBiometricStateCallback.onClientFinished(clientMonitor, success); + ClientMonitorCallback.super.onClientFinished(clientMonitor, success); if (success) { scheduleLoadAuthenticatorIdsForUser(sensorId, userId); scheduleInvalidationRequest(sensorId, userId); } } - }); + })); }); return id; } diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceProviderTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceProviderTest.java index 12b8264fc20c..41f743367aeb 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceProviderTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceProviderTest.java @@ -39,6 +39,7 @@ import androidx.test.filters.SmallTest; import com.android.server.biometrics.log.BiometricContext; import com.android.server.biometrics.sensors.BiometricScheduler; +import com.android.server.biometrics.sensors.BiometricStateCallback; import com.android.server.biometrics.sensors.HalClientMonitor; import com.android.server.biometrics.sensors.LockoutResetDispatcher; @@ -63,6 +64,8 @@ public class FaceProviderTest { private IFace mDaemon; @Mock private BiometricContext mBiometricContext; + @Mock + private BiometricStateCallback mBiometricStateCallback; private SensorProps[] mSensorProps; private LockoutResetDispatcher mLockoutResetDispatcher; @@ -91,8 +94,8 @@ public class FaceProviderTest { mLockoutResetDispatcher = new LockoutResetDispatcher(mContext); - mFaceProvider = new TestableFaceProvider(mDaemon, mContext, mSensorProps, TAG, - mLockoutResetDispatcher, mBiometricContext); + mFaceProvider = new TestableFaceProvider(mDaemon, mContext, mBiometricStateCallback, + mSensorProps, TAG, mLockoutResetDispatcher, mBiometricContext); } @SuppressWarnings("rawtypes") @@ -140,11 +143,13 @@ public class FaceProviderTest { TestableFaceProvider(@NonNull IFace daemon, @NonNull Context context, + @NonNull BiometricStateCallback biometricStateCallback, @NonNull SensorProps[] props, @NonNull String halInstanceName, @NonNull LockoutResetDispatcher lockoutResetDispatcher, @NonNull BiometricContext biometricContext) { - super(context, props, halInstanceName, lockoutResetDispatcher, biometricContext); + super(context, biometricStateCallback, props, halInstanceName, lockoutResetDispatcher, + biometricContext); mDaemon = daemon; } diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/Face10Test.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/Face10Test.java index 116d2d5a66a0..a2cade7ad797 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/Face10Test.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/Face10Test.java @@ -43,6 +43,7 @@ import androidx.test.filters.SmallTest; import com.android.server.biometrics.log.BiometricContext; import com.android.server.biometrics.sensors.BiometricScheduler; +import com.android.server.biometrics.sensors.BiometricStateCallback; import com.android.server.biometrics.sensors.LockoutResetDispatcher; import org.junit.Before; @@ -73,6 +74,8 @@ public class Face10Test { private BiometricScheduler mScheduler; @Mock private BiometricContext mBiometricContext; + @Mock + private BiometricStateCallback mBiometricStateCallback; private final Handler mHandler = new Handler(Looper.getMainLooper()); private LockoutResetDispatcher mLockoutResetDispatcher; @@ -103,8 +106,8 @@ public class Face10Test { resetLockoutRequiresChallenge); Face10.sSystemClock = Clock.fixed(Instant.ofEpochMilli(100), ZoneId.of("PST")); - mFace10 = new Face10(mContext, sensorProps, mLockoutResetDispatcher, mHandler, mScheduler, - mBiometricContext); + mFace10 = new Face10(mContext, mBiometricStateCallback, sensorProps, + mLockoutResetDispatcher, mHandler, mScheduler, mBiometricContext); mBinder = new Binder(); } |