Loading packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +1 −0 Original line number Diff line number Diff line Loading @@ -785,6 +785,7 @@ public class UdfpsController implements DozeReceiver { mLockscreenShadeTransitionController, mConfigurationController, mSystemClock, mKeyguardStateController, this ); case IUdfpsOverlayController.REASON_AUTH_BP: Loading packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java +45 −2 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.systemui.statusbar.phone.KeyguardBouncer; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.time.SystemClock; Loading @@ -53,6 +54,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud @NonNull private final LockscreenShadeTransitionController mLockScreenShadeTransitionController; @NonNull private final ConfigurationController mConfigurationController; @NonNull private final SystemClock mSystemClock; @NonNull private final KeyguardStateController mKeyguardStateController; @NonNull private final UdfpsController mUdfpsController; private boolean mShowingUdfpsBouncer; Loading @@ -63,6 +65,8 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud private float mTransitionToFullShadeProgress; private float mLastDozeAmount; private long mLastUdfpsBouncerShowTime = -1; private float mStatusBarExpansion; private boolean mLaunchTransitionFadingAway; /** * hidden amount of pin/pattern/password bouncer Loading @@ -84,6 +88,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud @NonNull LockscreenShadeTransitionController transitionController, @NonNull ConfigurationController configurationController, @NonNull SystemClock systemClock, @NonNull KeyguardStateController keyguardStateController, @NonNull UdfpsController udfpsController) { super(view, statusBarStateController, statusBarOptional, dumpManager); mKeyguardViewManager = statusBarKeyguardViewManager; Loading @@ -93,6 +98,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud mLockScreenShadeTransitionController = transitionController; mConfigurationController = configurationController; mSystemClock = systemClock; mKeyguardStateController = keyguardStateController; mUdfpsController = udfpsController; } Loading @@ -111,11 +117,16 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud mUdfpsRequested = false; mLaunchTransitionFadingAway = mKeyguardStateController.isLaunchTransitionFadingAway(); mKeyguardStateController.addCallback(mKeyguardStateControllerCallback); mStatusBarState = mStatusBarStateController.getState(); mQsExpanded = mKeyguardViewManager.isQsExpanded(); mInputBouncerHiddenAmount = KeyguardBouncer.EXPANSION_HIDDEN; mIsBouncerVisible = mKeyguardViewManager.bouncerIsOrWillBeShowing(); mConfigurationController.addCallback(mConfigurationListener); mStatusBarOptional.ifPresent( statusBar -> statusBar.addExpansionChangedListener( mStatusBarExpansionChangedListener)); updateAlpha(); updatePauseAuth(); Loading @@ -128,10 +139,14 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud super.onViewDetached(); mFaceDetectRunning = false; mKeyguardStateController.removeCallback(mKeyguardStateControllerCallback); mStatusBarStateController.removeCallback(mStateListener); mKeyguardViewManager.removeAlternateAuthInterceptor(mAlternateAuthInterceptor); mKeyguardUpdateMonitor.requestFaceAuthOnOccludingApp(false); mConfigurationController.removeCallback(mConfigurationListener); mStatusBarOptional.ifPresent( statusBar -> statusBar.removeExpansionChangedListener( mStatusBarExpansionChangedListener)); if (mLockScreenShadeTransitionController.getUdfpsKeyguardViewController() == this) { mLockScreenShadeTransitionController.setUdfpsKeyguardViewController(null); } Loading @@ -146,9 +161,11 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud pw.println("mQsExpanded=" + mQsExpanded); pw.println("mIsBouncerVisible=" + mIsBouncerVisible); pw.println("mInputBouncerHiddenAmount=" + mInputBouncerHiddenAmount); pw.println("mStatusBarExpansion=" + mStatusBarExpansion); pw.println("mAlpha=" + mView.getAlpha()); pw.println("mUdfpsRequested=" + mUdfpsRequested); pw.println("mView.mUdfpsRequested=" + mView.mUdfpsRequested); pw.println("mLaunchTransitionFadingAway=" + mLaunchTransitionFadingAway); } /** Loading Loading @@ -198,6 +215,10 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud return false; } if (mLaunchTransitionFadingAway) { return true; } if (mStatusBarState != KEYGUARD) { return true; } Loading Loading @@ -255,10 +276,13 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud } private void updateAlpha() { // fade icon on transition to showing bouncer // fade icon on transitions to showing the status bar, but if mUdfpsRequested, then // the keyguard is occluded by some application - so instead use the input bouncer // hidden amount to determine the fade float expansion = mUdfpsRequested ? mInputBouncerHiddenAmount : mStatusBarExpansion; int alpha = mShowingUdfpsBouncer ? 255 : (int) MathUtils.constrain( MathUtils.map(.5f, .9f, 0f, 255f, mInputBouncerHiddenAmount), MathUtils.map(.5f, .9f, 0f, 255f, expansion), 0f, 255f); alpha *= (1.0f - mTransitionToFullShadeProgress); mView.setUnpausedAlpha(alpha); Loading Loading @@ -374,4 +398,23 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud mView.updateColor(); } }; private final StatusBar.ExpansionChangedListener mStatusBarExpansionChangedListener = new StatusBar.ExpansionChangedListener() { @Override public void onExpansionChanged(float expansion, boolean expanded) { mStatusBarExpansion = expansion; updateAlpha(); } }; private final KeyguardStateController.Callback mKeyguardStateControllerCallback = new KeyguardStateController.Callback() { @Override public void onLaunchTransitionFadingAwayChanged() { mLaunchTransitionFadingAway = mKeyguardStateController.isLaunchTransitionFadingAway(); updatePauseAuth(); } }; } packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateController.java +6 −0 Original line number Diff line number Diff line Loading @@ -251,5 +251,11 @@ public interface KeyguardStateController extends CallbackController<Callback> { * {@link KeyguardStateController#isFaceAuthEnabled()}. */ default void onFaceAuthEnabledChanged() {} /** * Triggered when the notification panel is starting or has finished * fading away on transition to an app. */ default void onLaunchTransitionFadingAwayChanged() {} } } packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java +1 −0 Original line number Diff line number Diff line Loading @@ -343,6 +343,7 @@ public class KeyguardStateControllerImpl implements KeyguardStateController, Dum @Override public void setLaunchTransitionFadingAway(boolean fadingAway) { mLaunchTransitionFadingAway = fadingAway; new ArrayList<>(mCallbacks).forEach(Callback::onLaunchTransitionFadingAwayChanged); } @Override Loading packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java +67 −19 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading @@ -33,7 +35,6 @@ import android.testing.TestableLooper.RunWithLooper; import androidx.test.filters.SmallTest; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; import com.android.systemui.keyguard.KeyguardViewMediator; Loading @@ -43,6 +44,7 @@ import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.time.FakeSystemClock; Loading @@ -55,6 +57,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.Optional; import java.util.List; @SmallTest @RunWith(AndroidTestingRunner.class) Loading @@ -80,6 +83,8 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; @Mock private KeyguardStateController mKeyguardStateController; @Mock private KeyguardViewMediator mKeyguardViewMediator; @Mock private ConfigurationController mConfigurationController; Loading @@ -94,14 +99,15 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { private StatusBarStateController.StateListener mStatusBarStateListener; @Captor private ArgumentCaptor<StatusBar.ExpansionChangedListener> mExpansionListenerCaptor; private StatusBar.ExpansionChangedListener mExpansionListener; private List<StatusBar.ExpansionChangedListener> mExpansionListeners; @Captor private ArgumentCaptor<StatusBarKeyguardViewManager.AlternateAuthInterceptor> mAltAuthInterceptorCaptor; private StatusBarKeyguardViewManager.AlternateAuthInterceptor mAltAuthInterceptor; @Captor private ArgumentCaptor<KeyguardUpdateMonitorCallback> mUpdateMonitorCallbackCaptor; private KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback; @Captor private ArgumentCaptor<KeyguardStateController.Callback> mKeyguardStateControllerCallbackCaptor; private KeyguardStateController.Callback mKeyguardStateControllerCallback; @Before public void setUp() { Loading @@ -121,13 +127,14 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { mLockscreenShadeTransitionController, mConfigurationController, mSystemClock, mKeyguardStateController, mUdfpsController); } @Test public void testRegistersExpansionChangedListenerOnAttached() { mController.onViewAttached(); captureExpansionListener(); captureExpansionListeners(); } @Test Loading Loading @@ -156,11 +163,15 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testListenersUnregisteredOnDetached() { mController.onViewAttached(); captureStatusBarStateListeners(); captureExpansionListener(); captureExpansionListeners(); captureKeyguardStateControllerCallback(); mController.onViewDetached(); verify(mStatusBarStateController).removeCallback(mStatusBarStateListener); verify(mStatusBar).removeExpansionChangedListener(mExpansionListener); for (StatusBar.ExpansionChangedListener listener : mExpansionListeners) { verify(mStatusBar).removeExpansionChangedListener(listener); } verify(mKeyguardStateController).removeCallback(mKeyguardStateControllerCallback); } @Test Loading @@ -179,7 +190,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testShouldPauseAuthBouncerShowing() { mController.onViewAttached(); captureStatusBarStateListeners(); captureExpansionListener(); sendStatusBarStateChanged(StatusBarState.KEYGUARD); Loading @@ -190,18 +200,32 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testShouldNotPauseAuthOnKeyguard() { mController.onViewAttached(); captureStatusBarStateListeners(); captureExpansionListener(); sendStatusBarStateChanged(StatusBarState.KEYGUARD); assertFalse(mController.shouldPauseAuth()); } @Test public void testShouldPauseAuthIsLaunchTransitionFadingAway() { // GIVEN view is attached and we're on the keyguard (see testShouldNotPauseAuthOnKeyguard) mController.onViewAttached(); captureStatusBarStateListeners(); sendStatusBarStateChanged(StatusBarState.KEYGUARD); // WHEN isLaunchTransitionFadingAway=true captureKeyguardStateControllerCallback(); when(mKeyguardStateController.isLaunchTransitionFadingAway()).thenReturn(true); mKeyguardStateControllerCallback.onLaunchTransitionFadingAwayChanged(); // THEN pause auth assertTrue(mController.shouldPauseAuth()); } @Test public void testShouldPauseAuthOnShadeLocked() { mController.onViewAttached(); captureStatusBarStateListeners(); captureExpansionListener(); sendStatusBarStateChanged(StatusBarState.SHADE_LOCKED); Loading @@ -212,7 +236,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testShouldPauseAuthOnShade() { mController.onViewAttached(); captureStatusBarStateListeners(); captureExpansionListener(); // WHEN not on keyguard yet (shade = home) sendStatusBarStateChanged(StatusBarState.SHADE); Loading @@ -225,7 +248,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testShouldPauseAuthAnimatingScreenOffFromShade() { mController.onViewAttached(); captureStatusBarStateListeners(); captureExpansionListener(); // WHEN transitioning from home/shade => keyguard + animating screen off mStatusBarStateListener.onStatePreChange(StatusBarState.SHADE, StatusBarState.KEYGUARD); Loading @@ -239,7 +261,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testDoNotPauseAuthAnimatingScreenOffFromLS() { mController.onViewAttached(); captureStatusBarStateListeners(); captureExpansionListener(); // WHEN animating screen off transition from LS => AOD sendStatusBarStateChanged(StatusBarState.KEYGUARD); Loading Loading @@ -333,6 +354,21 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { verify(mStatusBarKeyguardViewManager).resetAlternateAuth(anyBoolean()); } @Test public void testFadeInWithStatusBarExpansion() { // GIVEN view is attached mController.onViewAttached(); captureExpansionListeners(); captureKeyguardStateControllerCallback(); reset(mView); // WHEN status bar expansion is 0 updateStatusBarExpansion(0, true); // THEN alpha is 0 verify(mView).setUnpausedAlpha(0); } private void sendStatusBarStateChanged(int statusBarState) { mStatusBarStateListener.onStateChanged(statusBarState); } Loading @@ -342,9 +378,18 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { mStatusBarStateListener = mStateListenerCaptor.getValue(); } private void captureExpansionListener() { verify(mStatusBar).addExpansionChangedListener(mExpansionListenerCaptor.capture()); mExpansionListener = mExpansionListenerCaptor.getValue(); private void captureExpansionListeners() { verify(mStatusBar, times(2)) .addExpansionChangedListener(mExpansionListenerCaptor.capture()); // first (index=0) is from super class, UdfpsAnimationViewController. // second (index=1) is from UdfpsKeyguardViewController mExpansionListeners = mExpansionListenerCaptor.getAllValues(); } private void updateStatusBarExpansion(float expansion, boolean expanded) { for (StatusBar.ExpansionChangedListener listener : mExpansionListeners) { listener.onExpansionChanged(expansion, expanded); } } private void captureAltAuthInterceptor() { Loading @@ -353,8 +398,11 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { mAltAuthInterceptor = mAltAuthInterceptorCaptor.getValue(); } private void captureKeyguardUpdateMonitorCallback() { verify(mKeyguardUpdateMonitor).registerCallback(mUpdateMonitorCallbackCaptor.capture()); mKeyguardUpdateMonitorCallback = mUpdateMonitorCallbackCaptor.getValue(); private void captureKeyguardStateControllerCallback() { verify(mKeyguardStateController).addCallback( mKeyguardStateControllerCallbackCaptor.capture()); mKeyguardStateControllerCallback = mKeyguardStateControllerCallbackCaptor.getValue(); } } Loading
packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +1 −0 Original line number Diff line number Diff line Loading @@ -785,6 +785,7 @@ public class UdfpsController implements DozeReceiver { mLockscreenShadeTransitionController, mConfigurationController, mSystemClock, mKeyguardStateController, this ); case IUdfpsOverlayController.REASON_AUTH_BP: Loading
packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java +45 −2 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.systemui.statusbar.phone.KeyguardBouncer; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.time.SystemClock; Loading @@ -53,6 +54,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud @NonNull private final LockscreenShadeTransitionController mLockScreenShadeTransitionController; @NonNull private final ConfigurationController mConfigurationController; @NonNull private final SystemClock mSystemClock; @NonNull private final KeyguardStateController mKeyguardStateController; @NonNull private final UdfpsController mUdfpsController; private boolean mShowingUdfpsBouncer; Loading @@ -63,6 +65,8 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud private float mTransitionToFullShadeProgress; private float mLastDozeAmount; private long mLastUdfpsBouncerShowTime = -1; private float mStatusBarExpansion; private boolean mLaunchTransitionFadingAway; /** * hidden amount of pin/pattern/password bouncer Loading @@ -84,6 +88,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud @NonNull LockscreenShadeTransitionController transitionController, @NonNull ConfigurationController configurationController, @NonNull SystemClock systemClock, @NonNull KeyguardStateController keyguardStateController, @NonNull UdfpsController udfpsController) { super(view, statusBarStateController, statusBarOptional, dumpManager); mKeyguardViewManager = statusBarKeyguardViewManager; Loading @@ -93,6 +98,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud mLockScreenShadeTransitionController = transitionController; mConfigurationController = configurationController; mSystemClock = systemClock; mKeyguardStateController = keyguardStateController; mUdfpsController = udfpsController; } Loading @@ -111,11 +117,16 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud mUdfpsRequested = false; mLaunchTransitionFadingAway = mKeyguardStateController.isLaunchTransitionFadingAway(); mKeyguardStateController.addCallback(mKeyguardStateControllerCallback); mStatusBarState = mStatusBarStateController.getState(); mQsExpanded = mKeyguardViewManager.isQsExpanded(); mInputBouncerHiddenAmount = KeyguardBouncer.EXPANSION_HIDDEN; mIsBouncerVisible = mKeyguardViewManager.bouncerIsOrWillBeShowing(); mConfigurationController.addCallback(mConfigurationListener); mStatusBarOptional.ifPresent( statusBar -> statusBar.addExpansionChangedListener( mStatusBarExpansionChangedListener)); updateAlpha(); updatePauseAuth(); Loading @@ -128,10 +139,14 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud super.onViewDetached(); mFaceDetectRunning = false; mKeyguardStateController.removeCallback(mKeyguardStateControllerCallback); mStatusBarStateController.removeCallback(mStateListener); mKeyguardViewManager.removeAlternateAuthInterceptor(mAlternateAuthInterceptor); mKeyguardUpdateMonitor.requestFaceAuthOnOccludingApp(false); mConfigurationController.removeCallback(mConfigurationListener); mStatusBarOptional.ifPresent( statusBar -> statusBar.removeExpansionChangedListener( mStatusBarExpansionChangedListener)); if (mLockScreenShadeTransitionController.getUdfpsKeyguardViewController() == this) { mLockScreenShadeTransitionController.setUdfpsKeyguardViewController(null); } Loading @@ -146,9 +161,11 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud pw.println("mQsExpanded=" + mQsExpanded); pw.println("mIsBouncerVisible=" + mIsBouncerVisible); pw.println("mInputBouncerHiddenAmount=" + mInputBouncerHiddenAmount); pw.println("mStatusBarExpansion=" + mStatusBarExpansion); pw.println("mAlpha=" + mView.getAlpha()); pw.println("mUdfpsRequested=" + mUdfpsRequested); pw.println("mView.mUdfpsRequested=" + mView.mUdfpsRequested); pw.println("mLaunchTransitionFadingAway=" + mLaunchTransitionFadingAway); } /** Loading Loading @@ -198,6 +215,10 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud return false; } if (mLaunchTransitionFadingAway) { return true; } if (mStatusBarState != KEYGUARD) { return true; } Loading Loading @@ -255,10 +276,13 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud } private void updateAlpha() { // fade icon on transition to showing bouncer // fade icon on transitions to showing the status bar, but if mUdfpsRequested, then // the keyguard is occluded by some application - so instead use the input bouncer // hidden amount to determine the fade float expansion = mUdfpsRequested ? mInputBouncerHiddenAmount : mStatusBarExpansion; int alpha = mShowingUdfpsBouncer ? 255 : (int) MathUtils.constrain( MathUtils.map(.5f, .9f, 0f, 255f, mInputBouncerHiddenAmount), MathUtils.map(.5f, .9f, 0f, 255f, expansion), 0f, 255f); alpha *= (1.0f - mTransitionToFullShadeProgress); mView.setUnpausedAlpha(alpha); Loading Loading @@ -374,4 +398,23 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud mView.updateColor(); } }; private final StatusBar.ExpansionChangedListener mStatusBarExpansionChangedListener = new StatusBar.ExpansionChangedListener() { @Override public void onExpansionChanged(float expansion, boolean expanded) { mStatusBarExpansion = expansion; updateAlpha(); } }; private final KeyguardStateController.Callback mKeyguardStateControllerCallback = new KeyguardStateController.Callback() { @Override public void onLaunchTransitionFadingAwayChanged() { mLaunchTransitionFadingAway = mKeyguardStateController.isLaunchTransitionFadingAway(); updatePauseAuth(); } }; }
packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateController.java +6 −0 Original line number Diff line number Diff line Loading @@ -251,5 +251,11 @@ public interface KeyguardStateController extends CallbackController<Callback> { * {@link KeyguardStateController#isFaceAuthEnabled()}. */ default void onFaceAuthEnabledChanged() {} /** * Triggered when the notification panel is starting or has finished * fading away on transition to an app. */ default void onLaunchTransitionFadingAwayChanged() {} } }
packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java +1 −0 Original line number Diff line number Diff line Loading @@ -343,6 +343,7 @@ public class KeyguardStateControllerImpl implements KeyguardStateController, Dum @Override public void setLaunchTransitionFadingAway(boolean fadingAway) { mLaunchTransitionFadingAway = fadingAway; new ArrayList<>(mCallbacks).forEach(Callback::onLaunchTransitionFadingAwayChanged); } @Override Loading
packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java +67 −19 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading @@ -33,7 +35,6 @@ import android.testing.TestableLooper.RunWithLooper; import androidx.test.filters.SmallTest; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; import com.android.systemui.keyguard.KeyguardViewMediator; Loading @@ -43,6 +44,7 @@ import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.time.FakeSystemClock; Loading @@ -55,6 +57,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.Optional; import java.util.List; @SmallTest @RunWith(AndroidTestingRunner.class) Loading @@ -80,6 +83,8 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; @Mock private KeyguardStateController mKeyguardStateController; @Mock private KeyguardViewMediator mKeyguardViewMediator; @Mock private ConfigurationController mConfigurationController; Loading @@ -94,14 +99,15 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { private StatusBarStateController.StateListener mStatusBarStateListener; @Captor private ArgumentCaptor<StatusBar.ExpansionChangedListener> mExpansionListenerCaptor; private StatusBar.ExpansionChangedListener mExpansionListener; private List<StatusBar.ExpansionChangedListener> mExpansionListeners; @Captor private ArgumentCaptor<StatusBarKeyguardViewManager.AlternateAuthInterceptor> mAltAuthInterceptorCaptor; private StatusBarKeyguardViewManager.AlternateAuthInterceptor mAltAuthInterceptor; @Captor private ArgumentCaptor<KeyguardUpdateMonitorCallback> mUpdateMonitorCallbackCaptor; private KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback; @Captor private ArgumentCaptor<KeyguardStateController.Callback> mKeyguardStateControllerCallbackCaptor; private KeyguardStateController.Callback mKeyguardStateControllerCallback; @Before public void setUp() { Loading @@ -121,13 +127,14 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { mLockscreenShadeTransitionController, mConfigurationController, mSystemClock, mKeyguardStateController, mUdfpsController); } @Test public void testRegistersExpansionChangedListenerOnAttached() { mController.onViewAttached(); captureExpansionListener(); captureExpansionListeners(); } @Test Loading Loading @@ -156,11 +163,15 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testListenersUnregisteredOnDetached() { mController.onViewAttached(); captureStatusBarStateListeners(); captureExpansionListener(); captureExpansionListeners(); captureKeyguardStateControllerCallback(); mController.onViewDetached(); verify(mStatusBarStateController).removeCallback(mStatusBarStateListener); verify(mStatusBar).removeExpansionChangedListener(mExpansionListener); for (StatusBar.ExpansionChangedListener listener : mExpansionListeners) { verify(mStatusBar).removeExpansionChangedListener(listener); } verify(mKeyguardStateController).removeCallback(mKeyguardStateControllerCallback); } @Test Loading @@ -179,7 +190,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testShouldPauseAuthBouncerShowing() { mController.onViewAttached(); captureStatusBarStateListeners(); captureExpansionListener(); sendStatusBarStateChanged(StatusBarState.KEYGUARD); Loading @@ -190,18 +200,32 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testShouldNotPauseAuthOnKeyguard() { mController.onViewAttached(); captureStatusBarStateListeners(); captureExpansionListener(); sendStatusBarStateChanged(StatusBarState.KEYGUARD); assertFalse(mController.shouldPauseAuth()); } @Test public void testShouldPauseAuthIsLaunchTransitionFadingAway() { // GIVEN view is attached and we're on the keyguard (see testShouldNotPauseAuthOnKeyguard) mController.onViewAttached(); captureStatusBarStateListeners(); sendStatusBarStateChanged(StatusBarState.KEYGUARD); // WHEN isLaunchTransitionFadingAway=true captureKeyguardStateControllerCallback(); when(mKeyguardStateController.isLaunchTransitionFadingAway()).thenReturn(true); mKeyguardStateControllerCallback.onLaunchTransitionFadingAwayChanged(); // THEN pause auth assertTrue(mController.shouldPauseAuth()); } @Test public void testShouldPauseAuthOnShadeLocked() { mController.onViewAttached(); captureStatusBarStateListeners(); captureExpansionListener(); sendStatusBarStateChanged(StatusBarState.SHADE_LOCKED); Loading @@ -212,7 +236,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testShouldPauseAuthOnShade() { mController.onViewAttached(); captureStatusBarStateListeners(); captureExpansionListener(); // WHEN not on keyguard yet (shade = home) sendStatusBarStateChanged(StatusBarState.SHADE); Loading @@ -225,7 +248,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testShouldPauseAuthAnimatingScreenOffFromShade() { mController.onViewAttached(); captureStatusBarStateListeners(); captureExpansionListener(); // WHEN transitioning from home/shade => keyguard + animating screen off mStatusBarStateListener.onStatePreChange(StatusBarState.SHADE, StatusBarState.KEYGUARD); Loading @@ -239,7 +261,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testDoNotPauseAuthAnimatingScreenOffFromLS() { mController.onViewAttached(); captureStatusBarStateListeners(); captureExpansionListener(); // WHEN animating screen off transition from LS => AOD sendStatusBarStateChanged(StatusBarState.KEYGUARD); Loading Loading @@ -333,6 +354,21 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { verify(mStatusBarKeyguardViewManager).resetAlternateAuth(anyBoolean()); } @Test public void testFadeInWithStatusBarExpansion() { // GIVEN view is attached mController.onViewAttached(); captureExpansionListeners(); captureKeyguardStateControllerCallback(); reset(mView); // WHEN status bar expansion is 0 updateStatusBarExpansion(0, true); // THEN alpha is 0 verify(mView).setUnpausedAlpha(0); } private void sendStatusBarStateChanged(int statusBarState) { mStatusBarStateListener.onStateChanged(statusBarState); } Loading @@ -342,9 +378,18 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { mStatusBarStateListener = mStateListenerCaptor.getValue(); } private void captureExpansionListener() { verify(mStatusBar).addExpansionChangedListener(mExpansionListenerCaptor.capture()); mExpansionListener = mExpansionListenerCaptor.getValue(); private void captureExpansionListeners() { verify(mStatusBar, times(2)) .addExpansionChangedListener(mExpansionListenerCaptor.capture()); // first (index=0) is from super class, UdfpsAnimationViewController. // second (index=1) is from UdfpsKeyguardViewController mExpansionListeners = mExpansionListenerCaptor.getAllValues(); } private void updateStatusBarExpansion(float expansion, boolean expanded) { for (StatusBar.ExpansionChangedListener listener : mExpansionListeners) { listener.onExpansionChanged(expansion, expanded); } } private void captureAltAuthInterceptor() { Loading @@ -353,8 +398,11 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { mAltAuthInterceptor = mAltAuthInterceptorCaptor.getValue(); } private void captureKeyguardUpdateMonitorCallback() { verify(mKeyguardUpdateMonitor).registerCallback(mUpdateMonitorCallbackCaptor.capture()); mKeyguardUpdateMonitorCallback = mUpdateMonitorCallbackCaptor.getValue(); private void captureKeyguardStateControllerCallback() { verify(mKeyguardStateController).addCallback( mKeyguardStateControllerCallbackCaptor.capture()); mKeyguardStateControllerCallback = mKeyguardStateControllerCallbackCaptor.getValue(); } }