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
This commit is contained in:
Michal Brzezinski
2022-04-25 18:27:38 +01:00
parent 1cc6eceb1d
commit 7b7b8420e2
2 changed files with 32 additions and 9 deletions

View File

@@ -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) {

View File

@@ -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;