Merge "Refreshing state in QS with upcoming state of KEYGUARD" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
bcc89a04bd
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user