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

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

Merge "Fixing tiles on lockscreen and scrims transitions with QS expanded" into tm-dev

parents ce680c76 11844145
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -4712,6 +4712,11 @@ public class NotificationPanelViewController extends PanelViewController {
                    duration = StackStateAnimator.ANIMATION_DURATION_STANDARD;
                }
                mKeyguardStatusBarViewController.animateKeyguardStatusBarOut(startDelay, duration);
                if (mSplitShadeEnabled) {
                    // temporary workaround for QS height not being updated during lockscreen to
                    // shade transition
                    setQsExpanded(true);
                }
                updateQSMinHeight();
            } else if (oldState == StatusBarState.SHADE_LOCKED
                    && statusBarState == KEYGUARD) {
+11 −1
Original line number Diff line number Diff line
@@ -906,9 +906,19 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
        }
        if (mQsExpansion > 0) {
            behindAlpha = MathUtils.lerp(behindAlpha, mDefaultScrimAlpha, mQsExpansion);
            float tintProgress = mQsExpansion;
            if (mStatusBarKeyguardViewManager.isBouncerInTransit()) {
                // this is case of - on lockscreen - going from expanded QS to bouncer.
                // Because mQsExpansion is already interpolated and transition between tints
                // is too slow, we want to speed it up and make it more aligned to bouncer
                // showing up progress. This issue is visible on large screens, both portrait and
                // split shade because then transition is between very different tints
                tintProgress = BouncerPanelExpansionCalculator
                        .showBouncerProgress(mPanelExpansionFraction);
            }
            int stateTint = mClipsQsScrim ? ScrimState.SHADE_LOCKED.getNotifTint()
                    : ScrimState.SHADE_LOCKED.getBehindTint();
            behindTint = ColorUtils.blendARGB(behindTint, stateTint, mQsExpansion);
            behindTint = ColorUtils.blendARGB(behindTint, stateTint, tintProgress);
        }

        // If the keyguard is going away, we should not be opaque.
+43 −16
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ package com.android.systemui.statusbar.phone;
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 com.android.systemui.statusbar.phone.ScrimState.BOUNCER;
import static com.android.systemui.statusbar.phone.ScrimState.SHADE_LOCKED;

import static com.google.common.truth.Truth.assertThat;

@@ -275,7 +277,7 @@ public class ScrimControllerTest extends SysuiTestCase {

    @Test
    public void transitionToShadeLocked() {
        mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
        mScrimController.transitionTo(SHADE_LOCKED);
        mScrimController.setQsPosition(1f, 0);
        finishAnimationsImmediately();

@@ -293,7 +295,7 @@ public class ScrimControllerTest extends SysuiTestCase {
    @Test
    public void transitionToShadeLocked_clippingQs() {
        mScrimController.setClipsQsScrim(true);
        mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
        mScrimController.transitionTo(SHADE_LOCKED);
        mScrimController.setQsPosition(1f, 0);
        finishAnimationsImmediately();

@@ -542,7 +544,7 @@ public class ScrimControllerTest extends SysuiTestCase {

    @Test
    public void transitionToKeyguardBouncer() {
        mScrimController.transitionTo(ScrimState.BOUNCER);
        mScrimController.transitionTo(BOUNCER);
        finishAnimationsImmediately();
        // Front scrim should be transparent
        // Back scrim should be visible without tint
@@ -561,7 +563,7 @@ public class ScrimControllerTest extends SysuiTestCase {
    @Test
    public void transitionToKeyguardBouncer_clippingQs() {
        mScrimController.setClipsQsScrim(true);
        mScrimController.transitionTo(ScrimState.BOUNCER);
        mScrimController.transitionTo(BOUNCER);
        finishAnimationsImmediately();
        // Front scrim should be transparent
        // Back scrim should be clipping QS
@@ -581,7 +583,7 @@ public class ScrimControllerTest extends SysuiTestCase {
    @Test
    public void disableClipQsScrimWithoutStateTransition_updatesTintAndAlpha() {
        mScrimController.setClipsQsScrim(true);
        mScrimController.transitionTo(ScrimState.BOUNCER);
        mScrimController.transitionTo(BOUNCER);

        mScrimController.setClipsQsScrim(false);

@@ -602,7 +604,7 @@ public class ScrimControllerTest extends SysuiTestCase {
    @Test
    public void enableClipQsScrimWithoutStateTransition_updatesTintAndAlpha() {
        mScrimController.setClipsQsScrim(false);
        mScrimController.transitionTo(ScrimState.BOUNCER);
        mScrimController.transitionTo(BOUNCER);

        mScrimController.setClipsQsScrim(true);

@@ -672,9 +674,9 @@ public class ScrimControllerTest extends SysuiTestCase {
        finishAnimationsImmediately();
        assertEquals(mScrimState, ScrimState.UNLOCKED);

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

        mScrimController.transitionTo(ScrimState.BOUNCER_SCRIMMED);
        finishAnimationsImmediately();
@@ -1081,9 +1083,9 @@ public class ScrimControllerTest extends SysuiTestCase {
        HashSet<ScrimState> lowPowerModeStates = new HashSet<>(Arrays.asList(
                ScrimState.OFF, ScrimState.AOD, ScrimState.PULSING));
        HashSet<ScrimState> regularStates = new HashSet<>(Arrays.asList(
                ScrimState.UNINITIALIZED, ScrimState.KEYGUARD, ScrimState.BOUNCER,
                ScrimState.UNINITIALIZED, ScrimState.KEYGUARD, BOUNCER,
                ScrimState.DREAMING, ScrimState.BOUNCER_SCRIMMED, ScrimState.BRIGHTNESS_MIRROR,
                ScrimState.UNLOCKED, ScrimState.SHADE_LOCKED, ScrimState.AUTH_SCRIMMED,
                ScrimState.UNLOCKED, SHADE_LOCKED, ScrimState.AUTH_SCRIMMED,
                ScrimState.AUTH_SCRIMMED_SHADE));

        for (ScrimState state : ScrimState.values()) {
@@ -1228,7 +1230,7 @@ public class ScrimControllerTest extends SysuiTestCase {
    @Test
    public void testNotificationScrimVisible_afterOpeningShadeFromLockscreen() {
        mScrimController.setRawPanelExpansionFraction(1);
        mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
        mScrimController.transitionTo(SHADE_LOCKED);
        finishAnimationsImmediately();

        assertScrimAlpha(Map.of(
@@ -1236,11 +1238,27 @@ public class ScrimControllerTest extends SysuiTestCase {
                mNotificationsScrim, OPAQUE));
    }

    @Test
    public void qsExpansion_BehindTint_shadeLocked_bouncerActive_usesBouncerProgress() {
        when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true);
        // clipping doesn't change tested logic but allows to assert scrims more in line with
        // their expected large screen behaviour
        mScrimController.setClipsQsScrim(false);
        mScrimController.transitionTo(SHADE_LOCKED);

        mScrimController.setQsPosition(1f, 100 /* value doesn't matter */);
        assertTintAfterExpansion(mScrimBehind, SHADE_LOCKED.getBehindTint(), /* expansion= */ 1f);

        mScrimController.setQsPosition(0.8f, 100 /* value doesn't matter */);
        // panel expansion of 0.6 means its fully transitioned with bouncer progress interpolation
        assertTintAfterExpansion(mScrimBehind, BOUNCER.getBehindTint(), /* expansion= */ 0.6f);
    }

    @Test
    public void expansionNotificationAlpha_shadeLocked_bouncerActive_usesBouncerInterpolator() {
        when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true);

        mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
        mScrimController.transitionTo(SHADE_LOCKED);

        float expansion = 0.8f;
        float expectedAlpha =
@@ -1256,7 +1274,7 @@ public class ScrimControllerTest extends SysuiTestCase {
    public void expansionNotificationAlpha_shadeLocked_bouncerNotActive_usesShadeInterpolator() {
        when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false);

        mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
        mScrimController.transitionTo(SHADE_LOCKED);

        float expansion = 0.8f;
        float expectedAlpha = ShadeInterpolation.getNotificationScrimAlpha(expansion);
@@ -1352,7 +1370,7 @@ public class ScrimControllerTest extends SysuiTestCase {

    @Test
    public void testNotificationTransparency_followsTransitionToFullShade() {
        mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
        mScrimController.transitionTo(SHADE_LOCKED);
        mScrimController.setRawPanelExpansionFraction(1.0f);
        finishAnimationsImmediately();
        float shadeLockedAlpha = mNotificationsScrim.getViewAlpha();
@@ -1379,7 +1397,7 @@ public class ScrimControllerTest extends SysuiTestCase {

    @Test
    public void notificationTransparency_followsNotificationScrimProgress() {
        mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
        mScrimController.transitionTo(SHADE_LOCKED);
        mScrimController.setRawPanelExpansionFraction(1.0f);
        finishAnimationsImmediately();
        mScrimController.transitionTo(ScrimState.KEYGUARD);
@@ -1473,7 +1491,7 @@ public class ScrimControllerTest extends SysuiTestCase {
                mScrimBehind, TRANSPARENT,
                mNotificationsScrim, TRANSPARENT));

        mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
        mScrimController.transitionTo(SHADE_LOCKED);
        finishAnimationsImmediately();
        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
@@ -1504,6 +1522,15 @@ public class ScrimControllerTest extends SysuiTestCase {
        assertEquals(expectedAlpha, scrim.getViewAlpha(), 0.2);
    }

    private void assertTintAfterExpansion(ScrimView scrim, int expectedTint, float expansion) {
        String message = "Tint test failed with expected scrim tint: "
                + Integer.toHexString(expectedTint) + " and actual tint: "
                + Integer.toHexString(scrim.getTint()) + " for scrim: " + getScrimName(scrim);
        mScrimController.setRawPanelExpansionFraction(expansion);
        finishAnimationsImmediately();
        assertEquals(message, expectedTint, scrim.getTint(), 0.1);
    }

    private void assertScrimTinted(Map<ScrimView, Boolean> scrimToTint) {
        scrimToTint.forEach((scrim, hasTint) -> assertScrimTint(scrim, hasTint));
    }