Fixing QS blinking when going from unlocked to AOD in split shade
The issue is no longer visible after some recent changes, but the core issue still remains: while transitioning from unlocked to AOD, alpha was following panel expansion while it should follow (newly named) mLockscreenToShadeProgress. This change doesn't modify things visually now but makes alpha as expected so likely to prevent this issue resurfacing in the future. Fixes: 246945311 Test: manual + QSFragmentTest Change-Id: I3762b2969d22dc500f5b63f222e059800117c168
This commit is contained in:
@@ -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.statusbar.CommandQueue;
|
||||
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.phone.KeyguardBypassController;
|
||||
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 final Rect mQsBounds = new Rect();
|
||||
private final StatusBarStateController mStatusBarStateController;
|
||||
private final SysuiStatusBarStateController mStatusBarStateController;
|
||||
private final FalsingManager mFalsingManager;
|
||||
private final KeyguardBypassController mBypassController;
|
||||
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.
|
||||
* @see com.android.systemui.statusbar.LockscreenShadeTransitionController
|
||||
*/
|
||||
private float mFullShadeProgress;
|
||||
private float mLockscreenToShadeProgress;
|
||||
|
||||
private boolean mOverScrolling;
|
||||
|
||||
@@ -177,7 +178,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
@Inject
|
||||
public QSFragment(RemoteInputQuickSettingsDisabler remoteInputQsDisabler,
|
||||
QSTileHost qsTileHost,
|
||||
StatusBarStateController statusBarStateController, CommandQueue commandQueue,
|
||||
SysuiStatusBarStateController statusBarStateController, CommandQueue commandQueue,
|
||||
@Named(QS_PANEL) MediaHost qsMediaHost,
|
||||
@Named(QUICK_QS_PANEL) MediaHost qqsMediaHost,
|
||||
KeyguardBypassController keyguardBypassController,
|
||||
@@ -586,7 +587,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
mTransitioningToFullShade = isTransitioningToFullShade;
|
||||
updateShowCollapsedOnKeyguard();
|
||||
}
|
||||
mFullShadeProgress = qsTransitionFraction;
|
||||
mLockscreenToShadeProgress = qsTransitionFraction;
|
||||
setQsExpansion(mLastQSExpansion, mLastPanelFraction, mLastHeaderTranslation,
|
||||
isTransitioningToFullShade ? qsSquishinessFraction : mSquishinessFraction);
|
||||
}
|
||||
@@ -710,10 +711,13 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
}
|
||||
if (mInSplitShade) {
|
||||
// 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
|
||||
// "panelExpansionFractions" is always 1 on keyguard split shade.
|
||||
return mFullShadeProgress;
|
||||
return mLockscreenToShadeProgress;
|
||||
} else {
|
||||
return panelExpansionFraction;
|
||||
}
|
||||
@@ -722,7 +726,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
if (mTransitioningToFullShade) {
|
||||
// Only use this value during the standard lock screen shade expansion. During the
|
||||
// "quick" expansion from top, this value is 0.
|
||||
return mFullShadeProgress;
|
||||
return mLockscreenToShadeProgress;
|
||||
} else {
|
||||
return panelExpansionFraction;
|
||||
}
|
||||
@@ -930,7 +934,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
indentingPw.println("mLastHeaderTranslation: " + mLastHeaderTranslation);
|
||||
indentingPw.println("mInSplitShade: " + mInSplitShade);
|
||||
indentingPw.println("mTransitioningToFullShade: " + mTransitioningToFullShade);
|
||||
indentingPw.println("mFullShadeProgress: " + mFullShadeProgress);
|
||||
indentingPw.println("mLockscreenToShadeProgress: " + mLockscreenToShadeProgress);
|
||||
indentingPw.println("mOverScrolling: " + mOverScrolling);
|
||||
indentingPw.println("isCustomizing: " + mQSCustomizerController.isCustomizing());
|
||||
View view = getView();
|
||||
|
||||
@@ -14,6 +14,9 @@
|
||||
|
||||
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 org.junit.Assert.assertTrue;
|
||||
@@ -49,13 +52,13 @@ import com.android.systemui.flags.FakeFeatureFlags;
|
||||
import com.android.systemui.flags.Flags;
|
||||
import com.android.systemui.media.MediaHost;
|
||||
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.dagger.QSFragmentComponent;
|
||||
import com.android.systemui.qs.external.TileServiceRequestController;
|
||||
import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel;
|
||||
import com.android.systemui.statusbar.CommandQueue;
|
||||
import com.android.systemui.statusbar.StatusBarState;
|
||||
import com.android.systemui.statusbar.SysuiStatusBarStateController;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
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 mQQsTileLayout;
|
||||
@Mock private QSAnimator mQSAnimator;
|
||||
@Mock private StatusBarStateController mStatusBarStateController;
|
||||
@Mock private SysuiStatusBarStateController mStatusBarStateController;
|
||||
@Mock private QSSquishinessController mSquishinessController;
|
||||
private View mQsFragmentView;
|
||||
|
||||
@@ -158,7 +161,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
|
||||
public void
|
||||
transitionToFullShade_onKeyguard_noBouncer_setsAlphaUsingLinearInterpolator() {
|
||||
QSFragment fragment = resumeAndGetFragment();
|
||||
setStatusBarState(StatusBarState.KEYGUARD);
|
||||
setStatusBarState(KEYGUARD);
|
||||
when(mQSPanelController.isBouncerInTransit()).thenReturn(false);
|
||||
boolean isTransitioningToFullShade = true;
|
||||
float transitionProgress = 0.5f;
|
||||
@@ -174,7 +177,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
|
||||
public void
|
||||
transitionToFullShade_onKeyguard_bouncerActive_setsAlphaUsingBouncerInterpolator() {
|
||||
QSFragment fragment = resumeAndGetFragment();
|
||||
setStatusBarState(StatusBarState.KEYGUARD);
|
||||
setStatusBarState(KEYGUARD);
|
||||
when(mQSPanelController.isBouncerInTransit()).thenReturn(true);
|
||||
boolean isTransitioningToFullShade = true;
|
||||
float transitionProgress = 0.5f;
|
||||
@@ -261,6 +264,27 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
|
||||
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
|
||||
public void getQsMinExpansionHeight_notInSplitShade_returnsHeaderHeight() {
|
||||
QSFragment fragment = resumeAndGetFragment();
|
||||
|
||||
Reference in New Issue
Block a user