Move ALS auth logging triggers to wakefullness events.
These were orignally tied to pointer up/down events, but change I4a217ef4a068c8b2cae0f345856912028f9a9525 removed these events entirely on many devices and left these triggers unreliable.
Bug: 243836005
Test: atest FingerprintAuthenticationClientTest BiometricContextProviderTest AuthControllerTest
Test: manual (verify on lockscreen via adb shell dumpsys sensorservice | grep -i Biometric)
Change-Id: I2db34ca561850eb1eddcc65c08c617a46dd3d845
diff --git a/core/java/android/hardware/biometrics/IBiometricContextListener.aidl b/core/java/android/hardware/biometrics/IBiometricContextListener.aidl
index 55cab52..2e8e763 100644
--- a/core/java/android/hardware/biometrics/IBiometricContextListener.aidl
+++ b/core/java/android/hardware/biometrics/IBiometricContextListener.aidl
@@ -23,5 +23,8 @@
* @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 282f251..6b3f134 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 @@
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 @@
@Background DelayableExecutor bgExecutor) {
super(context);
mExecution = execution;
- mWakefulnessLifecycle = wakefulnessLifecycle;
mUserManager = userManager;
mLockPatternUtils = lockPatternUtils;
mHandler = handler;
@@ -625,11 +627,24 @@
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 @@
@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 e0d1f7a..b18b0ab 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.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 @@
@Mock
private InteractionJankMonitor mInteractionJankMonitor;
@Captor
- ArgumentCaptor<IFingerprintAuthenticatorsRegisteredCallback> mFpAuthenticatorsRegisteredCaptor;
+ private ArgumentCaptor<IFingerprintAuthenticatorsRegisteredCallback> mFpAuthenticatorsRegisteredCaptor;
@Captor
- ArgumentCaptor<IFaceAuthenticatorsRegisteredCallback> mFaceAuthenticatorsRegisteredCaptor;
+ private ArgumentCaptor<IFaceAuthenticatorsRegisteredCallback> mFaceAuthenticatorsRegisteredCaptor;
@Captor
- ArgumentCaptor<BiometricStateListener> mBiometricStateCaptor;
+ private ArgumentCaptor<BiometricStateListener> mBiometricStateCaptor;
@Captor
- ArgumentCaptor<StatusBarStateController.StateListener> mStatusBarStateListenerCaptor;
+ private ArgumentCaptor<StatusBarStateController.StateListener> mStatusBarStateListenerCaptor;
+ @Captor
+ private ArgumentCaptor<WakefulnessLifecycle.Observer> mWakefullnessObserverCaptor;
private TestableContext mContextSpy;
private Execution mExecution;
@@ -242,7 +246,9 @@
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 @@
}
@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);
- // 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, 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);
+ 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 c86a8cb..8265203 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 @@
/** 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 9d2fde7..3d1a634 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 @@
/**
* 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 @@
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 @@
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 @@
notifySubscribers();
}
}
+
+ private boolean isAodEnabled() {
+ return mAmbientDisplayConfiguration.alwaysOnEnabled(UserHandle.USER_CURRENT);
+ }
});
service.registerSessionListener(SESSION_TYPES, new ISessionListener.Stub() {
@Override
@@ -161,7 +171,12 @@
@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 f2c5b97..f7d94c9 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 @@
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 @@
try {
mIsPointerDown = true;
mState = STATE_STARTED;
- mALSProbeCallback.getProbe().enable();
final AidlSession session = getFreshDaemon();
if (session.hasContextMethods()) {
@@ -389,7 +394,6 @@
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 7d2cf9d..e0393b5 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 @@
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 @@
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 @@
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 e6acc90..dd7aeb7 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.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 @@
@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).containsExactlyElementsIn(expected).inOrder();
+ 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).containsExactly(true, false, true, false).inOrder();
}
@Test
@@ -124,13 +153,13 @@
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 @@
@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 @@
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 1ed52fc..dea4d4f 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.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 @@
InstrumentationRegistry.getInstrumentation().getTargetContext(), null);
@Rule
public final MockitoRule mockito = MockitoJUnit.rule();
+
@Mock
private ISession mHal;
@Mock
@@ -213,21 +214,41 @@
}
@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 97fe9ea..92e1f27a 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.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
+import java.util.ArrayList;
import java.util.function.Consumer;
@Presubmit
@@ -196,21 +197,22 @@
}
@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);
- verify(mLuxProbe, never()).disable();
-
client.onPointerUp();
- verify(mLuxProbe).disable();
-
client.onPointerDown(TOUCH_X, TOUCH_Y, TOUCH_MAJOR, TOUCH_MINOR);
- verify(mLuxProbe, times(2)).enable();
+ verify(mLuxProbe, never()).disable();
+ verify(mLuxProbe, never()).destroy();
+
+ client.onEnrollResult(new Fingerprint("f", 30 /* fingerId */, 14 /* deviceId */),
+ 0 /* remaining */);
+
+ verify(mLuxProbe).destroy();
}
@Test