diff options
| author | 2018-03-29 18:28:12 +0000 | |
|---|---|---|
| committer | 2018-03-29 18:28:12 +0000 | |
| commit | 9ed9aa932e4c9fe52ad65fbbf1f4b1937bf004e5 (patch) | |
| tree | 8c2fd49a58b4f1796366dd8c43f3e5ca65b48a57 | |
| parent | 1a6051a81d5a8f9ca8ea08b11abf325b94082a7c (diff) | |
| parent | 5f6dc61c10dc06e669dfc05c94fffddd15e4e742 (diff) | |
Merge "Bouncer should not show over the full screen user switcher on boot." into pi-dev
3 files changed, 68 insertions, 14 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index c03ecb306226..beeba83b9c25 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -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); @@ -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() { @@ -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; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index 597560823824..4e782de96449 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -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); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java index 4a66bb7deca0..b31a2dc1af04 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java @@ -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; @@ -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; @@ -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; @@ -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; @@ -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; @@ -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, @@ -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, @@ -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); @@ -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()); } @@ -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, @@ -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; @@ -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() { |