Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 73b8866c authored by Michal Brzezinski's avatar Michal Brzezinski
Browse files

Ensuring QS can't collapse (hide) in split shade

QS would be asked to collapse - so effectively made invisible - in split shade when:
- shade is expanded by some 3rd party launchers
- `adb shell cmd statusbar expand-notifications` is called when shade is already visible
- `adb shell cmd statusbar expand-notifications` is called quickly twice when shade is not visible

Now `expandShadeToNotifications` - formerly known as `expandWithoutQs` - will make sure that split shade doesn't react at all to that command when shade is already expanded.

Fixes: 263903057
Test: writing unit test is very hard so I'm adding functional test OpenSplitShadeWithAccessibilityCommandTwice
Change-Id: I983157bbd0bf7cbe262036cd565d157aec6842ce
parent d2787bc5
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -2072,7 +2072,17 @@ public final class NotificationPanelViewController implements Dumpable {
        }
    }

    public void expandWithoutQs() {
    /**
     * Expand shade so that notifications are visible.
     * Non-split shade: just expanding shade or collapsing QS when they're expanded.
     * Split shade: only expanding shade, notifications are always visible
     *
     * Called when `adb shell cmd statusbar expand-notifications` is executed.
     */
    public void expandShadeToNotifications() {
        if (mSplitShadeEnabled && (isShadeFullyOpen() || isExpanding())) {
            return;
        }
        if (isQsExpanded()) {
            flingSettings(0 /* velocity */, FLING_COLLAPSE);
        } else {
@@ -5500,7 +5510,7 @@ public final class NotificationPanelViewController implements Dumpable {

        @Override
        public void flingTopOverscroll(float velocity, boolean open) {
            // in split shade mode we want to expand/collapse QS only when touch happens within QS
            // in split shade touches affect QS only when touch happens within QS
            if (isSplitShadeAndTouchXOutsideQs(mInitialTouchX)) {
                return;
            }
+1 −1
Original line number Diff line number Diff line
@@ -215,7 +215,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
            return;
        }

        mNotificationPanelViewController.expandWithoutQs();
        mNotificationPanelViewController.expandShadeToNotifications();
    }

    @Override
+1 −1
Original line number Diff line number Diff line
@@ -1111,7 +1111,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
            if (hideImmediately) {
                mStatusBarStateController.setLeaveOpenOnKeyguardHide(false);
            } else {
                mNotificationPanelViewController.expandWithoutQs();
                mNotificationPanelViewController.expandShadeToNotifications();
            }
        }
        return;
+2 −2
Original line number Diff line number Diff line
@@ -140,7 +140,7 @@ public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase {

        // Trying to open it does nothing.
        mSbcqCallbacks.animateExpandNotificationsPanel();
        verify(mNotificationPanelViewController, never()).expandWithoutQs();
        verify(mNotificationPanelViewController, never()).expandShadeToNotifications();
        mSbcqCallbacks.animateExpandSettingsPanel(null);
        verify(mNotificationPanelViewController, never()).expand(anyBoolean());
    }
@@ -158,7 +158,7 @@ public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase {

        // Can now be opened.
        mSbcqCallbacks.animateExpandNotificationsPanel();
        verify(mNotificationPanelViewController).expandWithoutQs();
        verify(mNotificationPanelViewController).expandShadeToNotifications();
        mSbcqCallbacks.animateExpandSettingsPanel(null);
        verify(mNotificationPanelViewController).expandWithQs();
    }