Merge "Refreshing state in QS with upcoming state of KEYGUARD" into tm-qpr-dev

This commit is contained in:
Michał Brzeziński
2023-01-05 16:51:26 +00:00
committed by Android (Google) Code Review
2 changed files with 40 additions and 15 deletions

View File

@@ -19,6 +19,8 @@ import static android.app.StatusBarManager.DISABLE2_QUICK_SETTINGS;
import static com.android.systemui.media.dagger.MediaModule.QS_PANEL; import static com.android.systemui.media.dagger.MediaModule.QS_PANEL;
import static com.android.systemui.media.dagger.MediaModule.QUICK_QS_PANEL; import static com.android.systemui.media.dagger.MediaModule.QUICK_QS_PANEL;
import static com.android.systemui.statusbar.DisableFlagsLogger.DisableState; import static com.android.systemui.statusbar.DisableFlagsLogger.DisableState;
import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
import static com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED;
import android.animation.Animator; import android.animation.Animator;
import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorListenerAdapter;
@@ -124,7 +126,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
* we're on keyguard but use {@link #isKeyguardState()} instead since that is more accurate * we're on keyguard but use {@link #isKeyguardState()} instead since that is more accurate
* during state transitions which often call into us. * during state transitions which often call into us.
*/ */
private int mState; private int mStatusBarState = -1;
private QSContainerImplController mQSContainerImplController; private QSContainerImplController mQSContainerImplController;
private int[] mTmpLocation = new int[2]; private int[] mTmpLocation = new int[2];
private int mLastViewHeight; private int mLastViewHeight;
@@ -457,7 +459,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
private boolean isKeyguardState() { private boolean isKeyguardState() {
// We want the freshest state here since otherwise we'll have some weirdness if earlier // We want the freshest state here since otherwise we'll have some weirdness if earlier
// listeners trigger updates // listeners trigger updates
return mStatusBarStateController.getState() == StatusBarState.KEYGUARD; return mStatusBarStateController.getCurrentOrUpcomingState() == KEYGUARD;
} }
private void updateShowCollapsedOnKeyguard() { private void updateShowCollapsedOnKeyguard() {
@@ -672,8 +674,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
mQSAnimator.setPosition(expansion); mQSAnimator.setPosition(expansion);
} }
if (!mInSplitShade if (!mInSplitShade
|| mStatusBarStateController.getState() == StatusBarState.KEYGUARD || mStatusBarStateController.getState() == KEYGUARD
|| mStatusBarStateController.getState() == StatusBarState.SHADE_LOCKED) { || mStatusBarStateController.getState() == SHADE_LOCKED) {
// At beginning, state is 0 and will apply wrong squishiness to MediaHost in lockscreen // At beginning, state is 0 and will apply wrong squishiness to MediaHost in lockscreen
// and media player expect no change by squishiness in lock screen shade. Don't bother // and media player expect no change by squishiness in lock screen shade. Don't bother
// squishing mQsMediaHost when not in split shade to prevent problems with stale state. // squishing mQsMediaHost when not in split shade to prevent problems with stale state.
@@ -703,8 +705,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
// Large screens in landscape. // Large screens in landscape.
// Need to check upcoming state as for unlocked -> AOD transition current state is // 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 // not updated yet, but we're transitioning and UI should already follow KEYGUARD state
if (mTransitioningToFullShade || mStatusBarStateController.getCurrentOrUpcomingState() if (mTransitioningToFullShade
== StatusBarState.KEYGUARD) { || mStatusBarStateController.getCurrentOrUpcomingState() == 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 mLockscreenToShadeProgress; return mLockscreenToShadeProgress;
@@ -757,8 +759,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
} }
private boolean headerWillBeAnimating() { private boolean headerWillBeAnimating() {
return mState == StatusBarState.KEYGUARD && mShowCollapsedOnKeyguard return mStatusBarState == KEYGUARD && mShowCollapsedOnKeyguard && !isKeyguardState();
&& !isKeyguardState();
} }
@Override @Override
@@ -890,10 +891,24 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
} }
}; };
@Override
public void onUpcomingStateChanged(int upcomingState) {
if (upcomingState == KEYGUARD) {
// refresh state of QS as soon as possible - while it's still upcoming - so in case of
// transition to KEYGUARD (e.g. from unlocked to AOD) all objects are aware they should
// already behave like on keyguard. Otherwise we might be doing extra work,
// e.g. QSAnimator making QS visible and then quickly invisible
onStateChanged(upcomingState);
}
}
@Override @Override
public void onStateChanged(int newState) { public void onStateChanged(int newState) {
mState = newState; if (newState == mStatusBarState) {
setKeyguardShowing(newState == StatusBarState.KEYGUARD); return;
}
mStatusBarState = newState;
setKeyguardShowing(newState == KEYGUARD);
updateShowCollapsedOnKeyguard(); updateShowCollapsedOnKeyguard();
} }
@@ -921,7 +936,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
indentingPw.println("mTemp: " + Arrays.toString(mLocationTemp)); indentingPw.println("mTemp: " + Arrays.toString(mLocationTemp));
indentingPw.println("mShowCollapsedOnKeyguard: " + mShowCollapsedOnKeyguard); indentingPw.println("mShowCollapsedOnKeyguard: " + mShowCollapsedOnKeyguard);
indentingPw.println("mLastKeyguardAndExpanded: " + mLastKeyguardAndExpanded); indentingPw.println("mLastKeyguardAndExpanded: " + mLastKeyguardAndExpanded);
indentingPw.println("mState: " + StatusBarState.toString(mState)); indentingPw.println("mStatusBarState: " + StatusBarState.toString(mStatusBarState));
indentingPw.println("mTmpLocation: " + Arrays.toString(mTmpLocation)); indentingPw.println("mTmpLocation: " + Arrays.toString(mTmpLocation));
indentingPw.println("mLastViewHeight: " + mLastViewHeight); indentingPw.println("mLastViewHeight: " + mLastViewHeight);
indentingPw.println("mLastHeaderTranslation: " + mLastHeaderTranslation); indentingPw.println("mLastHeaderTranslation: " + mLastHeaderTranslation);

View File

@@ -151,7 +151,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
@Test @Test
public void transitionToFullShade_setsAlphaUsingShadeInterpolator() { public void transitionToFullShade_setsAlphaUsingShadeInterpolator() {
QSFragment fragment = resumeAndGetFragment(); QSFragment fragment = resumeAndGetFragment();
setStatusBarState(StatusBarState.SHADE); setStatusBarCurrentAndUpcomingState(StatusBarState.SHADE);
boolean isTransitioningToFullShade = true; boolean isTransitioningToFullShade = true;
float transitionProgress = 0.5f; float transitionProgress = 0.5f;
float squishinessFraction = 0.5f; float squishinessFraction = 0.5f;
@@ -167,7 +167,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(KEYGUARD); setStatusBarCurrentAndUpcomingState(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;
@@ -183,7 +183,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(KEYGUARD); setStatusBarCurrentAndUpcomingState(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;
@@ -482,6 +482,15 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
assertEquals(175, mediaHostClip.bottom); assertEquals(175, mediaHostClip.bottom);
} }
@Test
public void testQsUpdatesQsAnimatorWithUpcomingState() {
QSFragment fragment = resumeAndGetFragment();
setStatusBarCurrentAndUpcomingState(SHADE);
fragment.onUpcomingStateChanged(KEYGUARD);
verify(mQSAnimator).setOnKeyguard(true);
}
@Override @Override
protected Fragment instantiate(Context context, String className, Bundle arguments) { protected Fragment instantiate(Context context, String className, Bundle arguments) {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
@@ -591,8 +600,9 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
return getFragment(); return getFragment();
} }
private void setStatusBarState(int statusBarState) { private void setStatusBarCurrentAndUpcomingState(int statusBarState) {
when(mStatusBarStateController.getState()).thenReturn(statusBarState); when(mStatusBarStateController.getState()).thenReturn(statusBarState);
when(mStatusBarStateController.getCurrentOrUpcomingState()).thenReturn(statusBarState);
getFragment().onStateChanged(statusBarState); getFragment().onStateChanged(statusBarState);
} }