Making sure QS panel is always visible when expanding split shade
When we swipe quickly on launcher to expand shade sometimes we go through path where notifyExpandingFinished() is called at the beginning of the movement - when focus transfer happens and expand() is called. This sets `mQsExpandImmediate` to false but it should be always true when expanding split shade. Fix is to move resetting `mQsExpandImmediate` to onPanelStateChanged reacting to OPEN/CLOSE which should be called only once and only at the end of motion. This fix also coincidentally fixes b/237909902 as it was caused by not resetting `mQsExpandImmediate` after showing heads up notification, now it's done when we transition to CLOSE state. Test: NotificationPanelViewControllerTest Test: which quick flings on launcher try to expand and close shade many times -> notice QS always visible Fixes: 248555255 Fixes: 237909902 Change-Id: I64e54765fe39182ff7f71d1d6407d3e38df051b1
This commit is contained in:
@@ -430,6 +430,7 @@ public final class NotificationPanelViewController extends PanelViewController {
|
||||
/**
|
||||
* Determines if QS should be already expanded when expanding shade.
|
||||
* Used for split shade, two finger gesture as well as accessibility shortcut to QS.
|
||||
* It needs to be set when movement starts as it resets at the end of expansion/collapse.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
boolean mQsExpandImmediate;
|
||||
@@ -1737,8 +1738,10 @@ public final class NotificationPanelViewController extends PanelViewController {
|
||||
}
|
||||
|
||||
private void setQsExpandImmediate(boolean expandImmediate) {
|
||||
mQsExpandImmediate = expandImmediate;
|
||||
mPanelEventsEmitter.notifyExpandImmediateChange(expandImmediate);
|
||||
if (expandImmediate != mQsExpandImmediate) {
|
||||
mQsExpandImmediate = expandImmediate;
|
||||
mPanelEventsEmitter.notifyExpandImmediateChange(expandImmediate);
|
||||
}
|
||||
}
|
||||
|
||||
private void setShowShelfOnly(boolean shelfOnly) {
|
||||
@@ -3326,7 +3329,11 @@ public final class NotificationPanelViewController extends PanelViewController {
|
||||
} else {
|
||||
setListening(true);
|
||||
}
|
||||
setQsExpandImmediate(false);
|
||||
if (mBarState != SHADE) {
|
||||
// updating qsExpandImmediate is done in onPanelStateChanged for unlocked shade but
|
||||
// on keyguard panel state is always OPEN so we need to have that extra update
|
||||
setQsExpandImmediate(false);
|
||||
}
|
||||
setShowShelfOnly(false);
|
||||
mTwoFingerQsExpandPossible = false;
|
||||
updateTrackingHeadsUp(null);
|
||||
@@ -4985,6 +4992,7 @@ public final class NotificationPanelViewController extends PanelViewController {
|
||||
updateQSExpansionEnabledAmbient();
|
||||
|
||||
if (state == STATE_OPEN && mCurrentPanelState != state) {
|
||||
setQsExpandImmediate(false);
|
||||
mView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
|
||||
}
|
||||
if (state == STATE_OPENING) {
|
||||
@@ -4997,6 +5005,7 @@ public final class NotificationPanelViewController extends PanelViewController {
|
||||
mCentralSurfaces.makeExpandedVisible(false);
|
||||
}
|
||||
if (state == STATE_CLOSED) {
|
||||
setQsExpandImmediate(false);
|
||||
// Close the status bar in the next frame so we can show the end of the
|
||||
// animation.
|
||||
mView.post(mMaybeHideExpandedRunnable);
|
||||
|
||||
@@ -23,6 +23,9 @@ import static com.android.keyguard.KeyguardClockSwitch.SMALL;
|
||||
import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
|
||||
import static com.android.systemui.statusbar.StatusBarState.SHADE;
|
||||
import static com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED;
|
||||
import static com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManagerKt.STATE_CLOSED;
|
||||
import static com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManagerKt.STATE_OPEN;
|
||||
import static com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManagerKt.STATE_OPENING;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
@@ -1249,14 +1252,10 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void testQsToBeImmediatelyExpandedWhenOpeningPanelInSplitShade() {
|
||||
enableSplitShade(/* enabled= */ true);
|
||||
// set panel state to CLOSED
|
||||
mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 0,
|
||||
/* expanded= */ false, /* tracking= */ false, /* dragDownPxAmount= */ 0);
|
||||
mPanelExpansionStateManager.updateState(STATE_CLOSED);
|
||||
assertThat(mNotificationPanelViewController.mQsExpandImmediate).isFalse();
|
||||
|
||||
// change panel state to OPENING
|
||||
mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 0.5f,
|
||||
/* expanded= */ true, /* tracking= */ true, /* dragDownPxAmount= */ 100);
|
||||
mPanelExpansionStateManager.updateState(STATE_OPENING);
|
||||
|
||||
assertThat(mNotificationPanelViewController.mQsExpandImmediate).isTrue();
|
||||
}
|
||||
@@ -1264,18 +1263,26 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void testQsNotToBeImmediatelyExpandedWhenGoingFromUnlockedToLocked() {
|
||||
enableSplitShade(/* enabled= */ true);
|
||||
// set panel state to CLOSED
|
||||
mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 0,
|
||||
/* expanded= */ false, /* tracking= */ false, /* dragDownPxAmount= */ 0);
|
||||
mPanelExpansionStateManager.updateState(STATE_CLOSED);
|
||||
|
||||
// go to lockscreen, which also sets fraction to 1.0f and makes shade "expanded"
|
||||
mStatusBarStateController.setState(KEYGUARD);
|
||||
mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 1,
|
||||
/* expanded= */ true, /* tracking= */ true, /* dragDownPxAmount= */ 0);
|
||||
// going to lockscreen would trigger STATE_OPENING
|
||||
mPanelExpansionStateManager.updateState(STATE_OPENING);
|
||||
|
||||
assertThat(mNotificationPanelViewController.mQsExpandImmediate).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQsImmediateResetsWhenPanelOpensOrCloses() {
|
||||
mNotificationPanelViewController.mQsExpandImmediate = true;
|
||||
mPanelExpansionStateManager.updateState(STATE_OPEN);
|
||||
assertThat(mNotificationPanelViewController.mQsExpandImmediate).isFalse();
|
||||
|
||||
mNotificationPanelViewController.mQsExpandImmediate = true;
|
||||
mPanelExpansionStateManager.updateState(STATE_CLOSED);
|
||||
assertThat(mNotificationPanelViewController.mQsExpandImmediate).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQsExpansionChangedToDefaultWhenRotatingFromOrToSplitShade() {
|
||||
// to make sure shade is in expanded state
|
||||
|
||||
Reference in New Issue
Block a user