summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2022-10-04 17:13:53 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-10-04 17:13:53 +0000
commite88223f77f95230b2944ab42a095c399163bd9e0 (patch)
tree77b5f81ce8d1fb79033e2aa79b151c28789757fb
parent403edaa3386cc639b1ae59fee2d73c5f28d141c4 (diff)
parent3c94a8ff2e87a3250549f3c286df56e067528fa2 (diff)
Merge "Merge changes from topic "qs_expanded_state_fix" into tm-qpr-dev am: 6bcb40d0df am: d6ae817d56"
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSFragment.java15
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java37
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java13
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java31
4 files changed, 61 insertions, 35 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
index b3e6f8ab3de6..ba3c919edbc2 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
@@ -442,20 +442,19 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
}
private void updateQsState() {
- final boolean expanded = mQsExpanded || mInSplitShade;
- final boolean expandVisually = expanded || mStackScrollerOverscrolling
+ final boolean expandVisually = mQsExpanded || mStackScrollerOverscrolling
|| mHeaderAnimating;
- mQSPanelController.setExpanded(expanded);
+ mQSPanelController.setExpanded(mQsExpanded);
boolean keyguardShowing = isKeyguardState();
- mHeader.setVisibility((expanded || !keyguardShowing || mHeaderAnimating
+ mHeader.setVisibility((mQsExpanded || !keyguardShowing || mHeaderAnimating
|| mShowCollapsedOnKeyguard)
? View.VISIBLE
: View.INVISIBLE);
mHeader.setExpanded((keyguardShowing && !mHeaderAnimating && !mShowCollapsedOnKeyguard)
- || (expanded && !mStackScrollerOverscrolling), mQuickQSPanelController);
+ || (mQsExpanded && !mStackScrollerOverscrolling), mQuickQSPanelController);
boolean qsPanelVisible = !mQsDisabled && expandVisually;
- boolean footerVisible = qsPanelVisible && (expanded || !keyguardShowing || mHeaderAnimating
- || mShowCollapsedOnKeyguard);
+ boolean footerVisible = qsPanelVisible && (mQsExpanded || !keyguardShowing
+ || mHeaderAnimating || mShowCollapsedOnKeyguard);
mFooter.setVisibility(footerVisible ? View.VISIBLE : View.INVISIBLE);
if (mQSFooterActionController != null) {
mQSFooterActionController.setVisible(footerVisible);
@@ -463,7 +462,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
mQSFooterActionsViewModel.onVisibilityChangeRequested(footerVisible);
}
mFooter.setExpanded((keyguardShowing && !mHeaderAnimating && !mShowCollapsedOnKeyguard)
- || (expanded && !mStackScrollerOverscrolling));
+ || (mQsExpanded && !mStackScrollerOverscrolling));
mQSPanelController.setVisibility(qsPanelVisible ? View.VISIBLE : View.INVISIBLE);
if (DEBUG) {
Log.d(TAG, "Footer: " + footerVisible + ", QS Panel: " + qsPanelVisible);
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
index feda11f50b2c..553ba53a3d91 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
@@ -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) {
@@ -3124,26 +3127,24 @@ public final class NotificationPanelViewController extends PanelViewController {
}
if (mQsExpandImmediate || (mQsExpanded && !mQsTracking && mQsExpansionAnimator == null
&& !mQsExpansionFromOverscroll)) {
- float t;
- if (mKeyguardShowing) {
-
+ float qsExpansionFraction;
+ if (mSplitShadeEnabled) {
+ qsExpansionFraction = 1;
+ } else if (mKeyguardShowing) {
// On Keyguard, interpolate the QS expansion linearly to the panel expansion
- t = expandedHeight / (getMaxPanelHeight());
+ qsExpansionFraction = expandedHeight / (getMaxPanelHeight());
} else {
// In Shade, interpolate linearly such that QS is closed whenever panel height is
// minimum QS expansion + minStackHeight
- float
- panelHeightQsCollapsed =
+ float panelHeightQsCollapsed =
mNotificationStackScrollLayoutController.getIntrinsicPadding()
+ mNotificationStackScrollLayoutController.getLayoutMinHeight();
float panelHeightQsExpanded = calculatePanelHeightQsExpanded();
- t =
- (expandedHeight - panelHeightQsCollapsed) / (panelHeightQsExpanded
- - panelHeightQsCollapsed);
+ qsExpansionFraction = (expandedHeight - panelHeightQsCollapsed)
+ / (panelHeightQsExpanded - panelHeightQsCollapsed);
}
- float
- targetHeight =
- mQsMinExpansionHeight + t * (mQsMaxExpansionHeight - mQsMinExpansionHeight);
+ float targetHeight = mQsMinExpansionHeight
+ + qsExpansionFraction * (mQsMaxExpansionHeight - mQsMinExpansionHeight);
setQsExpansion(targetHeight);
}
updateExpandedHeight(expandedHeight);
@@ -3329,7 +3330,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);
@@ -4993,6 +4998,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) {
@@ -5005,6 +5011,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);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
index 5d5918de3d9e..2a66773f924e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
@@ -402,6 +402,19 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
verify(mQSPanelController).setListening(eq(true), anyBoolean());
}
+ @Test
+ public void passCorrectExpansionState_inSplitShade() {
+ QSFragment fragment = resumeAndGetFragment();
+ enableSplitShade();
+ clearInvocations(mQSPanelController);
+
+ fragment.setExpanded(true);
+ verify(mQSPanelController).setExpanded(true);
+
+ fragment.setExpanded(false);
+ verify(mQSPanelController).setExpanded(false);
+ }
+
@Override
protected Fragment instantiate(Context context, String className, Bundle arguments) {
MockitoAnnotations.initMocks(this);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java
index b40d5ac69d7b..0c60d3c72c2a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java
@@ -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,15 +1263,23 @@ 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();
}