Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +9 −2 Original line number Diff line number Diff line Loading @@ -562,7 +562,7 @@ public class StatusBar extends SystemUI implements DemoMode, }; private KeyguardUserSwitcher mKeyguardUserSwitcher; private UserSwitcherController mUserSwitcherController; protected UserSwitcherController mUserSwitcherController; private NetworkController mNetworkController; private KeyguardMonitorImpl mKeyguardMonitor = (KeyguardMonitorImpl) Dependency.get(KeyguardMonitor.class); Loading @@ -588,7 +588,7 @@ public class StatusBar extends SystemUI implements DemoMode, } }; private boolean mNoAnimationOnNextBarModeChange; private FalsingManager mFalsingManager; protected FalsingManager mFalsingManager; private final KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() { Loading Loading @@ -3448,6 +3448,13 @@ public class StatusBar extends SystemUI implements DemoMode, return updateIsKeyguard(); } /** * @return True if StatusBar state is FULLSCREEN_USER_SWITCHER. */ public boolean isFullScreenUserSwitcherState() { return mState == StatusBarState.FULLSCREEN_USER_SWITCHER; } private boolean updateIsKeyguard() { boolean wakeAndUnlocking = mFingerprintUnlockController.getMode() == FingerprintUnlockController.MODE_WAKE_AND_UNLOCK; Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +3 −1 Original line number Diff line number Diff line Loading @@ -145,9 +145,11 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb // conserve the original animation. // • The user quickly taps on the display and we show "swipe up to unlock." // • Keyguard will be dismissed by an action. a.k.a: FLAG_DISMISS_KEYGUARD_ACTIVITY // • Full-screen user switcher is displayed. final boolean noLongerTracking = mLastTracking != tracking && !tracking; if (mOccluded || mNotificationPanelView.isUnlockHintRunning() || mBouncer.willDismissWithAction()) { || mBouncer.willDismissWithAction() || mStatusBar.isFullScreenUserSwitcherState()) { mBouncer.setExpansion(0); } else if (mShowing && mStatusBar.isKeyguardCurrentlySecure() && !mDozing) { mBouncer.setExpansion(expansion); Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +56 −11 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import android.app.Notification; import android.app.StatusBarManager; import android.app.trust.TrustManager; import android.content.Context; import android.content.pm.UserInfo; import android.hardware.fingerprint.FingerprintManager; import android.metrics.LogMaker; import android.os.Binder; Loading Loading @@ -71,6 +72,7 @@ import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.assist.AssistManager; import com.android.systemui.keyguard.KeyguardViewMediator; import com.android.systemui.classifier.FalsingManager; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.statusbar.ActivatableNotificationView; Loading @@ -91,6 +93,7 @@ import com.android.systemui.statusbar.NotificationLogger; import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.NotificationPresenter; import com.android.systemui.statusbar.NotificationRemoteInputManager; import com.android.systemui.statusbar.NotificationShelf; import com.android.systemui.statusbar.NotificationViewHierarchyManager; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.notification.ActivityLaunchAnimator; Loading @@ -98,6 +101,7 @@ import com.android.systemui.statusbar.notification.VisualStabilityManager; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.KeyguardMonitor; import com.android.systemui.statusbar.policy.KeyguardMonitorImpl; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.stack.NotificationStackScrollLayout; import org.junit.Before; Loading Loading @@ -134,6 +138,7 @@ public class StatusBarTest extends SysuiTestCase { @Mock private VisualStabilityManager mVisualStabilityManager; @Mock private NotificationListener mNotificationListener; @Mock private KeyguardViewMediator mKeyguardViewMediator; @Mock private NotificationLockscreenUserManager mLockscreenUserManager; private TestableStatusBar mStatusBar; private FakeMetricsLogger mMetricsLogger; Loading @@ -146,9 +151,7 @@ public class StatusBarTest extends SysuiTestCase { MockitoAnnotations.initMocks(this); mDependency.injectMockDependency(AssistManager.class); mDependency.injectMockDependency(DeviceProvisionedController.class); mDependency.injectMockDependency(NotificationGroupManager.class); mDependency.injectMockDependency(NotificationGutsManager.class); mDependency.injectMockDependency(NotificationRemoteInputManager.class); mDependency.injectMockDependency(NotificationMediaManager.class); mDependency.injectMockDependency(ForegroundServiceController.class); mDependency.injectTestDependency(NotificationViewHierarchyManager.class, Loading Loading @@ -202,7 +205,12 @@ public class StatusBarTest extends SysuiTestCase { mPowerManager, mNotificationPanelView, mBarService, mNotificationListener, mNotificationLogger, mVisualStabilityManager, mViewHierarchyManager, mEntryManager, mScrimController, mFingerprintUnlockController, mock(ActivityLaunchAnimator.class), mKeyguardViewMediator); mock(ActivityLaunchAnimator.class), mKeyguardViewMediator, mock(NotificationRemoteInputManager.class), mock(NotificationGroupManager.class), mock(FalsingManager.class), mock(StatusBarWindowManager.class), mock(NotificationIconAreaController.class), mock(DozeScrimController.class), mock(NotificationShelf.class), mLockscreenUserManager, mock(CommandQueue.class)); mStatusBar.mContext = mContext; mStatusBar.mComponents = mContext.getComponents(); mEntryManager.setUpForTest(mStatusBar, mStackScroller, mStatusBar, mHeadsUpManager, Loading Loading @@ -529,11 +537,7 @@ public class StatusBarTest extends SysuiTestCase { @Test @RunWithLooper(setAsMainLooper = true) public void testUpdateKeyguardState_DoesNotCrash() { mStatusBar.mStatusBarWindow = mock(StatusBarWindowView.class); mStatusBar.mState = StatusBarState.KEYGUARD; mStatusBar.mDozeScrimController = mock(DozeScrimController.class); mStatusBar.mNotificationIconAreaController = mock(NotificationIconAreaController.class); mStatusBar.mLockscreenUserManager = mock(NotificationLockscreenUserManager.class); when(mStatusBar.mLockscreenUserManager.getCurrentProfiles()).thenReturn( new SparseArray<>()); mStatusBar.updateKeyguardState(false, false); Loading @@ -541,9 +545,6 @@ public class StatusBarTest extends SysuiTestCase { @Test public void testFingerprintNotification_UpdatesScrims() { mStatusBar.mStatusBarWindowManager = mock(StatusBarWindowManager.class); mStatusBar.mDozeScrimController = mock(DozeScrimController.class); mStatusBar.mNotificationIconAreaController = mock(NotificationIconAreaController.class); mStatusBar.notifyFpAuthModeChanged(); verify(mScrimController).transitionTo(any(), any()); } Loading Loading @@ -629,6 +630,32 @@ public class StatusBarTest extends SysuiTestCase { verify(mStackScroller).changeViewPosition(any(FooterView.class), eq(-1 /* end */)); } @Test public void testSetState_changesIsFullScreenUserSwitcherState() { mStatusBar.setBarStateForTest(StatusBarState.KEYGUARD); assertFalse(mStatusBar.isFullScreenUserSwitcherState()); mStatusBar.setBarStateForTest(StatusBarState.FULLSCREEN_USER_SWITCHER); assertTrue(mStatusBar.isFullScreenUserSwitcherState()); } @Test public void testShowKeyguardImplementation_setsState() { when(mLockscreenUserManager.getCurrentProfiles()).thenReturn(new SparseArray<>()); mStatusBar.setBarStateForTest(StatusBarState.SHADE); // By default, showKeyguardImpl sets state to KEYGUARD. mStatusBar.showKeyguardImpl(); assertTrue(mStatusBar.mState == StatusBarState.KEYGUARD); // If useFullscreenUserSwitcher is true, state is set to FULLSCREEN_USER_SWITCHER. mStatusBar.mUserSwitcherController = mock(UserSwitcherController.class); when(mStatusBar.mUserSwitcherController.useFullscreenUserSwitcher()).thenReturn(true); mStatusBar.showKeyguardImpl(); assertTrue(mStatusBar.mState == StatusBarState.FULLSCREEN_USER_SWITCHER); } static class TestableStatusBar extends StatusBar { public TestableStatusBar(StatusBarKeyguardViewManager man, UnlockMethodCache unlock, KeyguardIndicationController key, Loading @@ -640,7 +667,16 @@ public class StatusBarTest extends SysuiTestCase { NotificationViewHierarchyManager viewHierarchyManager, TestableNotificationEntryManager entryManager, ScrimController scrimController, FingerprintUnlockController fingerprintUnlockController, ActivityLaunchAnimator launchAnimator, KeyguardViewMediator keyguardViewMediator) { ActivityLaunchAnimator launchAnimator, KeyguardViewMediator keyguardViewMediator, NotificationRemoteInputManager notificationRemoteInputManager, NotificationGroupManager notificationGroupManager, FalsingManager falsingManager, StatusBarWindowManager statusBarWindowManager, NotificationIconAreaController notificationIconAreaController, DozeScrimController dozeScrimController, NotificationShelf notificationShelf, NotificationLockscreenUserManager notificationLockscreenUserManager, CommandQueue commandQueue) { mStatusBarKeyguardViewManager = man; mUnlockMethodCache = unlock; mKeyguardIndicationController = key; Loading @@ -660,6 +696,15 @@ public class StatusBarTest extends SysuiTestCase { mActivityLaunchAnimator = launchAnimator; mKeyguardViewMediator = keyguardViewMediator; mClearAllEnabled = true; mRemoteInputManager = notificationRemoteInputManager; mGroupManager = notificationGroupManager; mFalsingManager = falsingManager; mStatusBarWindowManager = statusBarWindowManager; mNotificationIconAreaController = notificationIconAreaController; mDozeScrimController = dozeScrimController; mNotificationShelf = notificationShelf; mLockscreenUserManager = notificationLockscreenUserManager; mCommandQueue = commandQueue; } private WakefulnessLifecycle createAwakeWakefulnessLifecycle() { Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +9 −2 Original line number Diff line number Diff line Loading @@ -562,7 +562,7 @@ public class StatusBar extends SystemUI implements DemoMode, }; private KeyguardUserSwitcher mKeyguardUserSwitcher; private UserSwitcherController mUserSwitcherController; protected UserSwitcherController mUserSwitcherController; private NetworkController mNetworkController; private KeyguardMonitorImpl mKeyguardMonitor = (KeyguardMonitorImpl) Dependency.get(KeyguardMonitor.class); Loading @@ -588,7 +588,7 @@ public class StatusBar extends SystemUI implements DemoMode, } }; private boolean mNoAnimationOnNextBarModeChange; private FalsingManager mFalsingManager; protected FalsingManager mFalsingManager; private final KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() { Loading Loading @@ -3448,6 +3448,13 @@ public class StatusBar extends SystemUI implements DemoMode, return updateIsKeyguard(); } /** * @return True if StatusBar state is FULLSCREEN_USER_SWITCHER. */ public boolean isFullScreenUserSwitcherState() { return mState == StatusBarState.FULLSCREEN_USER_SWITCHER; } private boolean updateIsKeyguard() { boolean wakeAndUnlocking = mFingerprintUnlockController.getMode() == FingerprintUnlockController.MODE_WAKE_AND_UNLOCK; Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +3 −1 Original line number Diff line number Diff line Loading @@ -145,9 +145,11 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb // conserve the original animation. // • The user quickly taps on the display and we show "swipe up to unlock." // • Keyguard will be dismissed by an action. a.k.a: FLAG_DISMISS_KEYGUARD_ACTIVITY // • Full-screen user switcher is displayed. final boolean noLongerTracking = mLastTracking != tracking && !tracking; if (mOccluded || mNotificationPanelView.isUnlockHintRunning() || mBouncer.willDismissWithAction()) { || mBouncer.willDismissWithAction() || mStatusBar.isFullScreenUserSwitcherState()) { mBouncer.setExpansion(0); } else if (mShowing && mStatusBar.isKeyguardCurrentlySecure() && !mDozing) { mBouncer.setExpansion(expansion); Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +56 −11 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import android.app.Notification; import android.app.StatusBarManager; import android.app.trust.TrustManager; import android.content.Context; import android.content.pm.UserInfo; import android.hardware.fingerprint.FingerprintManager; import android.metrics.LogMaker; import android.os.Binder; Loading Loading @@ -71,6 +72,7 @@ import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.assist.AssistManager; import com.android.systemui.keyguard.KeyguardViewMediator; import com.android.systemui.classifier.FalsingManager; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.statusbar.ActivatableNotificationView; Loading @@ -91,6 +93,7 @@ import com.android.systemui.statusbar.NotificationLogger; import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.NotificationPresenter; import com.android.systemui.statusbar.NotificationRemoteInputManager; import com.android.systemui.statusbar.NotificationShelf; import com.android.systemui.statusbar.NotificationViewHierarchyManager; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.notification.ActivityLaunchAnimator; Loading @@ -98,6 +101,7 @@ import com.android.systemui.statusbar.notification.VisualStabilityManager; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.KeyguardMonitor; import com.android.systemui.statusbar.policy.KeyguardMonitorImpl; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.stack.NotificationStackScrollLayout; import org.junit.Before; Loading Loading @@ -134,6 +138,7 @@ public class StatusBarTest extends SysuiTestCase { @Mock private VisualStabilityManager mVisualStabilityManager; @Mock private NotificationListener mNotificationListener; @Mock private KeyguardViewMediator mKeyguardViewMediator; @Mock private NotificationLockscreenUserManager mLockscreenUserManager; private TestableStatusBar mStatusBar; private FakeMetricsLogger mMetricsLogger; Loading @@ -146,9 +151,7 @@ public class StatusBarTest extends SysuiTestCase { MockitoAnnotations.initMocks(this); mDependency.injectMockDependency(AssistManager.class); mDependency.injectMockDependency(DeviceProvisionedController.class); mDependency.injectMockDependency(NotificationGroupManager.class); mDependency.injectMockDependency(NotificationGutsManager.class); mDependency.injectMockDependency(NotificationRemoteInputManager.class); mDependency.injectMockDependency(NotificationMediaManager.class); mDependency.injectMockDependency(ForegroundServiceController.class); mDependency.injectTestDependency(NotificationViewHierarchyManager.class, Loading Loading @@ -202,7 +205,12 @@ public class StatusBarTest extends SysuiTestCase { mPowerManager, mNotificationPanelView, mBarService, mNotificationListener, mNotificationLogger, mVisualStabilityManager, mViewHierarchyManager, mEntryManager, mScrimController, mFingerprintUnlockController, mock(ActivityLaunchAnimator.class), mKeyguardViewMediator); mock(ActivityLaunchAnimator.class), mKeyguardViewMediator, mock(NotificationRemoteInputManager.class), mock(NotificationGroupManager.class), mock(FalsingManager.class), mock(StatusBarWindowManager.class), mock(NotificationIconAreaController.class), mock(DozeScrimController.class), mock(NotificationShelf.class), mLockscreenUserManager, mock(CommandQueue.class)); mStatusBar.mContext = mContext; mStatusBar.mComponents = mContext.getComponents(); mEntryManager.setUpForTest(mStatusBar, mStackScroller, mStatusBar, mHeadsUpManager, Loading Loading @@ -529,11 +537,7 @@ public class StatusBarTest extends SysuiTestCase { @Test @RunWithLooper(setAsMainLooper = true) public void testUpdateKeyguardState_DoesNotCrash() { mStatusBar.mStatusBarWindow = mock(StatusBarWindowView.class); mStatusBar.mState = StatusBarState.KEYGUARD; mStatusBar.mDozeScrimController = mock(DozeScrimController.class); mStatusBar.mNotificationIconAreaController = mock(NotificationIconAreaController.class); mStatusBar.mLockscreenUserManager = mock(NotificationLockscreenUserManager.class); when(mStatusBar.mLockscreenUserManager.getCurrentProfiles()).thenReturn( new SparseArray<>()); mStatusBar.updateKeyguardState(false, false); Loading @@ -541,9 +545,6 @@ public class StatusBarTest extends SysuiTestCase { @Test public void testFingerprintNotification_UpdatesScrims() { mStatusBar.mStatusBarWindowManager = mock(StatusBarWindowManager.class); mStatusBar.mDozeScrimController = mock(DozeScrimController.class); mStatusBar.mNotificationIconAreaController = mock(NotificationIconAreaController.class); mStatusBar.notifyFpAuthModeChanged(); verify(mScrimController).transitionTo(any(), any()); } Loading Loading @@ -629,6 +630,32 @@ public class StatusBarTest extends SysuiTestCase { verify(mStackScroller).changeViewPosition(any(FooterView.class), eq(-1 /* end */)); } @Test public void testSetState_changesIsFullScreenUserSwitcherState() { mStatusBar.setBarStateForTest(StatusBarState.KEYGUARD); assertFalse(mStatusBar.isFullScreenUserSwitcherState()); mStatusBar.setBarStateForTest(StatusBarState.FULLSCREEN_USER_SWITCHER); assertTrue(mStatusBar.isFullScreenUserSwitcherState()); } @Test public void testShowKeyguardImplementation_setsState() { when(mLockscreenUserManager.getCurrentProfiles()).thenReturn(new SparseArray<>()); mStatusBar.setBarStateForTest(StatusBarState.SHADE); // By default, showKeyguardImpl sets state to KEYGUARD. mStatusBar.showKeyguardImpl(); assertTrue(mStatusBar.mState == StatusBarState.KEYGUARD); // If useFullscreenUserSwitcher is true, state is set to FULLSCREEN_USER_SWITCHER. mStatusBar.mUserSwitcherController = mock(UserSwitcherController.class); when(mStatusBar.mUserSwitcherController.useFullscreenUserSwitcher()).thenReturn(true); mStatusBar.showKeyguardImpl(); assertTrue(mStatusBar.mState == StatusBarState.FULLSCREEN_USER_SWITCHER); } static class TestableStatusBar extends StatusBar { public TestableStatusBar(StatusBarKeyguardViewManager man, UnlockMethodCache unlock, KeyguardIndicationController key, Loading @@ -640,7 +667,16 @@ public class StatusBarTest extends SysuiTestCase { NotificationViewHierarchyManager viewHierarchyManager, TestableNotificationEntryManager entryManager, ScrimController scrimController, FingerprintUnlockController fingerprintUnlockController, ActivityLaunchAnimator launchAnimator, KeyguardViewMediator keyguardViewMediator) { ActivityLaunchAnimator launchAnimator, KeyguardViewMediator keyguardViewMediator, NotificationRemoteInputManager notificationRemoteInputManager, NotificationGroupManager notificationGroupManager, FalsingManager falsingManager, StatusBarWindowManager statusBarWindowManager, NotificationIconAreaController notificationIconAreaController, DozeScrimController dozeScrimController, NotificationShelf notificationShelf, NotificationLockscreenUserManager notificationLockscreenUserManager, CommandQueue commandQueue) { mStatusBarKeyguardViewManager = man; mUnlockMethodCache = unlock; mKeyguardIndicationController = key; Loading @@ -660,6 +696,15 @@ public class StatusBarTest extends SysuiTestCase { mActivityLaunchAnimator = launchAnimator; mKeyguardViewMediator = keyguardViewMediator; mClearAllEnabled = true; mRemoteInputManager = notificationRemoteInputManager; mGroupManager = notificationGroupManager; mFalsingManager = falsingManager; mStatusBarWindowManager = statusBarWindowManager; mNotificationIconAreaController = notificationIconAreaController; mDozeScrimController = dozeScrimController; mNotificationShelf = notificationShelf; mLockscreenUserManager = notificationLockscreenUserManager; mCommandQueue = commandQueue; } private WakefulnessLifecycle createAwakeWakefulnessLifecycle() { Loading