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

Commit 0caa9a4d authored by Matt Pietal's avatar Matt Pietal
Browse files

Remove legacy ambient wallpaper support

It hasn't worked in years, and will be unsupported in the
near future.

Fixes: 373837170
Test: atest ScrimControllerTest
Flag: EXEMPT legacy code removal
Change-Id: I2e16f9ee90a96a6a9b06026606971da73d32a84a
parent d23e8834
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -50,7 +50,6 @@ import com.android.systemui.shortcut.ShortcutKeyDispatcher
import com.android.systemui.statusbar.ImmersiveModeConfirmation
import com.android.systemui.statusbar.gesture.GesturePointerEventListener
import com.android.systemui.statusbar.notification.InstantAppNotifier
import com.android.systemui.statusbar.phone.ScrimController
import com.android.systemui.statusbar.phone.StatusBarHeadsUpChangeListener
import com.android.systemui.statusbar.policy.BatteryControllerStartable
import com.android.systemui.stylus.StylusUsiPowerStartable
@@ -286,11 +285,6 @@ abstract class SystemUICoreStartableModule {
    @ClassKey(KeyguardViewConfigurator::class)
    abstract fun bindKeyguardViewConfigurator(impl: KeyguardViewConfigurator): CoreStartable

    @Binds
    @IntoMap
    @ClassKey(ScrimController::class)
    abstract fun bindScrimController(impl: ScrimController): CoreStartable

    @Binds
    @IntoMap
    @ClassKey(StatusBarHeadsUpChangeListener::class)
+0 −14
Original line number Diff line number Diff line
@@ -1002,7 +1002,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
                mStatusBarKeyguardViewManager,
                getNotificationShadeWindowViewController(),
                mAmbientIndicationContainer);
        updateLightRevealScrimVisibility();

        mConfigurationController.addCallback(mConfigurationListener);

@@ -1291,7 +1290,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        });

        mScreenOffAnimationController.initialize(this, mShadeSurface, mLightRevealScrim);
        updateLightRevealScrimVisibility();

        if (!SceneContainerFlag.isEnabled()) {
            mShadeSurface.initDependencies(
@@ -2866,7 +2864,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        } else {
            mScrimController.legacyTransitionTo(ScrimState.UNLOCKED, mUnlockScrimCallback);
        }
        updateLightRevealScrimVisibility();

        Trace.endSection();
    }
@@ -2988,17 +2985,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        return mStatusBarModeRepository.getDefaultDisplay().isTransientShown().getValue();
    }

    private void updateLightRevealScrimVisibility() {
        if (mLightRevealScrim == null) {
            // status bar may not be inflated yet
            return;
        }

        if (!lightRevealMigration()) {
            mLightRevealScrim.setAlpha(mScrimController.getState().getMaxLightRevealScrimAlpha());
        }
    }

    private final KeyguardUpdateMonitorCallback mUpdateCallback =
            new KeyguardUpdateMonitorCallback() {
                @Override
+2 −88
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.annotation.IntDef;
import android.app.AlarmManager;
import android.graphics.Color;
import android.os.Handler;
import android.os.Trace;
@@ -53,8 +52,6 @@ import com.android.keyguard.BouncerPanelExpansionCalculator;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.settingslib.Utils;
import com.android.systemui.CoreStartable;
import com.android.systemui.DejankUtils;
import com.android.systemui.Dumpable;
import com.android.systemui.animation.ShadeInterpolation;
import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants;
@@ -81,11 +78,9 @@ import com.android.systemui.shade.transition.LargeScreenShadeInterpolator;
import com.android.systemui.statusbar.notification.stack.ViewState;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.AlarmTimeout;
import com.android.systemui.util.kotlin.JavaAdapter;
import com.android.systemui.util.wakelock.DelayedWakeLock;
import com.android.systemui.util.wakelock.WakeLock;
import com.android.systemui.wallpapers.data.repository.WallpaperRepository;

import kotlinx.coroutines.CoroutineDispatcher;
import kotlinx.coroutines.ExperimentalCoroutinesApi;
@@ -104,8 +99,7 @@ import javax.inject.Inject;
 */
@SysUISingleton
@ExperimentalCoroutinesApi
public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dumpable,
        CoreStartable {
public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dumpable {

    static final String TAG = "ScrimController";
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@@ -217,7 +211,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private final DozeParameters mDozeParameters;
    private final DockManager mDockManager;
    private final AlarmTimeout mTimeTicker;
    private final KeyguardVisibilityCallback mKeyguardVisibilityCallback;
    private final Handler mHandler;
    private final Executor mMainExecutor;
@@ -232,7 +225,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump

    private float mAdditionalScrimBehindAlphaKeyguard = 0f;
    // Combined scrim behind keyguard alpha of default scrim + additional scrim
    // (if wallpaper dimming is applied).
    private float mScrimBehindAlphaKeyguard = KEYGUARD_SCRIM_ALPHA;
    private final float mDefaultScrimAlpha;

@@ -261,7 +253,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
    private int mBehindTint;
    private int mNotificationsTint;

    private boolean mWallpaperVisibilityTimedOut;
    private int mScrimsVisibility;
    private final TriConsumer<ScrimState, Float, GradientColors> mScrimStateListener;
    private final LargeScreenShadeInterpolator mLargeScreenShadeInterpolator;
@@ -269,7 +260,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
    private boolean mBlankScreen;
    private boolean mScreenBlankingCallbackCalled;
    private Callback mCallback;
    private boolean mWallpaperSupportsAmbientMode;
    private boolean mScreenOn;
    private boolean mTransparentScrimBackground;

@@ -282,7 +272,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
    private boolean mKeyguardOccluded;

    private KeyguardTransitionInteractor mKeyguardTransitionInteractor;
    private final WallpaperRepository mWallpaperRepository;
    private CoroutineDispatcher mMainDispatcher;
    private boolean mIsBouncerToGoneTransitionRunning = false;
    private PrimaryBouncerToGoneTransitionViewModel mPrimaryBouncerToGoneTransitionViewModel;
@@ -332,7 +321,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
    public ScrimController(
            LightBarController lightBarController,
            DozeParameters dozeParameters,
            AlarmManager alarmManager,
            KeyguardStateController keyguardStateController,
            DelayedWakeLock.Factory delayedWakeLockFactory,
            Handler handler,
@@ -348,7 +336,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
            AlternateBouncerToGoneTransitionViewModel alternateBouncerToGoneTransitionViewModel,
            KeyguardTransitionInteractor keyguardTransitionInteractor,
            KeyguardInteractor keyguardInteractor,
            WallpaperRepository wallpaperRepository,
            @Main CoroutineDispatcher mainDispatcher,
            LargeScreenShadeInterpolator largeScreenShadeInterpolator) {
        mScrimStateListener = lightBarController::setScrimState;
@@ -363,8 +350,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
        mMainExecutor = mainExecutor;
        mJavaAdapter = javaAdapter;
        mScreenOffAnimationController = screenOffAnimationController;
        mTimeTicker = new AlarmTimeout(alarmManager, this::onHideWallpaperTimeout,
                "hide_aod_wallpaper", mHandler);
        mWakeLock = delayedWakeLockFactory.create("Scrims");
        // Scrim alpha is initially set to the value on the resource but might be changed
        // to make sure that text on top of it is legible.
@@ -395,17 +380,9 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
        mAlternateBouncerToGoneTransitionViewModel = alternateBouncerToGoneTransitionViewModel;
        mKeyguardTransitionInteractor = keyguardTransitionInteractor;
        mKeyguardInteractor = keyguardInteractor;
        mWallpaperRepository = wallpaperRepository;
        mMainDispatcher = mainDispatcher;
    }

    @Override
    public void start() {
        mJavaAdapter.alwaysCollectFlow(
                mWallpaperRepository.getWallpaperSupportsAmbientMode(),
                this::setWallpaperSupportsAmbientMode);
    }

    /**
     * Attach the controller to the supplied views.
     */
@@ -627,18 +604,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
            holdWakeLock();
        }

        // AOD wallpapers should fade away after a while.
        // Docking pulses may take a long time, wallpapers should also fade away after a while.
        mWallpaperVisibilityTimedOut = false;
        if (shouldFadeAwayWallpaper()) {
            DejankUtils.postAfterTraversal(() -> {
                mTimeTicker.schedule(mDozeParameters.getWallpaperAodDuration(),
                        AlarmTimeout.MODE_IGNORE_IF_SCHEDULED);
            });
        } else {
            DejankUtils.postAfterTraversal(mTimeTicker::cancel);
        }

        if (mKeyguardUpdateMonitor.needsSlowUnlockTransition() && mState == ScrimState.UNLOCKED) {
            mAnimationDelay = CentralSurfaces.FADE_KEYGUARD_START_DELAY;
            scheduleUpdate();
@@ -657,19 +622,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
        dispatchBackScrimState(mScrimBehind.getViewAlpha());
    }

    private boolean shouldFadeAwayWallpaper() {
        if (!mWallpaperSupportsAmbientMode) {
            return false;
        }

        if (mState == ScrimState.AOD
                && (mDozeParameters.getAlwaysOn() || mDockManager.isDocked())) {
            return true;
        }

        return false;
    }

    public ScrimState getState() {
        return mState;
    }
@@ -728,19 +680,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
        }
    }

    @VisibleForTesting
    protected void onHideWallpaperTimeout() {
        if (mState != ScrimState.AOD && mState != ScrimState.PULSING) {
            return;
        }

        holdWakeLock();
        mWallpaperVisibilityTimedOut = true;
        mAnimateChange = true;
        mAnimationDuration = mDozeParameters.getWallpaperFadeOutDuration();
        scheduleUpdate();
    }

    private void holdWakeLock() {
        if (!mWakeLockHeld) {
            if (mWakeLock != null) {
@@ -1171,16 +1110,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
        setOrAdaptCurrentAnimation(mNotificationsScrim);
        setOrAdaptCurrentAnimation(mScrimInFront);
        dispatchBackScrimState(mScrimBehind.getViewAlpha());

        // Reset wallpaper timeout if it's already timeout like expanding panel while PULSING
        // and docking.
        if (mWallpaperVisibilityTimedOut) {
            mWallpaperVisibilityTimedOut = false;
            DejankUtils.postAfterTraversal(() -> {
                mTimeTicker.schedule(mDozeParameters.getWallpaperAodDuration(),
                        AlarmTimeout.MODE_IGNORE_IF_SCHEDULED);
            });
        }
    }

    /**
@@ -1259,15 +1188,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
            dispatchBackScrimState(mScrimBehind.getViewAlpha());
        }

        // We want to override the back scrim opacity for the AOD state
        // when it's time to fade the wallpaper away.
        boolean aodWallpaperTimeout = (mState == ScrimState.AOD || mState == ScrimState.PULSING)
                && mWallpaperVisibilityTimedOut;
        // We also want to hide FLAG_SHOW_WHEN_LOCKED activities under the scrim.
        boolean hideFlagShowWhenLockedActivities =
                (mState == ScrimState.PULSING || mState == ScrimState.AOD)
                && mKeyguardOccluded;
        if (aodWallpaperTimeout || hideFlagShowWhenLockedActivities) {
        if (hideFlagShowWhenLockedActivities) {
            mBehindAlpha = 1;
        }
        // Prevent notification scrim flicker when transitioning away from keyguard.
@@ -1668,17 +1593,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
        pw.println(mPanelExpansionFraction);
        pw.print("  mExpansionAffectsAlpha=");
        pw.println(mExpansionAffectsAlpha);

        pw.print("  mState.getMaxLightRevealScrimAlpha=");
        pw.println(mState.getMaxLightRevealScrimAlpha());
    }

    private void setWallpaperSupportsAmbientMode(boolean wallpaperSupportsAmbientMode) {
        mWallpaperSupportsAmbientMode = wallpaperSupportsAmbientMode;
        ScrimState[] states = ScrimState.values();
        for (int i = 0; i < states.length; i++) {
            states[i].setWallpaperSupportsAmbientMode(wallpaperSupportsAmbientMode);
        }
    }

    /**
+0 −19
Original line number Diff line number Diff line
@@ -208,11 +208,6 @@ public enum ScrimState {
            }
        }

        @Override
        public float getMaxLightRevealScrimAlpha() {
            return mWallpaperSupportsAmbientMode ? 0f : 1f;
        }

        @Override
        public boolean isLowPowerState() {
            return true;
@@ -237,11 +232,6 @@ public enum ScrimState {
            mAnimationDuration = mWakeLockScreenSensorActive
                    ? ScrimController.ANIMATION_DURATION_LONG : ScrimController.ANIMATION_DURATION;
        }
        @Override
        public float getMaxLightRevealScrimAlpha() {
            return mWakeLockScreenSensorActive ? ScrimController.WAKE_SENSOR_SCRIM_ALPHA
                    : AOD.getMaxLightRevealScrimAlpha();
        }
    },

    /**
@@ -368,7 +358,6 @@ public enum ScrimState {
    DozeParameters mDozeParameters;
    DockManager mDockManager;
    boolean mDisplayRequiresBlanking;
    boolean mWallpaperSupportsAmbientMode;
    boolean mLaunchingAffordanceWithPreview;
    boolean mOccludeAnimationPlaying;
    boolean mWakeLockScreenSensorActive;
@@ -407,10 +396,6 @@ public enum ScrimState {
        return mBehindAlpha;
    }

    public float getMaxLightRevealScrimAlpha() {
        return 1f;
    }

    public float getNotifAlpha() {
        return mNotifAlpha;
    }
@@ -472,10 +457,6 @@ public enum ScrimState {
        mSurfaceColor = surfaceColor;
    }

    public void setWallpaperSupportsAmbientMode(boolean wallpaperSupportsAmbientMode) {
        mWallpaperSupportsAmbientMode = wallpaperSupportsAmbientMode;
    }

    public void setLaunchingAffordanceWithPreview(boolean launchingAffordanceWithPreview) {
        mLaunchingAffordanceWithPreview = launchingAffordanceWithPreview;
    }
+0 −139
Original line number Diff line number Diff line
@@ -44,7 +44,6 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;

import android.animation.Animator;
import android.app.AlarmManager;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
@@ -90,7 +89,6 @@ import com.android.systemui.util.kotlin.JavaAdapter;
import com.android.systemui.util.time.FakeSystemClock;
import com.android.systemui.util.wakelock.DelayedWakeLock;
import com.android.systemui.utils.os.FakeHandler;
import com.android.systemui.wallpapers.data.repository.FakeWallpaperRepository;

import com.google.common.truth.Expect;

@@ -139,7 +137,6 @@ public class ScrimControllerTest extends SysuiTestCase {
    private boolean mAlwaysOnEnabled;
    private TestableLooper mLooper;
    private Context mContext;
    @Mock private AlarmManager mAlarmManager;
    @Mock private DozeParameters mDozeParameters;
    @Mock private LightBarController mLightBarController;
    @Mock private DelayedWakeLock.Factory mDelayedWakeLockFactory;
@@ -157,7 +154,6 @@ public class ScrimControllerTest extends SysuiTestCase {
    private final FakeKeyguardTransitionRepository mKeyguardTransitionRepository =
            mKosmos.getKeyguardTransitionRepository();
    @Mock private KeyguardInteractor mKeyguardInteractor;
    private final FakeWallpaperRepository mWallpaperRepository = new FakeWallpaperRepository();
    @Mock private TypedArray mMockTypedArray;

    // TODO(b/204991468): Use a real PanelExpansionStateManager object once this bug is fixed. (The
@@ -282,7 +278,6 @@ public class ScrimControllerTest extends SysuiTestCase {
        mScrimController = new ScrimController(
                mLightBarController,
                mDozeParameters,
                mAlarmManager,
                mKeyguardStateController,
                mDelayedWakeLockFactory,
                new FakeHandler(mLooper.getLooper()),
@@ -298,10 +293,8 @@ public class ScrimControllerTest extends SysuiTestCase {
                mAlternateBouncerToGoneTransitionViewModel,
                mKeyguardTransitionInteractor,
                mKeyguardInteractor,
                mWallpaperRepository,
                mKosmos.getTestDispatcher(),
                mLinearLargeScreenShadeInterpolator);
        mScrimController.start();
        mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible);
        mScrimController.attachViews(mScrimBehind, mNotificationsScrim, mScrimInFront);
        mScrimController.setAnimatorListener(mAnimatorListener);
@@ -309,7 +302,6 @@ public class ScrimControllerTest extends SysuiTestCase {
        // Attach behind scrim so flows that are collecting on it start running.
        ViewUtils.attachView(mScrimBehind);

        mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(false);
        mTestScope.getTestScheduler().runCurrent();

        if (SceneContainerFlag.isEnabled()) {
@@ -436,8 +428,6 @@ public class ScrimControllerTest extends SysuiTestCase {
                mScrimInFront, true,
                mScrimBehind, true
        ));

        assertEquals(1f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f);
    }

    @Test
@@ -449,37 +439,12 @@ public class ScrimControllerTest extends SysuiTestCase {
                mScrimInFront, TRANSPARENT,
                mScrimBehind, TRANSPARENT,
                mNotificationsScrim, TRANSPARENT));
        assertEquals(1f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f);

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

    @Test
    public void transitionToAod_withAodWallpaper() {
        mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(true);
        mTestScope.getTestScheduler().runCurrent();

        mScrimController.legacyTransitionTo(ScrimState.AOD);
        finishAnimationsImmediately();

        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mScrimBehind, TRANSPARENT));
        assertEquals(0f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f);

        // Pulsing notification should conserve AOD wallpaper.
        mScrimController.legacyTransitionTo(ScrimState.PULSING);
        finishAnimationsImmediately();

        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mScrimBehind, TRANSPARENT));
        assertEquals(0f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f);
    }

    @Test
    public void transitionToAod_withFrontAlphaUpdates() {
        // Assert that setting the AOD front scrim alpha doesn't take effect in a non-AOD state.
@@ -497,14 +462,12 @@ public class ScrimControllerTest extends SysuiTestCase {
        assertScrimAlpha(Map.of(
                mScrimInFront, SEMI_TRANSPARENT,
                mScrimBehind, TRANSPARENT));
        assertEquals(1f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f);

        // ... and that if we set it while we're in AOD, it does take immediate effect.
        mScrimController.setAodFrontScrimAlpha(1f);
        assertScrimAlpha(Map.of(
                mScrimInFront, OPAQUE,
                mScrimBehind, TRANSPARENT));
        assertEquals(1f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f);

        // ... and make sure we recall the previous front scrim alpha even if we transition away
        // for a bit.
@@ -514,7 +477,6 @@ public class ScrimControllerTest extends SysuiTestCase {
        assertScrimAlpha(Map.of(
                mScrimInFront, OPAQUE,
                mScrimBehind, TRANSPARENT));
        assertEquals(1f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f);

        // ... and alpha updates should be completely ignored if always_on is off.
        // Passing it forward would mess up the wake-up transition.
@@ -545,7 +507,6 @@ public class ScrimControllerTest extends SysuiTestCase {
        assertScrimAlpha(Map.of(
                mScrimInFront, OPAQUE,
                mScrimBehind, TRANSPARENT));
        assertEquals(1f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f);

        // ... but will take effect after docked
        when(mDockManager.isDocked()).thenReturn(true);
@@ -557,7 +518,6 @@ public class ScrimControllerTest extends SysuiTestCase {
        assertScrimAlpha(Map.of(
                mScrimInFront, SEMI_TRANSPARENT,
                mScrimBehind, TRANSPARENT));
        assertEquals(1f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f);

        // ... and that if we set it while we're in AOD, it does take immediate effect after docked.
        mScrimController.setAodFrontScrimAlpha(1f);
@@ -565,7 +525,6 @@ public class ScrimControllerTest extends SysuiTestCase {
        assertScrimAlpha(Map.of(
                mScrimInFront, OPAQUE,
                mScrimBehind, TRANSPARENT));
        assertEquals(1f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f);

        // Reset value since enums are static.
        mScrimController.setAodFrontScrimAlpha(0f);
@@ -576,7 +535,6 @@ public class ScrimControllerTest extends SysuiTestCase {
        // Pre-condition
        // Need to go to AoD first because PULSING doesn't change
        // the back scrim opacity - otherwise it would hide AoD wallpapers.
        mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(false);
        mTestScope.getTestScheduler().runCurrent();

        mScrimController.legacyTransitionTo(ScrimState.AOD);
@@ -584,7 +542,6 @@ public class ScrimControllerTest extends SysuiTestCase {
        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mScrimBehind, TRANSPARENT));
        assertEquals(1f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f);

        mScrimController.legacyTransitionTo(ScrimState.PULSING);
        finishAnimationsImmediately();
@@ -594,7 +551,6 @@ public class ScrimControllerTest extends SysuiTestCase {
        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mScrimBehind, TRANSPARENT));
        assertEquals(1f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f);

        assertScrimTinted(Map.of(
                mScrimInFront, true,
@@ -608,15 +564,12 @@ public class ScrimControllerTest extends SysuiTestCase {
        assertScrimAlpha(Map.of(
                mScrimInFront, SEMI_TRANSPARENT,
                mScrimBehind, TRANSPARENT));
        assertEquals(1f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f);

        mScrimController.setWakeLockScreenSensorActive(true);
        finishAnimationsImmediately();
        assertScrimAlpha(Map.of(
                mScrimInFront, SEMI_TRANSPARENT,
                mScrimBehind, TRANSPARENT));
        assertEquals(ScrimController.WAKE_SENSOR_SCRIM_ALPHA,
                mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f);

        // Reset value since enums are static.
        mScrimController.setAodFrontScrimAlpha(0f);
@@ -1290,7 +1243,6 @@ public class ScrimControllerTest extends SysuiTestCase {
        mScrimController = new ScrimController(
                mLightBarController,
                mDozeParameters,
                mAlarmManager,
                mKeyguardStateController,
                mDelayedWakeLockFactory,
                new FakeHandler(mLooper.getLooper()),
@@ -1306,14 +1258,11 @@ public class ScrimControllerTest extends SysuiTestCase {
                mAlternateBouncerToGoneTransitionViewModel,
                mKeyguardTransitionInteractor,
                mKeyguardInteractor,
                mWallpaperRepository,
                mKosmos.getTestDispatcher(),
                mLinearLargeScreenShadeInterpolator);
        mScrimController.start();
        mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible);
        mScrimController.attachViews(mScrimBehind, mNotificationsScrim, mScrimInFront);
        mScrimController.setAnimatorListener(mAnimatorListener);
        mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(false);
        mTestScope.getTestScheduler().runCurrent();
        mScrimController.legacyTransitionTo(ScrimState.KEYGUARD);
        finishAnimationsImmediately();
@@ -1409,57 +1358,6 @@ public class ScrimControllerTest extends SysuiTestCase {
        verify(callback).onFinished();
    }

    @Test
    public void testHoldsAodWallpaperAnimationLock() {
        // Pre-conditions
        mScrimController.legacyTransitionTo(ScrimState.AOD);
        finishAnimationsImmediately();
        reset(mWakeLock);

        mScrimController.onHideWallpaperTimeout();
        verify(mWakeLock).acquire(anyString());
        verify(mWakeLock, never()).release(anyString());
        finishAnimationsImmediately();
        verify(mWakeLock).release(anyString());
    }

    @Test
    public void testHoldsPulsingWallpaperAnimationLock() {
        // Pre-conditions
        mScrimController.legacyTransitionTo(ScrimState.PULSING);
        finishAnimationsImmediately();
        reset(mWakeLock);

        mScrimController.onHideWallpaperTimeout();
        verify(mWakeLock).acquire(anyString());
        verify(mWakeLock, never()).release(anyString());
        finishAnimationsImmediately();
        verify(mWakeLock).release(anyString());
    }

    @Test
    public void testWillHideAodWallpaper() {
        mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(true);
        mTestScope.getTestScheduler().runCurrent();

        mScrimController.legacyTransitionTo(ScrimState.AOD);
        verify(mAlarmManager).setExact(anyInt(), anyLong(), any(), any(), any());
        mScrimController.legacyTransitionTo(ScrimState.KEYGUARD);
        verify(mAlarmManager).cancel(any(AlarmManager.OnAlarmListener.class));
    }

    @Test
    public void testWillHideDockedWallpaper() {
        mAlwaysOnEnabled = false;
        when(mDockManager.isDocked()).thenReturn(true);
        mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(true);
        mTestScope.getTestScheduler().runCurrent();

        mScrimController.legacyTransitionTo(ScrimState.AOD);

        verify(mAlarmManager).setExact(anyInt(), anyLong(), any(), any(), any());
    }

    @Test
    public void testConservesExpansionOpacityAfterTransition() {
        mScrimController.legacyTransitionTo(ScrimState.UNLOCKED);
@@ -1497,43 +1395,6 @@ public class ScrimControllerTest extends SysuiTestCase {
                mNotificationsScrim.isFocusable());
    }

    @Test
    public void testHidesShowWhenLockedActivity() {
        mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(true);
        mTestScope.getTestScheduler().runCurrent();

        mScrimController.setKeyguardOccluded(true);
        mScrimController.legacyTransitionTo(ScrimState.AOD);
        finishAnimationsImmediately();
        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mScrimBehind, OPAQUE));

        mScrimController.legacyTransitionTo(ScrimState.PULSING);
        finishAnimationsImmediately();
        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mScrimBehind, OPAQUE));
    }

    @Test
    public void testHidesShowWhenLockedActivity_whenAlreadyInAod() {
        mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(true);
        mTestScope.getTestScheduler().runCurrent();

        mScrimController.legacyTransitionTo(ScrimState.AOD);
        finishAnimationsImmediately();
        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mScrimBehind, TRANSPARENT));

        mScrimController.setKeyguardOccluded(true);
        finishAnimationsImmediately();
        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mScrimBehind, OPAQUE));
    }

    @Test
    public void testEatsTouchEvent() {
        HashSet<ScrimState> eatsTouches =