Merge "Fixing empty split shade after rotation from expanded QS on lockscreen" into tm-qpr-dev

This commit is contained in:
Michał Brzeziński
2022-06-11 03:56:52 +00:00
committed by Android (Google) Code Review
3 changed files with 38 additions and 12 deletions

View File

@@ -22,18 +22,21 @@ package com.android.systemui.statusbar;
public class StatusBarState {
/**
* The status bar is in the "normal" shade mode.
* The status bar is in the "normal", unlocked mode or the device is still locked but we're
* accessing camera from power button double-tap shortcut.
*/
public static final int SHADE = 0;
/**
* Status bar is currently the Keyguard.
* Status bar is currently the Keyguard. In single column mode, when you swipe from the top of
* the keyguard to expand QS immediately, it's still KEYGUARD state.
*/
public static final int KEYGUARD = 1;
/**
* Status bar is in the special mode, where it is fully interactive but still locked. So
* dismissing the shade will still show the bouncer.
* Status bar is in the special mode, where it was transitioned from lockscreen to shade.
* Depending on user's security settings, dismissing the shade will either show the
* bouncer or go directly to unlocked {@link #SHADE} mode.
*/
public static final int SHADE_LOCKED = 2;

View File

@@ -1163,17 +1163,30 @@ public class NotificationPanelViewController extends PanelViewController {
mKeyguardMediaController.refreshMediaPosition();
if (splitShadeChanged) {
// when we switch from split shade to regular shade we want to enforce setting qs to
// the default state: expanded for split shade and collapsed otherwise
if (!isOnKeyguard() && mPanelExpanded) {
setQsExpanded(mSplitShadeEnabled);
}
updateClockAppearance();
updateQsState();
mNotificationStackScrollLayoutController.updateFooter();
onSplitShadeEnabledChanged();
}
}
private void onSplitShadeEnabledChanged() {
// when we switch between split shade and regular shade we want to enforce setting qs to
// the default state: expanded for split shade and collapsed otherwise
if (!isOnKeyguard() && mPanelExpanded) {
setQsExpanded(mSplitShadeEnabled);
}
if (isOnKeyguard() && mQsExpanded && mSplitShadeEnabled) {
// In single column keyguard - when you swipe from the top - QS is fully expanded and
// StatusBarState is KEYGUARD. That state doesn't make sense for split shade,
// where notifications are always visible and we effectively go to fully expanded
// shade, that is SHADE_LOCKED.
// Also we might just be switching from regular expanded shade, so we don't want
// to force state transition if it's already correct.
mStatusBarStateController.setState(StatusBarState.SHADE_LOCKED, /* force= */false);
}
updateClockAppearance();
updateQsState();
mNotificationStackScrollLayoutController.updateFooter();
}
private View reInflateStub(int viewId, int stubId, int layoutId, boolean enabled) {
View view = mView.findViewById(viewId);
if (view != null) {

View File

@@ -1005,6 +1005,16 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
verify(mTapAgainViewController).show();
}
@Test
public void testRotatingToSplitShadeWithQsExpanded_transitionsToShadeLocked() {
mStatusBarStateController.setState(KEYGUARD);
mNotificationPanelViewController.setQsExpanded(true);
enableSplitShade(true);
assertThat(mStatusBarStateController.getState()).isEqualTo(SHADE_LOCKED);
}
@Test
public void testSwitchesToCorrectClockInSinglePaneShade() {
mStatusBarStateController.setState(KEYGUARD);