Merge changes from topic "qs_expanded_state_fix" into tm-qpr-dev
* changes: Making sure QS panel is always visible when expanding split shade Making sure QS tile pages are reset when collapsing split shade
This commit is contained in:
committed by
Android (Google) Code Review
commit
6bcb40d0df
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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