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

Commit 06350626 authored by Danny Burakov's avatar Danny Burakov Committed by Android (Google) Code Review
Browse files

Merge "[bc25] Do not make the scrim opaque when Dual Shade is open." into main

parents d7e6d1b0 e71059c5
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ import com.android.systemui.scene.shared.flag.SceneContainerFlag;
import com.android.systemui.scene.shared.model.Scenes;
import com.android.systemui.scrim.ScrimView;
import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.shade.shared.flag.DualShade;
import com.android.systemui.shade.transition.LargeScreenShadeInterpolator;
import com.android.systemui.statusbar.notification.stack.ViewState;
import com.android.systemui.statusbar.policy.ConfigurationController;
@@ -87,6 +88,7 @@ import com.android.systemui.util.wakelock.WakeLock;
import com.android.systemui.wallpapers.data.repository.WallpaperRepository;

import kotlinx.coroutines.CoroutineDispatcher;
import kotlinx.coroutines.ExperimentalCoroutinesApi;

import java.io.PrintWriter;
import java.lang.annotation.Retention;
@@ -101,6 +103,7 @@ import javax.inject.Inject;
 * security method gets shown).
 */
@SysUISingleton
@ExperimentalCoroutinesApi
public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dumpable,
        CoreStartable {

@@ -999,7 +1002,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
            if (!mScreenOffAnimationController.shouldExpandNotifications()
                    && !mAnimatingPanelExpansionOnUnlock
                    && !occluding) {
                if (mTransparentScrimBackground) {
                if (mTransparentScrimBackground || DualShade.isEnabled()) {
                    mBehindAlpha = 0;
                    mNotificationsAlpha = 0;
                } else if (mClipsQsScrim) {
@@ -1051,7 +1054,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
                behindAlpha = 0f;
            }
            mInFrontAlpha = mState.getFrontAlpha();
            if (mClipsQsScrim) {
            if (DualShade.isEnabled() && mState == ScrimState.SHADE_LOCKED) {
                mBehindAlpha = 0;
                mNotificationsTint = Color.TRANSPARENT;
                mNotificationsAlpha = 0;
                mBehindTint = Color.TRANSPARENT;
            } else if (mClipsQsScrim) {
                mNotificationsAlpha = behindAlpha;
                mNotificationsTint = behindTint;
                mBehindAlpha = 1;
@@ -1105,8 +1113,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
    }

    private Pair<Integer, Float> calculateBackStateForState(ScrimState state) {
        // Either darken of make the scrim transparent when you
        // pull down the shade
        // Either darken or make the scrim transparent when pulling down the shade.
        float interpolatedFract = getInterpolatedFraction();

        float stateBehind = mClipsQsScrim ? state.getNotifAlpha() : state.getBehindAlpha();
@@ -1201,11 +1208,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
            return true;
        }

        if (mState == ScrimState.PULSING) {
            return true;
        }

        return false;
        return mState == ScrimState.PULSING;
    }

    /**
+111 −3
Original line number Diff line number Diff line
@@ -49,6 +49,8 @@ import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.testing.TestableLooper;
import android.testing.ViewUtils;
import android.util.MathUtils;
@@ -65,6 +67,7 @@ import com.android.systemui.SysuiTestCase;
import com.android.systemui.animation.ShadeInterpolation;
import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants;
import com.android.systemui.dock.DockManager;
import com.android.systemui.flags.EnableSceneContainer;
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository;
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor;
@@ -75,7 +78,9 @@ import com.android.systemui.keyguard.shared.model.TransitionStep;
import com.android.systemui.keyguard.ui.viewmodel.AlternateBouncerToGoneTransitionViewModel;
import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToGoneTransitionViewModel;
import com.android.systemui.kosmos.KosmosJavaAdapter;
import com.android.systemui.scene.shared.flag.SceneContainerFlag;
import com.android.systemui.scrim.ScrimView;
import com.android.systemui.shade.shared.flag.DualShade;
import com.android.systemui.shade.transition.LargeScreenShadeInterpolator;
import com.android.systemui.shade.transition.LinearLargeScreenShadeInterpolator;
import com.android.systemui.statusbar.policy.FakeConfigurationController;
@@ -309,7 +314,11 @@ public class ScrimControllerTest extends SysuiTestCase {
        mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(false);
        mTestScope.getTestScheduler().runCurrent();

        if (SceneContainerFlag.isEnabled()) {
            mScrimController.transitionTo(ScrimState.KEYGUARD);
        } else {
            mScrimController.legacyTransitionTo(ScrimState.KEYGUARD);
        }
        finishAnimationsImmediately();
    }

@@ -357,6 +366,47 @@ public class ScrimControllerTest extends SysuiTestCase {
        ));
    }

    @Test
    @EnableSceneContainer
    @DisableFlags(DualShade.FLAG_NAME)
    public void transitionToShadeLocked_sceneContainer_dualShadeOff() {
        mScrimController.transitionTo(SHADE_LOCKED);
        mScrimController.setQsPosition(1f, 0);
        finishAnimationsImmediately();

        assertScrimAlpha(Map.of(
                mNotificationsScrim, OPAQUE,
                mScrimInFront, TRANSPARENT,
                mScrimBehind, OPAQUE
        ));

        assertScrimTinted(Map.of(
                mScrimInFront, false,
                mScrimBehind, true
        ));
    }

    @Test
    @EnableSceneContainer
    @EnableFlags(DualShade.FLAG_NAME)
    public void transitionToShadeLocked_sceneContainer_dualShadeOn() {
        mScrimController.transitionTo(SHADE_LOCKED);
        mScrimController.setQsPosition(1f, 0);
        finishAnimationsImmediately();

        assertScrimAlpha(Map.of(
                mNotificationsScrim, TRANSPARENT,
                mScrimInFront, TRANSPARENT,
                mScrimBehind, TRANSPARENT
        ));

        assertScrimTinted(Map.of(
                mScrimInFront, false,
                mNotificationsScrim, false,
                mScrimBehind, false
        ));
    }

    @Test
    public void transitionToShadeLocked_clippingQs() {
        mScrimController.setClipsQsScrim(true);
@@ -996,6 +1046,64 @@ public class ScrimControllerTest extends SysuiTestCase {
                mScrimBehind, OPAQUE));
    }

    @Test
    @EnableSceneContainer
    @DisableFlags(DualShade.FLAG_NAME)
    public void transitionToUnlocked_sceneContainer_dualShadeOff() {
        mScrimController.setRawPanelExpansionFraction(0f);
        mScrimController.transitionTo(ScrimState.UNLOCKED);
        finishAnimationsImmediately();

        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mNotificationsScrim, TRANSPARENT,
                mScrimBehind, TRANSPARENT
        ));

        mScrimController.setRawPanelExpansionFraction(0.5f);
        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mNotificationsScrim, SEMI_TRANSPARENT,
                mScrimBehind, SEMI_TRANSPARENT
        ));

        mScrimController.setRawPanelExpansionFraction(1f);
        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mNotificationsScrim, OPAQUE,
                mScrimBehind, OPAQUE
        ));
    }

    @Test
    @EnableSceneContainer
    @EnableFlags(DualShade.FLAG_NAME)
    public void transitionToUnlocked_sceneContainer_dualShadeOn() {
        mScrimController.setRawPanelExpansionFraction(0f);
        mScrimController.transitionTo(ScrimState.UNLOCKED);
        finishAnimationsImmediately();

        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mNotificationsScrim, TRANSPARENT,
                mScrimBehind, TRANSPARENT
        ));

        mScrimController.setRawPanelExpansionFraction(0.5f);
        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mNotificationsScrim, TRANSPARENT,
                mScrimBehind, TRANSPARENT
        ));

        mScrimController.setRawPanelExpansionFraction(1f);
        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mNotificationsScrim, TRANSPARENT,
                mScrimBehind, TRANSPARENT
        ));
    }

    @Test
    public void transitionToUnlocked_nonClippedQs_followsLargeScreensInterpolator() {
        mScrimController.setClipsQsScrim(false);
@@ -2086,7 +2194,7 @@ public class ScrimControllerTest extends SysuiTestCase {
    }

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

    private void assertScrimTint(ScrimView scrim, boolean hasTint) {
@@ -2123,7 +2231,7 @@ public class ScrimControllerTest extends SysuiTestCase {
        if (!scrimToAlpha.containsKey(mNotificationsScrim)) {
            assertScrimAlpha(mNotificationsScrim, TRANSPARENT);
        }
        scrimToAlpha.forEach((scrimView, alpha) -> assertScrimAlpha(scrimView, alpha));
        scrimToAlpha.forEach(this::assertScrimAlpha);

        // When clipping, QS scrim should not affect combined visibility.
        if (mScrimController.getClipQsScrim() && scrimToAlpha.get(mScrimBehind) == OPAQUE) {