User Switcher: Prevent flickering for user switch.
There is a scrim flickering when opening activity from keyguard and from QS in keyguard. From Keguard, there is a flickering of the back scrim. From QS, there is a flickering of the back scrim and the notification scrim. In order to prevent this, set alpha of these scrims to 0 when state is KEYGUARD or SHADE_LOCKED Bug: 223753460 Test: Manual on relevant devices Change-Id: Iadf199bb5905de4d9c33e6f01a3fb20993559d25
This commit is contained in:
@@ -1021,15 +1021,24 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
boolean aodWallpaperTimeout = (mState == ScrimState.AOD || mState == ScrimState.PULSING)
|
||||
&& mWallpaperVisibilityTimedOut;
|
||||
// We also want to hide FLAG_SHOW_WHEN_LOCKED activities under the scrim.
|
||||
boolean occludedKeyguard = (mState == ScrimState.PULSING || mState == ScrimState.AOD)
|
||||
boolean hideFlagShowWhenLockedActivities =
|
||||
(mState == ScrimState.PULSING || mState == ScrimState.AOD)
|
||||
&& mKeyguardOccluded;
|
||||
if (aodWallpaperTimeout || occludedKeyguard) {
|
||||
if (aodWallpaperTimeout || hideFlagShowWhenLockedActivities) {
|
||||
mBehindAlpha = 1;
|
||||
}
|
||||
// Prevent notification scrim flicker when transitioning away from keyguard.
|
||||
if (mKeyguardStateController.isKeyguardGoingAway()) {
|
||||
mNotificationsAlpha = 0;
|
||||
}
|
||||
|
||||
// Prevent flickering for activities above keyguard and quick settings in keyguard.
|
||||
if (mKeyguardOccluded
|
||||
&& (mState == ScrimState.KEYGUARD || mState == ScrimState.SHADE_LOCKED)) {
|
||||
mBehindAlpha = 0;
|
||||
mNotificationsAlpha = 0;
|
||||
}
|
||||
|
||||
setScrimAlpha(mScrimInFront, mInFrontAlpha);
|
||||
setScrimAlpha(mScrimBehind, mBehindAlpha);
|
||||
setScrimAlpha(mNotificationsScrim, mNotificationsAlpha);
|
||||
|
||||
@@ -1383,6 +1383,24 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
.isEqualTo(ScrimState.KEYGUARD.getBehindTint());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHidesScrimFlickerInActivity() {
|
||||
mScrimController.setKeyguardOccluded(true);
|
||||
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
||||
finishAnimationsImmediately();
|
||||
assertScrimAlpha(Map.of(
|
||||
mScrimInFront, TRANSPARENT,
|
||||
mScrimBehind, TRANSPARENT,
|
||||
mNotificationsScrim, TRANSPARENT));
|
||||
|
||||
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
||||
finishAnimationsImmediately();
|
||||
assertScrimAlpha(Map.of(
|
||||
mScrimInFront, TRANSPARENT,
|
||||
mScrimBehind, TRANSPARENT,
|
||||
mNotificationsScrim, TRANSPARENT));
|
||||
}
|
||||
|
||||
private void assertAlphaAfterExpansion(ScrimView scrim, float expectedAlpha, float expansion) {
|
||||
mScrimController.setRawPanelExpansionFraction(expansion);
|
||||
finishAnimationsImmediately();
|
||||
|
||||
Reference in New Issue
Block a user