diff options
10 files changed, 189 insertions, 69 deletions
diff --git a/core/java/android/hardware/biometrics/IBiometricContextListener.aidl b/core/java/android/hardware/biometrics/IBiometricContextListener.aidl index 55cab52fc4f7..2e8e763b0ee4 100644 --- a/core/java/android/hardware/biometrics/IBiometricContextListener.aidl +++ b/core/java/android/hardware/biometrics/IBiometricContextListener.aidl @@ -23,5 +23,8 @@ package android.hardware.biometrics; * @hide */ oneway interface IBiometricContextListener { - void onDozeChanged(boolean isDozing); + // Called when doze or awake (screen on) status changes. + // These may be called while the device is still transitioning to the new state + // (i.e. about to become awake or enter doze) + void onDozeChanged(boolean isDozing, boolean isAwake); } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java index 282f25104c44..6b3f13452326 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java @@ -19,6 +19,9 @@ package com.android.systemui.biometrics; import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE; import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FINGERPRINT; +import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE; +import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_GOING_TO_SLEEP; + import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; @@ -599,7 +602,6 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba @Background DelayableExecutor bgExecutor) { super(context); mExecution = execution; - mWakefulnessLifecycle = wakefulnessLifecycle; mUserManager = userManager; mLockPatternUtils = lockPatternUtils; mHandler = handler; @@ -625,11 +627,24 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba return Unit.INSTANCE; }); + mWakefulnessLifecycle = wakefulnessLifecycle; + mWakefulnessLifecycle.addObserver(new WakefulnessLifecycle.Observer() { + @Override + public void onFinishedWakingUp() { + notifyDozeChanged(mStatusBarStateController.isDozing(), WAKEFULNESS_AWAKE); + } + + @Override + public void onStartedGoingToSleep() { + notifyDozeChanged(mStatusBarStateController.isDozing(), WAKEFULNESS_GOING_TO_SLEEP); + } + }); + mStatusBarStateController = statusBarStateController; mStatusBarStateController.addCallback(new StatusBarStateController.StateListener() { @Override public void onDozingChanged(boolean isDozing) { - notifyDozeChanged(isDozing); + notifyDozeChanged(isDozing, wakefulnessLifecycle.getWakefulness()); } }); @@ -738,13 +753,16 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba @Override public void setBiometicContextListener(IBiometricContextListener listener) { mBiometricContextListener = listener; - notifyDozeChanged(mStatusBarStateController.isDozing()); + notifyDozeChanged(mStatusBarStateController.isDozing(), + mWakefulnessLifecycle.getWakefulness()); } - private void notifyDozeChanged(boolean isDozing) { + private void notifyDozeChanged(boolean isDozing, + @WakefulnessLifecycle.Wakefulness int wakefullness) { if (mBiometricContextListener != null) { try { - mBiometricContextListener.onDozeChanged(isDozing); + final boolean isAwake = wakefullness == WAKEFULNESS_AWAKE; + mBiometricContextListener.onDozeChanged(isDozing, isAwake); } catch (RemoteException e) { Log.w(TAG, "failed to notify initial doze state"); } 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 e0d1f7a19130..b18b0abcaab1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java @@ -20,6 +20,8 @@ import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FINGERPRIN import static android.hardware.biometrics.BiometricManager.Authenticators; import static android.hardware.biometrics.BiometricManager.BIOMETRIC_MULTI_SENSOR_FINGERPRINT_AND_FACE; +import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE; + import static com.google.common.truth.Truth.assertThat; import static junit.framework.Assert.assertEquals; @@ -157,13 +159,15 @@ public class AuthControllerTest extends SysuiTestCase { @Mock private InteractionJankMonitor mInteractionJankMonitor; @Captor - ArgumentCaptor<IFingerprintAuthenticatorsRegisteredCallback> mFpAuthenticatorsRegisteredCaptor; + private ArgumentCaptor<IFingerprintAuthenticatorsRegisteredCallback> mFpAuthenticatorsRegisteredCaptor; + @Captor + private ArgumentCaptor<IFaceAuthenticatorsRegisteredCallback> mFaceAuthenticatorsRegisteredCaptor; @Captor - ArgumentCaptor<IFaceAuthenticatorsRegisteredCallback> mFaceAuthenticatorsRegisteredCaptor; + private ArgumentCaptor<BiometricStateListener> mBiometricStateCaptor; @Captor - ArgumentCaptor<BiometricStateListener> mBiometricStateCaptor; + private ArgumentCaptor<StatusBarStateController.StateListener> mStatusBarStateListenerCaptor; @Captor - ArgumentCaptor<StatusBarStateController.StateListener> mStatusBarStateListenerCaptor; + private ArgumentCaptor<WakefulnessLifecycle.Observer> mWakefullnessObserverCaptor; private TestableContext mContextSpy; private Execution mExecution; @@ -242,7 +246,9 @@ public class AuthControllerTest extends SysuiTestCase { mFaceAuthenticatorsRegisteredCaptor.capture()); when(mStatusBarStateController.isDozing()).thenReturn(false); + when(mWakefulnessLifecycle.getWakefulness()).thenReturn(WAKEFULNESS_AWAKE); verify(mStatusBarStateController).addCallback(mStatusBarStateListenerCaptor.capture()); + verify(mWakefulnessLifecycle).addObserver(mWakefullnessObserverCaptor.capture()); mFpAuthenticatorsRegisteredCaptor.getValue().onAllAuthenticatorsRegistered(fpProps); mFaceAuthenticatorsRegisteredCaptor.getValue().onAllAuthenticatorsRegistered(faceProps); @@ -759,16 +765,37 @@ public class AuthControllerTest extends SysuiTestCase { } @Test - public void testForwardsDozeEvent() throws RemoteException { + public void testForwardsDozeEvents() throws RemoteException { + when(mStatusBarStateController.isDozing()).thenReturn(true); + when(mWakefulnessLifecycle.getWakefulness()).thenReturn(WAKEFULNESS_AWAKE); mAuthController.setBiometicContextListener(mContextListener); - mStatusBarStateListenerCaptor.getValue().onDozingChanged(false); mStatusBarStateListenerCaptor.getValue().onDozingChanged(true); + mStatusBarStateListenerCaptor.getValue().onDozingChanged(false); + + InOrder order = inOrder(mContextListener); + order.verify(mContextListener, times(2)).onDozeChanged(eq(true), eq(true)); + order.verify(mContextListener).onDozeChanged(eq(false), eq(true)); + order.verifyNoMoreInteractions(); + } + + @Test + public void testForwardsWakeEvents() throws RemoteException { + when(mStatusBarStateController.isDozing()).thenReturn(false); + when(mWakefulnessLifecycle.getWakefulness()).thenReturn(WAKEFULNESS_AWAKE); + mAuthController.setBiometicContextListener(mContextListener); + + mWakefullnessObserverCaptor.getValue().onStartedGoingToSleep(); + mWakefullnessObserverCaptor.getValue().onFinishedGoingToSleep(); + mWakefullnessObserverCaptor.getValue().onStartedWakingUp(); + mWakefullnessObserverCaptor.getValue().onFinishedWakingUp(); + mWakefullnessObserverCaptor.getValue().onPostFinishedWakingUp(); InOrder order = inOrder(mContextListener); - // invoked twice since the initial state is false - order.verify(mContextListener, times(2)).onDozeChanged(eq(false)); - order.verify(mContextListener).onDozeChanged(eq(true)); + order.verify(mContextListener).onDozeChanged(eq(false), eq(true)); + order.verify(mContextListener).onDozeChanged(eq(false), eq(false)); + order.verify(mContextListener).onDozeChanged(eq(false), eq(true)); + order.verifyNoMoreInteractions(); } // Helpers diff --git a/services/core/java/com/android/server/biometrics/log/BiometricContext.java b/services/core/java/com/android/server/biometrics/log/BiometricContext.java index c86a8cb2c39d..8265203ddacd 100644 --- a/services/core/java/com/android/server/biometrics/log/BiometricContext.java +++ b/services/core/java/com/android/server/biometrics/log/BiometricContext.java @@ -46,6 +46,9 @@ public interface BiometricContext { /** If the display is in AOD. */ boolean isAod(); + /** If the device is awake or is becoming awake. */ + boolean isAwake(); + /** * Subscribe to context changes. * diff --git a/services/core/java/com/android/server/biometrics/log/BiometricContextProvider.java b/services/core/java/com/android/server/biometrics/log/BiometricContextProvider.java index 9d2fde72ea2e..3d1a6343cbf2 100644 --- a/services/core/java/com/android/server/biometrics/log/BiometricContextProvider.java +++ b/services/core/java/com/android/server/biometrics/log/BiometricContextProvider.java @@ -43,7 +43,7 @@ import java.util.function.Consumer; /** * A default provider for {@link BiometricContext}. */ -class BiometricContextProvider implements BiometricContext { +final class BiometricContextProvider implements BiometricContext { private static final String TAG = "BiometricContextProvider"; @@ -76,7 +76,8 @@ class BiometricContextProvider implements BiometricContext { private final Map<Integer, InstanceId> mSession = new ConcurrentHashMap<>(); private final AmbientDisplayConfiguration mAmbientDisplayConfiguration; - private boolean mIsDozing = false; + private boolean mIsAod = false; + private boolean mIsAwake = false; @VisibleForTesting BiometricContextProvider(@NonNull AmbientDisplayConfiguration ambientDisplayConfiguration, @@ -85,9 +86,14 @@ class BiometricContextProvider implements BiometricContext { try { service.setBiometicContextListener(new IBiometricContextListener.Stub() { @Override - public void onDozeChanged(boolean isDozing) { - mIsDozing = isDozing; - notifyChanged(); + public void onDozeChanged(boolean isDozing, boolean isAwake) { + isDozing = isDozing && isAodEnabled(); + final boolean changed = (mIsAod != isDozing) || (mIsAwake != isAwake); + if (changed) { + mIsAod = isDozing; + mIsAwake = isAwake; + notifyChanged(); + } } private void notifyChanged() { @@ -97,6 +103,10 @@ class BiometricContextProvider implements BiometricContext { notifySubscribers(); } } + + private boolean isAodEnabled() { + return mAmbientDisplayConfiguration.alwaysOnEnabled(UserHandle.USER_CURRENT); + } }); service.registerSessionListener(SESSION_TYPES, new ISessionListener.Stub() { @Override @@ -161,7 +171,12 @@ class BiometricContextProvider implements BiometricContext { @Override public boolean isAod() { - return mIsDozing && mAmbientDisplayConfiguration.alwaysOnEnabled(UserHandle.USER_CURRENT); + return mIsAod; + } + + @Override + public boolean isAwake() { + return mIsAwake; } @Override diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java index f2c5b970d52c..f7d94c9c2b9f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java @@ -315,21 +315,27 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession> private ICancellationSignal doAuthenticate() throws RemoteException { final AidlSession session = getFreshDaemon(); + final OperationContext opContext = getOperationContext(); + getBiometricContext().subscribe(opContext, ctx -> { + if (session.hasContextMethods()) { + try { + session.getSession().onContextChanged(ctx); + } catch (RemoteException e) { + Slog.e(TAG, "Unable to notify context changed", e); + } + } + + // TODO(b/243836005): this should come via ctx + final boolean isAwake = getBiometricContext().isAwake(); + if (isAwake) { + mALSProbeCallback.getProbe().enable(); + } else { + mALSProbeCallback.getProbe().disable(); + } + }); + if (session.hasContextMethods()) { - final OperationContext opContext = getOperationContext(); - final ICancellationSignal cancel = - session.getSession().authenticateWithContext(mOperationId, opContext); - getBiometricContext() - .subscribe( - opContext, - ctx -> { - try { - session.getSession().onContextChanged(ctx); - } catch (RemoteException e) { - Slog.e(TAG, "Unable to notify context changed", e); - } - }); - return cancel; + return session.getSession().authenticateWithContext(mOperationId, opContext); } else { return session.getSession().authenticate(mOperationId); } @@ -360,7 +366,6 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession> try { mIsPointerDown = true; mState = STATE_STARTED; - mALSProbeCallback.getProbe().enable(); final AidlSession session = getFreshDaemon(); if (session.hasContextMethods()) { @@ -389,7 +394,6 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession> try { mIsPointerDown = false; mState = STATE_STARTED_PAUSED_ATTEMPTED; - mALSProbeCallback.getProbe().disable(); final AidlSession session = getFreshDaemon(); if (session.hasContextMethods()) { diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java index 7d2cf9deb76f..e0393b54d2c5 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java @@ -94,7 +94,7 @@ class FingerprintEnrollClient extends EnrollClient<AidlSession> implements Udfps mSensorOverlays = new SensorOverlays(udfpsOverlayController, sidefpsController); mMaxTemplatesPerUser = maxTemplatesPerUser; - mALSProbeCallback = getLogger().getAmbientLightProbe(false /* startWithClient */); + mALSProbeCallback = getLogger().getAmbientLightProbe(true /* startWithClient */); mEnrollReason = enrollReason; if (enrollReason == FingerprintManager.ENROLL_FIND_SENSOR) { @@ -216,7 +216,6 @@ class FingerprintEnrollClient extends EnrollClient<AidlSession> implements Udfps public void onPointerDown(int x, int y, float minor, float major) { try { mIsPointerDown = true; - mALSProbeCallback.getProbe().enable(); final AidlSession session = getFreshDaemon(); if (session.hasContextMethods()) { @@ -240,7 +239,6 @@ class FingerprintEnrollClient extends EnrollClient<AidlSession> implements Udfps public void onPointerUp() { try { mIsPointerDown = false; - mALSProbeCallback.getProbe().disable(); final AidlSession session = getFreshDaemon(); if (session.hasContextMethods()) { diff --git a/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricContextProviderTest.java b/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricContextProviderTest.java index e6acc904d811..dd7aeb72f7d2 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricContextProviderTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricContextProviderTest.java @@ -40,8 +40,6 @@ import com.android.internal.logging.InstanceId; import com.android.internal.statusbar.ISessionListener; import com.android.internal.statusbar.IStatusBarService; -import com.google.common.collect.ImmutableList; - import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -89,33 +87,64 @@ public class BiometricContextProviderTest { @Test public void testIsAod() throws RemoteException { - mListener.onDozeChanged(true); + mListener.onDozeChanged(true /* isDozing */, false /* isAwake */); assertThat(mProvider.isAod()).isTrue(); - mListener.onDozeChanged(false); + mListener.onDozeChanged(false /* isDozing */, false /* isAwake */); assertThat(mProvider.isAod()).isFalse(); when(mAmbientDisplayConfiguration.alwaysOnEnabled(anyInt())).thenReturn(false); - mListener.onDozeChanged(true); + mListener.onDozeChanged(true /* isDozing */, false /* isAwake */); assertThat(mProvider.isAod()).isFalse(); - mListener.onDozeChanged(false); + mListener.onDozeChanged(false /* isDozing */, false /* isAwake */); assertThat(mProvider.isAod()).isFalse(); } @Test + public void testIsAwake() throws RemoteException { + mListener.onDozeChanged(false /* isDozing */, true /* isAwake */); + assertThat(mProvider.isAwake()).isTrue(); + mListener.onDozeChanged(false /* isDozing */, false /* isAwake */); + assertThat(mProvider.isAwake()).isFalse(); + mListener.onDozeChanged(true /* isDozing */, true /* isAwake */); + assertThat(mProvider.isAwake()).isTrue(); + mListener.onDozeChanged(true /* isDozing */, false /* isAwake */); + assertThat(mProvider.isAwake()).isFalse(); + } + + @Test public void testSubscribesToAod() throws RemoteException { - final List<Boolean> expected = ImmutableList.of(true, false, true, true, false); final List<Boolean> actual = new ArrayList<>(); mProvider.subscribe(mOpContext, ctx -> { assertThat(ctx).isSameInstanceAs(mOpContext); + assertThat(mProvider.isAod()).isEqualTo(ctx.isAod); + assertThat(mProvider.isAwake()).isFalse(); actual.add(ctx.isAod); }); - for (boolean v : expected) { - mListener.onDozeChanged(v); + for (boolean v : List.of(true, false, true, true, false, false)) { + mListener.onDozeChanged(v /* isDozing */, false /* isAwake */); + } + + assertThat(actual).containsExactly(true, false, true, false).inOrder(); + } + + @Test + public void testSubscribesToAwake() throws RemoteException { + final List<Boolean> actual = new ArrayList<>(); + + mProvider.subscribe(mOpContext, ctx -> { + assertThat(ctx).isSameInstanceAs(mOpContext); + assertThat(ctx.isAod).isFalse(); + assertThat(mProvider.isAod()).isFalse(); + actual.add(mProvider.isAwake()); + }); + + for (boolean v : List.of(true, false, true, true, false, false)) { + mListener.onDozeChanged(false /* isDozing */, v /* isAwake */); } - assertThat(actual).containsExactlyElementsIn(expected).inOrder(); + assertThat(actual).containsExactly(true, false, true, false).inOrder(); } @Test @@ -124,13 +153,13 @@ public class BiometricContextProviderTest { mProvider.subscribe(mOpContext, emptyConsumer); mProvider.unsubscribe(mOpContext); - mListener.onDozeChanged(true); + mListener.onDozeChanged(true /* isDozing */, false /* isAwake */); final Consumer<OperationContext> nonEmptyConsumer = mock(Consumer.class); mProvider.subscribe(mOpContext, nonEmptyConsumer); - mListener.onDozeChanged(false); + mListener.onDozeChanged(false /* isDozing */, false /* isAwake */); mProvider.unsubscribe(mOpContext); - mListener.onDozeChanged(true); + mListener.onDozeChanged(true /* isDozing */, false /* isAwake */); verify(emptyConsumer, never()).accept(any()); verify(nonEmptyConsumer).accept(same(mOpContext)); @@ -171,7 +200,7 @@ public class BiometricContextProviderTest { @Test public void testUpdate() throws RemoteException { - mListener.onDozeChanged(false); + mListener.onDozeChanged(false /* isDozing */, false /* isAwake */); OperationContext context = mProvider.updateContext(mOpContext, false /* crypto */); // default state when nothing has been set @@ -186,7 +215,7 @@ public class BiometricContextProviderTest { final int id = 40 + type; final boolean aod = (type & 1) == 0; - mListener.onDozeChanged(aod); + mListener.onDozeChanged(aod /* isDozing */, false /* isAwake */); mSessionListener.onSessionStarted(type, InstanceId.fakeInstanceId(id)); context = mProvider.updateContext(mOpContext, false /* crypto */); assertThat(context).isSameInstanceAs(mOpContext); diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java index 1ed52fc6a40a..dea4d4fb7c64 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java @@ -26,8 +26,8 @@ import static org.mockito.Mockito.anyLong; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; import static org.mockito.Mockito.same; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -96,6 +96,7 @@ public class FingerprintAuthenticationClientTest { InstrumentationRegistry.getInstrumentation().getTargetContext(), null); @Rule public final MockitoRule mockito = MockitoJUnit.rule(); + @Mock private ISession mHal; @Mock @@ -213,21 +214,41 @@ public class FingerprintAuthenticationClientTest { } @Test - public void luxProbeWhenFingerDown() throws RemoteException { + public void luxProbeWhenAwake() throws RemoteException { + when(mBiometricContext.isAwake()).thenReturn(false, true, false); + when(mBiometricContext.isAod()).thenReturn(false); final FingerprintAuthenticationClient client = createClient(); client.start(mCallback); - client.onPointerDown(TOUCH_X, TOUCH_Y, TOUCH_MAJOR, TOUCH_MINOR); - verify(mLuxProbe).enable(); + verify(mHal).authenticateWithContext(eq(OP_ID), mOperationContextCaptor.capture()); + OperationContext opContext = mOperationContextCaptor.getValue(); + verify(mBiometricContext).subscribe(eq(opContext), mContextInjector.capture()); - client.onAcquired(2, 0); + mContextInjector.getValue().accept(opContext); + verify(mLuxProbe, never()).enable(); + + reset(mLuxProbe); + mContextInjector.getValue().accept(opContext); + verify(mLuxProbe).enable(); verify(mLuxProbe, never()).disable(); - client.onPointerUp(); + mContextInjector.getValue().accept(opContext); verify(mLuxProbe).disable(); + } - client.onPointerDown(TOUCH_X, TOUCH_Y, TOUCH_MAJOR, TOUCH_MINOR); - verify(mLuxProbe, times(2)).enable(); + @Test + public void luxProbeDisabledOnAod() throws RemoteException { + when(mBiometricContext.isAwake()).thenReturn(false); + when(mBiometricContext.isAod()).thenReturn(true); + final FingerprintAuthenticationClient client = createClient(); + client.start(mCallback); + + verify(mHal).authenticateWithContext(eq(OP_ID), mOperationContextCaptor.capture()); + OperationContext opContext = mOperationContextCaptor.getValue(); + verify(mBiometricContext).subscribe(eq(opContext), mContextInjector.capture()); + + mContextInjector.getValue().accept(opContext); + verify(mLuxProbe, never()).enable(); } @Test diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java index 97fe9ea41e3d..92e1f27ab624 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java @@ -64,6 +64,7 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import java.util.ArrayList; import java.util.function.Consumer; @Presubmit @@ -196,21 +197,22 @@ public class FingerprintEnrollClientTest { } @Test - public void luxProbeWhenFingerDown() throws RemoteException { + public void luxProbeWhenStarted() throws RemoteException { final FingerprintEnrollClient client = createClient(); client.start(mCallback); - client.onPointerDown(TOUCH_X, TOUCH_Y, TOUCH_MAJOR, TOUCH_MINOR); verify(mLuxProbe).enable(); client.onAcquired(2, 0); + client.onPointerUp(); + client.onPointerDown(TOUCH_X, TOUCH_Y, TOUCH_MAJOR, TOUCH_MINOR); verify(mLuxProbe, never()).disable(); + verify(mLuxProbe, never()).destroy(); - client.onPointerUp(); - verify(mLuxProbe).disable(); + client.onEnrollResult(new Fingerprint("f", 30 /* fingerId */, 14 /* deviceId */), + 0 /* remaining */); - client.onPointerDown(TOUCH_X, TOUCH_Y, TOUCH_MAJOR, TOUCH_MINOR); - verify(mLuxProbe, times(2)).enable(); + verify(mLuxProbe).destroy(); } @Test |