Loading packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +32 −22 Original line number Original line Diff line number Diff line Loading @@ -1431,6 +1431,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @Override @Override public void onAuthenticationFailed() { public void onAuthenticationFailed() { handleFaceAuthFailed(); handleFaceAuthFailed(); if (mKeyguardBypassController != null) { mKeyguardBypassController.setUserHasDeviceEntryIntent(false); } } } @Override @Override Loading @@ -1438,6 +1441,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab Trace.beginSection("KeyguardUpdateMonitor#onAuthenticationSucceeded"); Trace.beginSection("KeyguardUpdateMonitor#onAuthenticationSucceeded"); handleFaceAuthenticated(result.getUserId(), result.isStrongBiometric()); handleFaceAuthenticated(result.getUserId(), result.isStrongBiometric()); Trace.endSection(); Trace.endSection(); if (mKeyguardBypassController != null) { mKeyguardBypassController.setUserHasDeviceEntryIntent(false); } } } @Override @Override Loading @@ -1448,6 +1455,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @Override @Override public void onAuthenticationError(int errMsgId, CharSequence errString) { public void onAuthenticationError(int errMsgId, CharSequence errString) { handleFaceError(errMsgId, errString.toString()); handleFaceError(errMsgId, errString.toString()); if (mKeyguardBypassController != null) { mKeyguardBypassController.setUserHasDeviceEntryIntent(false); } } } @Override @Override Loading packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +24 −8 Original line number Original line Diff line number Diff line Loading @@ -68,6 +68,7 @@ import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.LockscreenShadeTransitionController; import com.android.systemui.statusbar.LockscreenShadeTransitionController; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController; Loading Loading @@ -120,6 +121,7 @@ public class UdfpsController implements DozeReceiver { @NonNull private final AccessibilityManager mAccessibilityManager; @NonNull private final AccessibilityManager mAccessibilityManager; @NonNull private final LockscreenShadeTransitionController mLockscreenShadeTransitionController; @NonNull private final LockscreenShadeTransitionController mLockscreenShadeTransitionController; @Nullable private final UdfpsHbmProvider mHbmProvider; @Nullable private final UdfpsHbmProvider mHbmProvider; @NonNull private final KeyguardBypassController mKeyguardBypassController; @VisibleForTesting @NonNull final BiometricOrientationEventListener mOrientationListener; @VisibleForTesting @NonNull final BiometricOrientationEventListener mOrientationListener; // Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple // Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple // sensors, this, in addition to a lot of the code here, will be updated. // sensors, this, in addition to a lot of the code here, will be updated. Loading Loading @@ -397,7 +399,10 @@ public class UdfpsController implements DozeReceiver { handled = true; handled = true; } } if ((withinSensorArea || fromUdfpsView) && shouldTryToDismissKeyguard()) { if ((withinSensorArea || fromUdfpsView) && shouldTryToDismissKeyguard()) { Log.v(TAG, "onTouch | dismiss keyguard from ACTION_DOWN"); Log.v(TAG, "onTouch | dismiss keyguard ACTION_DOWN"); if (!mOnFingerDown) { playStartHaptic(); } mKeyguardViewManager.notifyKeyguardAuthenticated(false /* strongAuth */); mKeyguardViewManager.notifyKeyguardAuthenticated(false /* strongAuth */); mAttemptedToDismissKeyguard = true; mAttemptedToDismissKeyguard = true; } } Loading @@ -414,6 +419,16 @@ public class UdfpsController implements DozeReceiver { boolean actionMoveWithinSensorArea = boolean actionMoveWithinSensorArea = isWithinSensorArea(udfpsView, event.getX(idx), event.getY(idx), isWithinSensorArea(udfpsView, event.getX(idx), event.getY(idx), fromUdfpsView); fromUdfpsView); if ((fromUdfpsView || actionMoveWithinSensorArea) && shouldTryToDismissKeyguard()) { Log.v(TAG, "onTouch | dismiss keyguard ACTION_MOVE"); if (!mOnFingerDown) { playStartHaptic(); } mKeyguardViewManager.notifyKeyguardAuthenticated(false /* strongAuth */); mAttemptedToDismissKeyguard = true; break; } if (actionMoveWithinSensorArea) { if (actionMoveWithinSensorArea) { if (mVelocityTracker == null) { if (mVelocityTracker == null) { // touches could be injected, so the velocity tracker may not have // touches could be injected, so the velocity tracker may not have Loading Loading @@ -449,12 +464,6 @@ public class UdfpsController implements DozeReceiver { Log.v(TAG, "onTouch | finger outside"); Log.v(TAG, "onTouch | finger outside"); onFingerUp(); onFingerUp(); } } if ((fromUdfpsView || actionMoveWithinSensorArea) && shouldTryToDismissKeyguard()) { Log.v(TAG, "onTouch | dismiss keyguard from ACTION_MOVE"); mKeyguardViewManager.notifyKeyguardAuthenticated(false /* strongAuth */); mAttemptedToDismissKeyguard = true; } } } Trace.endSection(); Trace.endSection(); break; break; Loading Loading @@ -509,7 +518,8 @@ public class UdfpsController implements DozeReceiver { @Nullable Vibrator vibrator, @Nullable Vibrator vibrator, @NonNull UdfpsHapticsSimulator udfpsHapticsSimulator, @NonNull UdfpsHapticsSimulator udfpsHapticsSimulator, @NonNull Optional<UdfpsHbmProvider> hbmProvider, @NonNull Optional<UdfpsHbmProvider> hbmProvider, @NonNull KeyguardStateController keyguardStateController) { @NonNull KeyguardStateController keyguardStateController, @NonNull KeyguardBypassController keyguardBypassController) { mContext = context; mContext = context; mExecution = execution; mExecution = execution; // TODO (b/185124905): inject main handler and vibrator once done prototyping // TODO (b/185124905): inject main handler and vibrator once done prototyping Loading Loading @@ -539,6 +549,7 @@ public class UdfpsController implements DozeReceiver { onOrientationChanged(); onOrientationChanged(); return Unit.INSTANCE; return Unit.INSTANCE; }); }); mKeyguardBypassController = keyguardBypassController; mSensorProps = findFirstUdfps(); mSensorProps = findFirstUdfps(); // At least one UDFPS sensor exists // At least one UDFPS sensor exists Loading Loading @@ -863,12 +874,17 @@ public class UdfpsController implements DozeReceiver { private void onFingerDown(int x, int y, float minor, float major) { private void onFingerDown(int x, int y, float minor, float major) { mExecution.assertIsMainThread(); mExecution.assertIsMainThread(); mKeyguardBypassController.setUserHasDeviceEntryIntent(true); if (mView == null) { if (mView == null) { Log.w(TAG, "Null view in onFingerDown"); Log.w(TAG, "Null view in onFingerDown"); return; return; } } if (!mOnFingerDown) { if (!mOnFingerDown) { playStartHaptic(); playStartHaptic(); if (!mKeyguardUpdateMonitor.isFaceDetectionRunning()) { mKeyguardUpdateMonitor.requestFaceAuth(/* userInitiatedRequest */ false); } } } mOnFingerDown = true; mOnFingerDown = true; mFingerprintManager.onPointerDown(mSensorProps.sensorId, x, y, minor, major); mFingerprintManager.onPointerDown(mSensorProps.sensorId, x, y, minor, major); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -564,8 +564,8 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp boolean unlockingAllowed = boolean unlockingAllowed = mUpdateMonitor.isUnlockingWithBiometricAllowed(isStrongBiometric); mUpdateMonitor.isUnlockingWithBiometricAllowed(isStrongBiometric); boolean deviceDreaming = mUpdateMonitor.isDreaming(); boolean deviceDreaming = mUpdateMonitor.isDreaming(); boolean bypass = mKeyguardBypassController.getBypassEnabled(); boolean bypass = mKeyguardBypassController.getBypassEnabled() || mKeyguardBypassController.getUserHasDeviceEntryIntent(); if (!mUpdateMonitor.isDeviceInteractive()) { if (!mUpdateMonitor.isDeviceInteractive()) { if (!mKeyguardViewController.isShowing()) { if (!mKeyguardViewController.isShowing()) { return bypass ? MODE_WAKE_AND_UNLOCK : MODE_ONLY_WAKE; return bypass ? MODE_WAKE_AND_UNLOCK : MODE_ONLY_WAKE; Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt +1 −0 Original line number Original line Diff line number Diff line Loading @@ -48,6 +48,7 @@ open class KeyguardBypassController : Dumpable, StackScrollAlgorithm.BypassContr private val faceAuthEnabledChangedCallback = object : KeyguardStateController.Callback { private val faceAuthEnabledChangedCallback = object : KeyguardStateController.Callback { override fun onFaceAuthEnabledChanged() = notifyListeners() override fun onFaceAuthEnabledChanged() = notifyListeners() } } var userHasDeviceEntryIntent: Boolean = false // ie: attempted udfps auth @IntDef( @IntDef( FACE_UNLOCK_BYPASS_NO_OVERRIDE, FACE_UNLOCK_BYPASS_NO_OVERRIDE, Loading packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java +5 −1 Original line number Original line Diff line number Diff line Loading @@ -59,6 +59,7 @@ import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.LockscreenShadeTransitionController; import com.android.systemui.statusbar.LockscreenShadeTransitionController; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController; Loading Loading @@ -136,6 +137,8 @@ public class UdfpsControllerTest extends SysuiTestCase { private UdfpsHapticsSimulator mUdfpsHapticsSimulator; private UdfpsHapticsSimulator mUdfpsHapticsSimulator; @Mock @Mock private KeyguardStateController mKeyguardStateController; private KeyguardStateController mKeyguardStateController; @Mock private KeyguardBypassController mKeyguardBypassController; private FakeExecutor mFgExecutor; private FakeExecutor mFgExecutor; Loading Loading @@ -204,7 +207,8 @@ public class UdfpsControllerTest extends SysuiTestCase { mVibrator, mVibrator, mUdfpsHapticsSimulator, mUdfpsHapticsSimulator, Optional.of(mHbmProvider), Optional.of(mHbmProvider), mKeyguardStateController); mKeyguardStateController, mKeyguardBypassController); verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture()); verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture()); mOverlayController = mOverlayCaptor.getValue(); mOverlayController = mOverlayCaptor.getValue(); verify(mScreenLifecycle).addObserver(mScreenObserverCaptor.capture()); verify(mScreenLifecycle).addObserver(mScreenObserverCaptor.capture()); Loading Loading
packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +32 −22 Original line number Original line Diff line number Diff line Loading @@ -1431,6 +1431,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @Override @Override public void onAuthenticationFailed() { public void onAuthenticationFailed() { handleFaceAuthFailed(); handleFaceAuthFailed(); if (mKeyguardBypassController != null) { mKeyguardBypassController.setUserHasDeviceEntryIntent(false); } } } @Override @Override Loading @@ -1438,6 +1441,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab Trace.beginSection("KeyguardUpdateMonitor#onAuthenticationSucceeded"); Trace.beginSection("KeyguardUpdateMonitor#onAuthenticationSucceeded"); handleFaceAuthenticated(result.getUserId(), result.isStrongBiometric()); handleFaceAuthenticated(result.getUserId(), result.isStrongBiometric()); Trace.endSection(); Trace.endSection(); if (mKeyguardBypassController != null) { mKeyguardBypassController.setUserHasDeviceEntryIntent(false); } } } @Override @Override Loading @@ -1448,6 +1455,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @Override @Override public void onAuthenticationError(int errMsgId, CharSequence errString) { public void onAuthenticationError(int errMsgId, CharSequence errString) { handleFaceError(errMsgId, errString.toString()); handleFaceError(errMsgId, errString.toString()); if (mKeyguardBypassController != null) { mKeyguardBypassController.setUserHasDeviceEntryIntent(false); } } } @Override @Override Loading
packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +24 −8 Original line number Original line Diff line number Diff line Loading @@ -68,6 +68,7 @@ import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.LockscreenShadeTransitionController; import com.android.systemui.statusbar.LockscreenShadeTransitionController; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController; Loading Loading @@ -120,6 +121,7 @@ public class UdfpsController implements DozeReceiver { @NonNull private final AccessibilityManager mAccessibilityManager; @NonNull private final AccessibilityManager mAccessibilityManager; @NonNull private final LockscreenShadeTransitionController mLockscreenShadeTransitionController; @NonNull private final LockscreenShadeTransitionController mLockscreenShadeTransitionController; @Nullable private final UdfpsHbmProvider mHbmProvider; @Nullable private final UdfpsHbmProvider mHbmProvider; @NonNull private final KeyguardBypassController mKeyguardBypassController; @VisibleForTesting @NonNull final BiometricOrientationEventListener mOrientationListener; @VisibleForTesting @NonNull final BiometricOrientationEventListener mOrientationListener; // Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple // Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple // sensors, this, in addition to a lot of the code here, will be updated. // sensors, this, in addition to a lot of the code here, will be updated. Loading Loading @@ -397,7 +399,10 @@ public class UdfpsController implements DozeReceiver { handled = true; handled = true; } } if ((withinSensorArea || fromUdfpsView) && shouldTryToDismissKeyguard()) { if ((withinSensorArea || fromUdfpsView) && shouldTryToDismissKeyguard()) { Log.v(TAG, "onTouch | dismiss keyguard from ACTION_DOWN"); Log.v(TAG, "onTouch | dismiss keyguard ACTION_DOWN"); if (!mOnFingerDown) { playStartHaptic(); } mKeyguardViewManager.notifyKeyguardAuthenticated(false /* strongAuth */); mKeyguardViewManager.notifyKeyguardAuthenticated(false /* strongAuth */); mAttemptedToDismissKeyguard = true; mAttemptedToDismissKeyguard = true; } } Loading @@ -414,6 +419,16 @@ public class UdfpsController implements DozeReceiver { boolean actionMoveWithinSensorArea = boolean actionMoveWithinSensorArea = isWithinSensorArea(udfpsView, event.getX(idx), event.getY(idx), isWithinSensorArea(udfpsView, event.getX(idx), event.getY(idx), fromUdfpsView); fromUdfpsView); if ((fromUdfpsView || actionMoveWithinSensorArea) && shouldTryToDismissKeyguard()) { Log.v(TAG, "onTouch | dismiss keyguard ACTION_MOVE"); if (!mOnFingerDown) { playStartHaptic(); } mKeyguardViewManager.notifyKeyguardAuthenticated(false /* strongAuth */); mAttemptedToDismissKeyguard = true; break; } if (actionMoveWithinSensorArea) { if (actionMoveWithinSensorArea) { if (mVelocityTracker == null) { if (mVelocityTracker == null) { // touches could be injected, so the velocity tracker may not have // touches could be injected, so the velocity tracker may not have Loading Loading @@ -449,12 +464,6 @@ public class UdfpsController implements DozeReceiver { Log.v(TAG, "onTouch | finger outside"); Log.v(TAG, "onTouch | finger outside"); onFingerUp(); onFingerUp(); } } if ((fromUdfpsView || actionMoveWithinSensorArea) && shouldTryToDismissKeyguard()) { Log.v(TAG, "onTouch | dismiss keyguard from ACTION_MOVE"); mKeyguardViewManager.notifyKeyguardAuthenticated(false /* strongAuth */); mAttemptedToDismissKeyguard = true; } } } Trace.endSection(); Trace.endSection(); break; break; Loading Loading @@ -509,7 +518,8 @@ public class UdfpsController implements DozeReceiver { @Nullable Vibrator vibrator, @Nullable Vibrator vibrator, @NonNull UdfpsHapticsSimulator udfpsHapticsSimulator, @NonNull UdfpsHapticsSimulator udfpsHapticsSimulator, @NonNull Optional<UdfpsHbmProvider> hbmProvider, @NonNull Optional<UdfpsHbmProvider> hbmProvider, @NonNull KeyguardStateController keyguardStateController) { @NonNull KeyguardStateController keyguardStateController, @NonNull KeyguardBypassController keyguardBypassController) { mContext = context; mContext = context; mExecution = execution; mExecution = execution; // TODO (b/185124905): inject main handler and vibrator once done prototyping // TODO (b/185124905): inject main handler and vibrator once done prototyping Loading Loading @@ -539,6 +549,7 @@ public class UdfpsController implements DozeReceiver { onOrientationChanged(); onOrientationChanged(); return Unit.INSTANCE; return Unit.INSTANCE; }); }); mKeyguardBypassController = keyguardBypassController; mSensorProps = findFirstUdfps(); mSensorProps = findFirstUdfps(); // At least one UDFPS sensor exists // At least one UDFPS sensor exists Loading Loading @@ -863,12 +874,17 @@ public class UdfpsController implements DozeReceiver { private void onFingerDown(int x, int y, float minor, float major) { private void onFingerDown(int x, int y, float minor, float major) { mExecution.assertIsMainThread(); mExecution.assertIsMainThread(); mKeyguardBypassController.setUserHasDeviceEntryIntent(true); if (mView == null) { if (mView == null) { Log.w(TAG, "Null view in onFingerDown"); Log.w(TAG, "Null view in onFingerDown"); return; return; } } if (!mOnFingerDown) { if (!mOnFingerDown) { playStartHaptic(); playStartHaptic(); if (!mKeyguardUpdateMonitor.isFaceDetectionRunning()) { mKeyguardUpdateMonitor.requestFaceAuth(/* userInitiatedRequest */ false); } } } mOnFingerDown = true; mOnFingerDown = true; mFingerprintManager.onPointerDown(mSensorProps.sensorId, x, y, minor, major); mFingerprintManager.onPointerDown(mSensorProps.sensorId, x, y, minor, major); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -564,8 +564,8 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp boolean unlockingAllowed = boolean unlockingAllowed = mUpdateMonitor.isUnlockingWithBiometricAllowed(isStrongBiometric); mUpdateMonitor.isUnlockingWithBiometricAllowed(isStrongBiometric); boolean deviceDreaming = mUpdateMonitor.isDreaming(); boolean deviceDreaming = mUpdateMonitor.isDreaming(); boolean bypass = mKeyguardBypassController.getBypassEnabled(); boolean bypass = mKeyguardBypassController.getBypassEnabled() || mKeyguardBypassController.getUserHasDeviceEntryIntent(); if (!mUpdateMonitor.isDeviceInteractive()) { if (!mUpdateMonitor.isDeviceInteractive()) { if (!mKeyguardViewController.isShowing()) { if (!mKeyguardViewController.isShowing()) { return bypass ? MODE_WAKE_AND_UNLOCK : MODE_ONLY_WAKE; return bypass ? MODE_WAKE_AND_UNLOCK : MODE_ONLY_WAKE; Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt +1 −0 Original line number Original line Diff line number Diff line Loading @@ -48,6 +48,7 @@ open class KeyguardBypassController : Dumpable, StackScrollAlgorithm.BypassContr private val faceAuthEnabledChangedCallback = object : KeyguardStateController.Callback { private val faceAuthEnabledChangedCallback = object : KeyguardStateController.Callback { override fun onFaceAuthEnabledChanged() = notifyListeners() override fun onFaceAuthEnabledChanged() = notifyListeners() } } var userHasDeviceEntryIntent: Boolean = false // ie: attempted udfps auth @IntDef( @IntDef( FACE_UNLOCK_BYPASS_NO_OVERRIDE, FACE_UNLOCK_BYPASS_NO_OVERRIDE, Loading
packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java +5 −1 Original line number Original line Diff line number Diff line Loading @@ -59,6 +59,7 @@ import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.LockscreenShadeTransitionController; import com.android.systemui.statusbar.LockscreenShadeTransitionController; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController; Loading Loading @@ -136,6 +137,8 @@ public class UdfpsControllerTest extends SysuiTestCase { private UdfpsHapticsSimulator mUdfpsHapticsSimulator; private UdfpsHapticsSimulator mUdfpsHapticsSimulator; @Mock @Mock private KeyguardStateController mKeyguardStateController; private KeyguardStateController mKeyguardStateController; @Mock private KeyguardBypassController mKeyguardBypassController; private FakeExecutor mFgExecutor; private FakeExecutor mFgExecutor; Loading Loading @@ -204,7 +207,8 @@ public class UdfpsControllerTest extends SysuiTestCase { mVibrator, mVibrator, mUdfpsHapticsSimulator, mUdfpsHapticsSimulator, Optional.of(mHbmProvider), Optional.of(mHbmProvider), mKeyguardStateController); mKeyguardStateController, mKeyguardBypassController); verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture()); verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture()); mOverlayController = mOverlayCaptor.getValue(); mOverlayController = mOverlayCaptor.getValue(); verify(mScreenLifecycle).addObserver(mScreenObserverCaptor.capture()); verify(mScreenLifecycle).addObserver(mScreenObserverCaptor.capture()); Loading