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 f784723860063..80093a3da3255 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -791,20 +791,28 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump if (!mScreenOffAnimationController.shouldExpandNotifications() && !mAnimatingPanelExpansionOnUnlock && !occluding) { - float behindFraction = getInterpolatedFraction(); - behindFraction = (float) Math.pow(behindFraction, 0.8f); if (mClipsQsScrim) { + float behindFraction = getInterpolatedFraction(); + behindFraction = (float) Math.pow(behindFraction, 0.8f); mBehindAlpha = mTransparentScrimBackground ? 0 : 1; mNotificationsAlpha = mTransparentScrimBackground ? 0 : behindFraction * mDefaultScrimAlpha; } else { - mBehindAlpha = - mTransparentScrimBackground ? 0 : behindFraction * mDefaultScrimAlpha; - // Delay fade-in of notification scrim a bit further, to coincide with the - // view fade in. Otherwise the empty panel can be quite jarring. - mNotificationsAlpha = mTransparentScrimBackground - ? 0 : MathUtils.constrainedMap(0f, 1f, 0.3f, 0.75f, - mPanelExpansionFraction); + if (mTransparentScrimBackground) { + mBehindAlpha = 0; + mNotificationsAlpha = 0; + } else { + // Behind scrim will finish fading in at 30% expansion. + float behindFraction = MathUtils + .constrainedMap(0f, 1f, 0f, 0.3f, mPanelExpansionFraction); + mBehindAlpha = behindFraction * mDefaultScrimAlpha; + // Delay fade-in of notification scrim a bit further, to coincide with the + // behind scrim finishing fading in. + // Also to coincide with the view starting to fade in, otherwise the empty + // panel can be quite jarring. + mNotificationsAlpha = MathUtils + .constrainedMap(0f, 1f, 0.3f, 0.75f, mPanelExpansionFraction); + } } mBehindTint = mState.getBehindTint(); mInFrontAlpha = 0; 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 c7a0582f00070..c0537a6dc4cfd 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 @@ -630,6 +630,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void transitionToUnlocked() { + mScrimController.setClipsQsScrim(false); mScrimController.setRawPanelExpansionFraction(0f); mScrimController.transitionTo(ScrimState.UNLOCKED); finishAnimationsImmediately(); @@ -645,14 +646,21 @@ public class ScrimControllerTest extends SysuiTestCase { )); // Back scrim should be visible after start dragging - mScrimController.setRawPanelExpansionFraction(0.3f); + mScrimController.setRawPanelExpansionFraction(0.29f); assertScrimAlpha(Map.of( mScrimInFront, TRANSPARENT, mNotificationsScrim, TRANSPARENT, mScrimBehind, SEMI_TRANSPARENT)); + // Back scrim should be opaque at 30% + mScrimController.setRawPanelExpansionFraction(0.3f); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mNotificationsScrim, TRANSPARENT, + mScrimBehind, OPAQUE)); + // Then, notification scrim should fade in - mScrimController.setRawPanelExpansionFraction(0.7f); + mScrimController.setRawPanelExpansionFraction(0.31f); assertScrimAlpha(Map.of( mScrimInFront, TRANSPARENT, mNotificationsScrim, SEMI_TRANSPARENT,