Merge "Fixing QS blinking when going from unlocked to AOD in split shade" into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2022-10-04 14:58:51 +00:00
committed by Android (Google) Code Review
2 changed files with 40 additions and 12 deletions

View File

@@ -60,6 +60,7 @@ import com.android.systemui.qs.footer.ui.binder.FooterActionsViewBinder;
import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel; import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel;
import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator; import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.policy.BrightnessMirrorController; import com.android.systemui.statusbar.policy.BrightnessMirrorController;
@@ -82,7 +83,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
private static final String EXTRA_VISIBLE = "visible"; private static final String EXTRA_VISIBLE = "visible";
private final Rect mQsBounds = new Rect(); private final Rect mQsBounds = new Rect();
private final StatusBarStateController mStatusBarStateController; private final SysuiStatusBarStateController mStatusBarStateController;
private final FalsingManager mFalsingManager; private final FalsingManager mFalsingManager;
private final KeyguardBypassController mBypassController; private final KeyguardBypassController mBypassController;
private boolean mQsExpanded; private boolean mQsExpanded;
@@ -159,7 +160,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
* Progress of pull down from the center of the lock screen. * Progress of pull down from the center of the lock screen.
* @see com.android.systemui.statusbar.LockscreenShadeTransitionController * @see com.android.systemui.statusbar.LockscreenShadeTransitionController
*/ */
private float mFullShadeProgress; private float mLockscreenToShadeProgress;
private boolean mOverScrolling; private boolean mOverScrolling;
@@ -177,7 +178,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
@Inject @Inject
public QSFragment(RemoteInputQuickSettingsDisabler remoteInputQsDisabler, public QSFragment(RemoteInputQuickSettingsDisabler remoteInputQsDisabler,
QSTileHost qsTileHost, QSTileHost qsTileHost,
StatusBarStateController statusBarStateController, CommandQueue commandQueue, SysuiStatusBarStateController statusBarStateController, CommandQueue commandQueue,
@Named(QS_PANEL) MediaHost qsMediaHost, @Named(QS_PANEL) MediaHost qsMediaHost,
@Named(QUICK_QS_PANEL) MediaHost qqsMediaHost, @Named(QUICK_QS_PANEL) MediaHost qqsMediaHost,
KeyguardBypassController keyguardBypassController, KeyguardBypassController keyguardBypassController,
@@ -585,7 +586,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
mTransitioningToFullShade = isTransitioningToFullShade; mTransitioningToFullShade = isTransitioningToFullShade;
updateShowCollapsedOnKeyguard(); updateShowCollapsedOnKeyguard();
} }
mFullShadeProgress = qsTransitionFraction; mLockscreenToShadeProgress = qsTransitionFraction;
setQsExpansion(mLastQSExpansion, mLastPanelFraction, mLastHeaderTranslation, setQsExpansion(mLastQSExpansion, mLastPanelFraction, mLastHeaderTranslation,
isTransitioningToFullShade ? qsSquishinessFraction : mSquishinessFraction); isTransitioningToFullShade ? qsSquishinessFraction : mSquishinessFraction);
} }
@@ -709,10 +710,13 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
} }
if (mInSplitShade) { if (mInSplitShade) {
// Large screens in landscape. // Large screens in landscape.
if (mTransitioningToFullShade || isKeyguardState()) { // Need to check upcoming state as for unlocked -> AOD transition current state is
// not updated yet, but we're transitioning and UI should already follow KEYGUARD state
if (mTransitioningToFullShade || mStatusBarStateController.getCurrentOrUpcomingState()
== StatusBarState.KEYGUARD) {
// Always use "mFullShadeProgress" on keyguard, because // Always use "mFullShadeProgress" on keyguard, because
// "panelExpansionFractions" is always 1 on keyguard split shade. // "panelExpansionFractions" is always 1 on keyguard split shade.
return mFullShadeProgress; return mLockscreenToShadeProgress;
} else { } else {
return panelExpansionFraction; return panelExpansionFraction;
} }
@@ -721,7 +725,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
if (mTransitioningToFullShade) { if (mTransitioningToFullShade) {
// Only use this value during the standard lock screen shade expansion. During the // Only use this value during the standard lock screen shade expansion. During the
// "quick" expansion from top, this value is 0. // "quick" expansion from top, this value is 0.
return mFullShadeProgress; return mLockscreenToShadeProgress;
} else { } else {
return panelExpansionFraction; return panelExpansionFraction;
} }
@@ -929,7 +933,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
indentingPw.println("mLastHeaderTranslation: " + mLastHeaderTranslation); indentingPw.println("mLastHeaderTranslation: " + mLastHeaderTranslation);
indentingPw.println("mInSplitShade: " + mInSplitShade); indentingPw.println("mInSplitShade: " + mInSplitShade);
indentingPw.println("mTransitioningToFullShade: " + mTransitioningToFullShade); indentingPw.println("mTransitioningToFullShade: " + mTransitioningToFullShade);
indentingPw.println("mFullShadeProgress: " + mFullShadeProgress); indentingPw.println("mLockscreenToShadeProgress: " + mLockscreenToShadeProgress);
indentingPw.println("mOverScrolling: " + mOverScrolling); indentingPw.println("mOverScrolling: " + mOverScrolling);
indentingPw.println("isCustomizing: " + mQSCustomizerController.isCustomizing()); indentingPw.println("isCustomizing: " + mQSCustomizerController.isCustomizing());
View view = getView(); View view = getView();

View File

@@ -14,6 +14,9 @@
package com.android.systemui.qs; package com.android.systemui.qs;
import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
import static com.android.systemui.statusbar.StatusBarState.SHADE;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
@@ -49,13 +52,13 @@ import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.flags.Flags; import com.android.systemui.flags.Flags;
import com.android.systemui.media.MediaHost; import com.android.systemui.media.MediaHost;
import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.qs.customize.QSCustomizerController; import com.android.systemui.qs.customize.QSCustomizerController;
import com.android.systemui.qs.dagger.QSFragmentComponent; import com.android.systemui.qs.dagger.QSFragmentComponent;
import com.android.systemui.qs.external.TileServiceRequestController; import com.android.systemui.qs.external.TileServiceRequestController;
import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel; import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel;
import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler; import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
@@ -93,7 +96,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
@Mock private QSPanel.QSTileLayout mQsTileLayout; @Mock private QSPanel.QSTileLayout mQsTileLayout;
@Mock private QSPanel.QSTileLayout mQQsTileLayout; @Mock private QSPanel.QSTileLayout mQQsTileLayout;
@Mock private QSAnimator mQSAnimator; @Mock private QSAnimator mQSAnimator;
@Mock private StatusBarStateController mStatusBarStateController; @Mock private SysuiStatusBarStateController mStatusBarStateController;
@Mock private QSSquishinessController mSquishinessController; @Mock private QSSquishinessController mSquishinessController;
private View mQsFragmentView; private View mQsFragmentView;
@@ -158,7 +161,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
public void public void
transitionToFullShade_onKeyguard_noBouncer_setsAlphaUsingLinearInterpolator() { transitionToFullShade_onKeyguard_noBouncer_setsAlphaUsingLinearInterpolator() {
QSFragment fragment = resumeAndGetFragment(); QSFragment fragment = resumeAndGetFragment();
setStatusBarState(StatusBarState.KEYGUARD); setStatusBarState(KEYGUARD);
when(mQSPanelController.isBouncerInTransit()).thenReturn(false); when(mQSPanelController.isBouncerInTransit()).thenReturn(false);
boolean isTransitioningToFullShade = true; boolean isTransitioningToFullShade = true;
float transitionProgress = 0.5f; float transitionProgress = 0.5f;
@@ -174,7 +177,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
public void public void
transitionToFullShade_onKeyguard_bouncerActive_setsAlphaUsingBouncerInterpolator() { transitionToFullShade_onKeyguard_bouncerActive_setsAlphaUsingBouncerInterpolator() {
QSFragment fragment = resumeAndGetFragment(); QSFragment fragment = resumeAndGetFragment();
setStatusBarState(StatusBarState.KEYGUARD); setStatusBarState(KEYGUARD);
when(mQSPanelController.isBouncerInTransit()).thenReturn(true); when(mQSPanelController.isBouncerInTransit()).thenReturn(true);
boolean isTransitioningToFullShade = true; boolean isTransitioningToFullShade = true;
float transitionProgress = 0.5f; float transitionProgress = 0.5f;
@@ -261,6 +264,27 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
verify(mQSFooterActionController).setExpansion(expansion); verify(mQSFooterActionController).setExpansion(expansion);
} }
@Test
public void setQsExpansion_inSplitShade_whenTransitioningToKeyguard_setsAlphaBasedOnShadeTransitionProgress() {
QSFragment fragment = resumeAndGetFragment();
enableSplitShade();
when(mStatusBarStateController.getState()).thenReturn(SHADE);
when(mStatusBarStateController.getCurrentOrUpcomingState()).thenReturn(KEYGUARD);
boolean isTransitioningToFullShade = false;
float transitionProgress = 0;
float squishinessFraction = 0f;
fragment.setTransitionToFullShadeProgress(isTransitioningToFullShade, transitionProgress,
squishinessFraction);
// trigger alpha refresh with non-zero expansion and fraction values
fragment.setQsExpansion(/* expansion= */ 1, /* panelExpansionFraction= */1,
/* proposedTranslation= */ 0, /* squishinessFraction= */ 1);
// alpha should follow lockscreen to shade progress, not panel expansion fraction
assertThat(mQsFragmentView.getAlpha()).isEqualTo(transitionProgress);
}
@Test @Test
public void getQsMinExpansionHeight_notInSplitShade_returnsHeaderHeight() { public void getQsMinExpansionHeight_notInSplitShade_returnsHeaderHeight() {
QSFragment fragment = resumeAndGetFragment(); QSFragment fragment = resumeAndGetFragment();