Large screens: fully fade in behind scrim before anything else on shade

Before, elements of the shade were starting to fade in, before the
behind scrim was fully faded in.
This made it possible to see the launcher and notifications at the same
time for example.

The fix is to fully fade in the behind earlier.

Test: ScrimControllerTest.java
Test: Manually on-device. See videos.
Fixes: 247119667
Fixes: 265402313
Change-Id: I54475061d530d076a0b2f11a7e23e689e3cccb5e
This commit is contained in:
Christian Göllner
2023-01-18 13:52:13 +01:00
parent ee0c2b11c0
commit 6a7110ec97
2 changed files with 27 additions and 11 deletions

View File

@@ -790,20 +790,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;

View File

@@ -629,6 +629,7 @@ public class ScrimControllerTest extends SysuiTestCase {
@Test
public void transitionToUnlocked() {
mScrimController.setClipsQsScrim(false);
mScrimController.setRawPanelExpansionFraction(0f);
mScrimController.transitionTo(ScrimState.UNLOCKED);
finishAnimationsImmediately();
@@ -644,14 +645,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,