Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6a7110ec authored by Christian Göllner's avatar Christian Göllner
Browse files

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
parent ee0c2b11
Loading
Loading
Loading
Loading
+17 −9
Original line number Diff line number Diff line
@@ -790,20 +790,28 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
            if (!mScreenOffAnimationController.shouldExpandNotifications()
                    && !mAnimatingPanelExpansionOnUnlock
                    && !occluding) {
                if (mClipsQsScrim) {
                    float behindFraction = getInterpolatedFraction();
                    behindFraction = (float) Math.pow(behindFraction, 0.8f);
                if (mClipsQsScrim) {
                    mBehindAlpha = mTransparentScrimBackground ? 0 : 1;
                    mNotificationsAlpha =
                            mTransparentScrimBackground ? 0 : behindFraction * mDefaultScrimAlpha;
                } else {
                    mBehindAlpha =
                            mTransparentScrimBackground ? 0 : behindFraction * mDefaultScrimAlpha;
                    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
                    // view fade in. Otherwise the empty panel can be quite jarring.
                    mNotificationsAlpha = mTransparentScrimBackground
                            ? 0 : MathUtils.constrainedMap(0f, 1f, 0.3f, 0.75f,
                            mPanelExpansionFraction);
                        // 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;
+10 −2
Original line number Diff line number Diff line
@@ -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,