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

Commit d319fb00 authored by Michał Brzeziński's avatar Michał Brzeziński Committed by Android (Google) Code Review
Browse files

Merge "Fixing notifications background in split shade mode" into sc-dev

parents 556d84ca aaf78026
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -163,7 +163,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
    private final float mDefaultScrimAlpha;

    // Assuming the shade is expanded during initialization
    private float mExpansionFraction = 1f;
    private float mPanelExpansion = 1f;
    private float mQsExpansion;
    private boolean mQsBottomVisible;

@@ -487,8 +487,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
        if (isNaN(fraction)) {
            throw new IllegalArgumentException("Fraction should not be NaN");
        }
        if (mExpansionFraction != fraction) {
            mExpansionFraction = fraction;
        if (mPanelExpansion != fraction) {
            mPanelExpansion = fraction;

            boolean relevantState = (mState == ScrimState.UNLOCKED
                    || mState == ScrimState.KEYGUARD
@@ -641,7 +641,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
                mBehindTint = Color.BLACK;
            } else {
                mBehindAlpha = backAlpha;
                if (mState == ScrimState.SHADE_LOCKED) {
                    // going from KEYGUARD to SHADE_LOCKED state
                    mNotificationsAlpha = getInterpolatedFraction();
                } else {
                    mNotificationsAlpha = Math.max(1.0f - getInterpolatedFraction(), mQsExpansion);
                }
                mBehindTint = backTint;
            }
        }
@@ -805,7 +810,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
    }

    private float getInterpolatedFraction() {
        float frac = mExpansionFraction;
        float frac = mPanelExpansion;
        // let's start this 20% of the way down the screen
        frac = frac * 1.2f - 0.2f;
        if (frac <= 0) {
@@ -1165,7 +1170,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
        pw.print("  mDefaultScrimAlpha=");
        pw.println(mDefaultScrimAlpha);
        pw.print("  mExpansionFraction=");
        pw.println(mExpansionFraction);
        pw.println(mPanelExpansion);
    }

    public void setWallpaperSupportsAmbientMode(boolean wallpaperSupportsAmbientMode) {
+56 −21
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.systemui.statusbar.phone.ScrimController.OPAQUE;
import static com.android.systemui.statusbar.phone.ScrimController.SEMI_TRANSPARENT;
import static com.android.systemui.statusbar.phone.ScrimController.TRANSPARENT;

import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -165,7 +166,7 @@ public class ScrimControllerTest extends SysuiTestCase {
        endAnimation(mScrimInFront);
        endAnimation(mScrimForBubble);

        Assert.assertEquals("Animators did not finish",
        assertEquals("Animators did not finish",
                mAnimatorListener.getNumStarts(), mAnimatorListener.getNumEnds());
    }

@@ -422,7 +423,7 @@ public class ScrimControllerTest extends SysuiTestCase {
        mScrimController.transitionTo(ScrimState.AOD);
        finishAnimationsImmediately();
        mScrimController.setAodFrontScrimAlpha(0.3f);
        Assert.assertEquals(ScrimState.AOD.getFrontAlpha(), mScrimInFront.getViewAlpha(), 0.001f);
        assertEquals(ScrimState.AOD.getFrontAlpha(), mScrimInFront.getViewAlpha(), 0.001f);
        Assert.assertNotEquals(0.3f, mScrimInFront.getViewAlpha(), 0.001f);
    }

@@ -601,13 +602,13 @@ public class ScrimControllerTest extends SysuiTestCase {
        ));

        // Front scrim should be transparent
        Assert.assertEquals(ScrimController.TRANSPARENT,
        assertEquals(ScrimController.TRANSPARENT,
                mScrimInFront.getViewAlpha(), 0.0f);
        // Back scrim should be visible
        Assert.assertEquals(ScrimController.BUSY_SCRIM_ALPHA,
        assertEquals(ScrimController.BUSY_SCRIM_ALPHA,
                mScrimBehind.getViewAlpha(), 0.0f);
        // Bubble scrim should be visible
        Assert.assertEquals(ScrimController.BUBBLE_SCRIM_ALPHA,
        assertEquals(ScrimController.BUBBLE_SCRIM_ALPHA,
                mScrimForBubble.getViewAlpha(), 0.0f);
    }

@@ -615,15 +616,15 @@ public class ScrimControllerTest extends SysuiTestCase {
    public void scrimStateCallback() {
        mScrimController.transitionTo(ScrimState.UNLOCKED);
        finishAnimationsImmediately();
        Assert.assertEquals(mScrimState, ScrimState.UNLOCKED);
        assertEquals(mScrimState, ScrimState.UNLOCKED);

        mScrimController.transitionTo(ScrimState.BOUNCER);
        finishAnimationsImmediately();
        Assert.assertEquals(mScrimState, ScrimState.BOUNCER);
        assertEquals(mScrimState, ScrimState.BOUNCER);

        mScrimController.transitionTo(ScrimState.BOUNCER_SCRIMMED);
        finishAnimationsImmediately();
        Assert.assertEquals(mScrimState, ScrimState.BOUNCER_SCRIMMED);
        assertEquals(mScrimState, ScrimState.BOUNCER_SCRIMMED);
    }

    @Test
@@ -638,13 +639,13 @@ public class ScrimControllerTest extends SysuiTestCase {
        mScrimController.setPanelExpansion(1.0f);
        finishAnimationsImmediately();

        Assert.assertEquals("Scrim alpha should change after setPanelExpansion",
        assertEquals("Scrim alpha should change after setPanelExpansion",
                mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f);

        mScrimController.setPanelExpansion(0f);
        finishAnimationsImmediately();

        Assert.assertEquals("Scrim alpha should change after setPanelExpansion",
        assertEquals("Scrim alpha should change after setPanelExpansion",
                mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f);
    }

@@ -698,7 +699,7 @@ public class ScrimControllerTest extends SysuiTestCase {
        mScrimController.setExpansionAffectsAlpha(false);
        mScrimController.setPanelExpansion(0.8f);
        verifyZeroInteractions(mScrimBehind);
        Assert.assertEquals("Scrim opacity shouldn't change when setExpansionAffectsAlpha "
        assertEquals("Scrim opacity shouldn't change when setExpansionAffectsAlpha "
                + "is false", scrimAlpha, mScrimBehind.getViewAlpha(), 0.01f);

        mScrimController.setExpansionAffectsAlpha(true);
@@ -801,9 +802,9 @@ public class ScrimControllerTest extends SysuiTestCase {
            }
        });
        finishAnimationsImmediately();
        Assert.assertEquals("onStart called in wrong order", 1, callOrder[0]);
        Assert.assertEquals("onDisplayBlanked called in wrong order", 2, callOrder[1]);
        Assert.assertEquals("onFinished called in wrong order", 3, callOrder[2]);
        assertEquals("onStart called in wrong order", 1, callOrder[0]);
        assertEquals("onDisplayBlanked called in wrong order", 2, callOrder[1]);
        assertEquals("onFinished called in wrong order", 3, callOrder[2]);
    }

    @Test
@@ -911,7 +912,7 @@ public class ScrimControllerTest extends SysuiTestCase {
        mScrimController.transitionTo(ScrimState.UNLOCKED);
        finishAnimationsImmediately();

        Assert.assertEquals("Scrim expansion opacity wasn't conserved when transitioning back",
        assertEquals("Scrim expansion opacity wasn't conserved when transitioning back",
                expandedAlpha, mScrimBehind.getViewAlpha(), 0.01f);
    }

@@ -981,7 +982,7 @@ public class ScrimControllerTest extends SysuiTestCase {
            }
            mScrimController.transitionTo(state);
            finishAnimationsImmediately();
            Assert.assertEquals("Should be clickable unless AOD or PULSING, was: " + state,
            assertEquals("Should be clickable unless AOD or PULSING, was: " + state,
                    mScrimBehind.getViewAlpha() != 0 && !eatsTouches.contains(state),
                    mScrimBehind.isClickable());
        }
@@ -1035,9 +1036,9 @@ public class ScrimControllerTest extends SysuiTestCase {
        mScrimController.setQsPosition(0, 300);
        finishAnimationsImmediately();

        Assert.assertEquals("Behind scrim should be opaque",
        assertEquals("Behind scrim should be opaque",
                mScrimBehind.getViewAlpha(), 1, 0.0);
        Assert.assertEquals("Notifications scrim should be opaque",
        assertEquals("Notifications scrim should be opaque",
                mNotificationsScrim.getViewAlpha(), 1, 0.0);
    }

@@ -1093,6 +1094,40 @@ public class ScrimControllerTest extends SysuiTestCase {
                mNotificationsScrim, TRANSPARENT));
    }

    @Test
    public void testNotificationScrimVisible_afterOpeningShadeFromLockscreen() {
        mScrimController.setPanelExpansion(1);
        mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
        finishAnimationsImmediately();

        assertScrimAlpha(Map.of(
                mScrimBehind, OPAQUE,
                mNotificationsScrim, OPAQUE));
    }

    @Test
    public void testNotificationTransparency_followsPanelExpansionInShadeLockedState() {
        mScrimController.transitionTo(ScrimState.SHADE_LOCKED);

        assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.8f, /* expansion */ 0.8f);
        assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.2f, /* expansion */ 0.2f);
    }

    @Test
    public void testNotificationTransparency_inKeyguardState() {
        mScrimController.transitionTo(ScrimState.KEYGUARD);

        assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.2f, /* expansion */ 0.8f);
        assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.8f, /* expansion */ 0.2f);
    }

    private void assertAlphaAfterExpansion(ScrimView scrim, float expectedAlpha, float expansion) {
        mScrimController.setPanelExpansion(expansion);
        finishAnimationsImmediately();
        // alpha is not changing linearly thus 0.2 of leeway when asserting
        assertEquals(expectedAlpha, mNotificationsScrim.getViewAlpha(), 0.2);
    }

    private void assertScrimTinted(Map<ScrimView, Boolean> scrimToTint) {
        scrimToTint.forEach((scrim, hasTint) -> assertScrimTint(scrim, hasTint));
    }
@@ -1101,7 +1136,7 @@ public class ScrimControllerTest extends SysuiTestCase {
        String message = "Tint test failed at state " + mScrimController.getState()
                + " with scrim: " + getScrimName(scrim) + " and tint: "
                + Integer.toHexString(scrim.getTint());
        Assert.assertEquals(message, hasTint, scrim.getTint() != Color.TRANSPARENT);
        assertEquals(message, hasTint, scrim.getTint() != Color.TRANSPARENT);
    }

    private String getScrimName(ScrimView scrim) {
@@ -1146,13 +1181,13 @@ public class ScrimControllerTest extends SysuiTestCase {
        } else {
            visibility = TRANSPARENT;
        }
        Assert.assertEquals("Invalid visibility.",
        assertEquals("Invalid visibility.",
                visibility /* expected */,
                mScrimVisibility);
    }

    private void assertScrimAlpha(ScrimView scrim, int expectedAlpha) {
        Assert.assertEquals("Unexpected " + getScrimName(scrim) + " scrim alpha: "
        assertEquals("Unexpected " + getScrimName(scrim) + " scrim alpha: "
                        + scrim.getViewAlpha(),
                expectedAlpha != TRANSPARENT /* expected */,
                scrim.getViewAlpha() > TRANSPARENT /* actual */);