diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index 0b95458b73df7..28f2e61bd8c6a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -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); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java index b3f8f9114021e..4563239f80541 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java @@ -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();