diff options
4 files changed, 36 insertions, 2 deletions
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 e421c03470f3..739d8d5c2c67 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -158,6 +158,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, private final WakeLock mWakeLock; private boolean mWakeLockHeld; + private boolean mKeyguardOccluded; public ScrimController(LightBarController lightBarController, ScrimView scrimBehind, ScrimView scrimInFront, View headsUpScrim, Consumer<Integer> scrimVisibleListener, @@ -479,9 +480,13 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, mLightBarController.setScrimColor(mScrimInFront.getColors()); } - // We want to override the back scrim opacity for AOD + // We want to override the back scrim opacity for the AOD state // when it's time to fade the wallpaper away. - if (mState == ScrimState.AOD && mWallpaperVisibilityTimedOut) { + boolean aodWallpaperTimeout = mState == ScrimState.AOD && mWallpaperVisibilityTimedOut; + // We also want to hide FLAG_SHOW_WHEN_LOCKED activities under the scrim. + boolean occludedKeyguard = (mState == ScrimState.PULSING || mState == ScrimState.AOD) + && mKeyguardOccluded; + if (aodWallpaperTimeout || occludedKeyguard) { mCurrentBehindAlpha = 1; } @@ -925,6 +930,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, mExpansionAffectsAlpha = expansionAffectsAlpha; } + public void setKeyguardOccluded(boolean keyguardOccluded) { + mKeyguardOccluded = keyguardOccluded; + } + public interface Callback { default void onStart() { } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 5bc45cde6217..830fe45a3048 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -2042,6 +2042,7 @@ public class StatusBar extends SystemUI implements DemoMode, public void setOccluded(boolean occluded) { mIsOccluded = occluded; + mScrimController.setKeyguardOccluded(occluded); updateHideIconsForBouncer(false /* animate */); } 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 f088c0b0acf8..d32c9a8e5649 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 @@ -475,6 +475,19 @@ public class ScrimControllerTest extends SysuiTestCase { Assert.assertTrue("Should be focusable on keyguard", mScrimInFront.isFocusable()); } + @Test + public void testHidesShowWhenLockedActivity() { + mScrimController.setWallpaperSupportsAmbientMode(true); + mScrimController.setKeyguardOccluded(true); + mScrimController.transitionTo(ScrimState.AOD); + mScrimController.finishAnimationsImmediately(); + assertScrimVisibility(VISIBILITY_FULLY_TRANSPARENT, VISIBILITY_FULLY_OPAQUE); + + mScrimController.transitionTo(ScrimState.PULSING); + mScrimController.finishAnimationsImmediately(); + assertScrimVisibility(VISIBILITY_FULLY_TRANSPARENT, VISIBILITY_FULLY_OPAQUE); + } + /** * Conserves old notification density after leaving state and coming back. * diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java index 14baaeb292b3..f13fa4e51b78 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java @@ -30,6 +30,7 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -547,6 +548,16 @@ public class StatusBarTest extends SysuiTestCase { verify(mScrimController).transitionTo(eq(ScrimState.UNLOCKED), any()); } + @Test + public void testSetOccluded_propagatesToScrimController() { + mStatusBar.setOccluded(true); + verify(mScrimController).setKeyguardOccluded(eq(true)); + + reset(mScrimController); + mStatusBar.setOccluded(false); + verify(mScrimController).setKeyguardOccluded(eq(false)); + } + static class TestableStatusBar extends StatusBar { public TestableStatusBar(StatusBarKeyguardViewManager man, UnlockMethodCache unlock, KeyguardIndicationController key, |