From 7b7b8420e282c52c9df2f751b86e2397be056665 Mon Sep 17 00:00:00 2001 From: Michal Brzezinski Date: Mon, 25 Apr 2022 18:27:38 +0100 Subject: [PATCH] Fixing setting mQsExpandImmediate state in correct context in split shade Currently mQsExpandImmediate was set too often - always when panel was tracking touch and sometimes in times when we don't want it e.g. swiping up and/or in locked shade. Now this code is moved into more scoped callback, when it's called only when shade is actually expanding and only in unlocked state. Fixes: 230340979 Test: manual + unit tests Change-Id: I47870107b339b9cde0c61478c68f2f118ff97d62 --- .../NotificationPanelViewController.java | 12 ++++---- .../NotificationPanelViewControllerTest.java | 29 +++++++++++++++++-- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java index adf70a255b4ff..25be8ddb3db74 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -3169,12 +3169,6 @@ public class NotificationPanelViewController extends PanelViewController { mFalsingCollector.onTrackingStarted(!mKeyguardStateController.canDismissLockScreen()); super.onTrackingStarted(); mScrimController.onTrackingStarted(); - // normally we want to set mQsExpandImmediate for every split shade case (at least when - // expanding), but keyguard tracking logic is different - this callback is called when - // unlocking with swipe up but not when swiping down to reveal shade - if (mShouldUseSplitNotificationShade && !mKeyguardShowing) { - mQsExpandImmediate = true; - } if (mQsFullyExpanded) { mQsExpandImmediate = true; setShowShelfOnly(true); @@ -4921,6 +4915,12 @@ public class NotificationPanelViewController extends PanelViewController { mView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); } if (state == STATE_OPENING) { + // we need to ignore it on keyguard as this is a false alarm - transition from unlocked + // to locked will trigger this event and we're not actually in the process of opening + // the shade, lockscreen is just always expanded + if (mShouldUseSplitNotificationShade && !isOnKeyguard()) { + mQsExpandImmediate = true; + } mCentralSurfaces.makeExpandedVisible(false); } if (state == STATE_CLOSED) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewControllerTest.java index 71f1f0b0f7cf0..870298425d9b6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewControllerTest.java @@ -352,6 +352,8 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { private FalsingManagerFake mFalsingManager = new FalsingManagerFake(); private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock()); private Handler mMainHandler; + private final PanelExpansionStateManager mPanelExpansionStateManager = + new PanelExpansionStateManager(); @Before public void setup() { @@ -516,7 +518,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { mLargeScreenShadeHeaderController, mScreenOffAnimationController, mLockscreenGestureLogger, - new PanelExpansionStateManager(), + mPanelExpansionStateManager, mNotificationRemoteInputManager, mSysUIUnfoldComponent, mControlsComponent, @@ -987,14 +989,35 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { } @Test - public void testQsToBeImmediatelyExpandedInSplitShade() { + public void testQsToBeImmediatelyExpandedWhenOpeningPanelInSplitShade() { enableSplitShade(/* enabled= */ true); + // set panel state to CLOSED + mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 0, + /* expanded= */ false, /* tracking= */ false, /* dragDownPxAmount= */ 0); + assertThat(mNotificationPanelViewController.mQsExpandImmediate).isFalse(); - mNotificationPanelViewController.onTrackingStarted(); + // change panel state to OPENING + mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 0.5f, + /* expanded= */ true, /* tracking= */ true, /* dragDownPxAmount= */ 100); assertThat(mNotificationPanelViewController.mQsExpandImmediate).isTrue(); } + @Test + public void testQsNotToBeImmediatelyExpandedWhenGoingFromUnlockedToLocked() { + enableSplitShade(/* enabled= */ true); + // set panel state to CLOSED + mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 0, + /* expanded= */ false, /* tracking= */ false, /* dragDownPxAmount= */ 0); + + // 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); + + assertThat(mNotificationPanelViewController.mQsExpandImmediate).isFalse(); + } + @Test public void interceptTouchEvent_withinQs_shadeExpanded_startsQsTracking() { mNotificationPanelViewController.mQs = mQs;