Revert "Add WakeDirectlyToGoneInteractor."

This reverts commit 94eea04ec214b0020cd19c25aba24713f9439f32.

Reason for revert: b/352221489

Change-Id: I916c3f670838740f20b7c57ddf6aa9f031f4b1b7
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
index 9f33113..c4b70d8 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
@@ -81,7 +81,6 @@
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.keyguard.domain.interactor.KeyguardEnabledInteractor;
 import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor;
-import com.android.systemui.keyguard.domain.interactor.KeyguardWakeDirectlyToGoneInteractor;
 import com.android.systemui.keyguard.ui.binder.KeyguardSurfaceBehindParamsApplier;
 import com.android.systemui.keyguard.ui.binder.KeyguardSurfaceBehindViewBinder;
 import com.android.systemui.keyguard.ui.binder.WindowManagerLockscreenVisibilityViewBinder;
@@ -318,7 +317,7 @@
 
     private final WindowManagerOcclusionManager mWmOcclusionManager;
     private final KeyguardEnabledInteractor mKeyguardEnabledInteractor;
-    private final KeyguardWakeDirectlyToGoneInteractor mKeyguardWakeDirectlyToGoneInteractor;
+
     private final Lazy<FoldGracePeriodProvider> mFoldGracePeriodProvider = new Lazy<>() {
         @Override
         public FoldGracePeriodProvider get() {
@@ -345,8 +344,7 @@
             @Main Executor mainExecutor,
             KeyguardInteractor keyguardInteractor,
             KeyguardEnabledInteractor keyguardEnabledInteractor,
-            Lazy<KeyguardStateCallbackStartable> keyguardStateCallbackStartableLazy,
-            KeyguardWakeDirectlyToGoneInteractor keyguardWakeDirectlyToGoneInteractor) {
+            Lazy<KeyguardStateCallbackStartable> keyguardStateCallbackStartableLazy) {
         super();
         mKeyguardViewMediator = keyguardViewMediator;
         mKeyguardLifecyclesDispatcher = keyguardLifecyclesDispatcher;
@@ -374,7 +372,6 @@
 
         mWmOcclusionManager = windowManagerOcclusionManager;
         mKeyguardEnabledInteractor = keyguardEnabledInteractor;
-        mKeyguardWakeDirectlyToGoneInteractor = keyguardWakeDirectlyToGoneInteractor;
     }
 
     @Override
@@ -489,7 +486,6 @@
         public void onDreamingStarted() {
             trace("onDreamingStarted");
             checkPermission();
-            mKeyguardWakeDirectlyToGoneInteractor.onDreamingStarted();
             mKeyguardInteractor.setDreaming(true);
             mKeyguardViewMediator.onDreamingStarted();
         }
@@ -498,7 +494,6 @@
         public void onDreamingStopped() {
             trace("onDreamingStopped");
             checkPermission();
-            mKeyguardWakeDirectlyToGoneInteractor.onDreamingStopped();
             mKeyguardInteractor.setDreaming(false);
             mKeyguardViewMediator.onDreamingStopped();
         }
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt
index ae751db..f837d8e 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt
@@ -127,30 +127,6 @@
      */
     val isKeyguardEnabled: StateFlow<Boolean>
 
-    /**
-     * Whether we can transition directly back to GONE from AOD/DOZING without any authentication
-     * events (such as a fingerprint wake and unlock), even though authentication would normally be
-     * required. This means that if you tap the screen or press the power button, you'll return
-     * directly to the unlocked app content without seeing the lockscreen, even if a secure
-     * authentication method (PIN/password/biometrics) is set.
-     *
-     * This is true in these cases:
-     * - The screen timed out, but the "lock after screen timeout" duration (default 5 seconds) has
-     *   not yet elapsed.
-     * - The power button was pressed, but "power button instantly locks" is not enabled, and the
-     *   "lock after screen timeout" duration has not elapsed.
-     *
-     * Note that this value specifically tells us if we can *ignore* authentication that would
-     * otherwise be required to transition from AOD/DOZING -> GONE. AOD/DOZING -> GONE is also
-     * possible if keyguard is disabled, either from an app request or because security is set to
-     * "none", but in that case, auth is not required so this boolean is not relevant.
-     *
-     * See [KeyguardWakeToGoneInteractor].
-     */
-    val canIgnoreAuthAndReturnToGone: StateFlow<Boolean>
-
-    fun setCanIgnoreAuthAndReturnToGone(canWake: Boolean)
-
     /** Is the always-on display available to be used? */
     val isAodAvailable: StateFlow<Boolean>
 
@@ -410,13 +386,6 @@
         MutableStateFlow(!lockPatternUtils.isLockScreenDisabled(userTracker.userId))
     override val isKeyguardEnabled: StateFlow<Boolean> = _isKeyguardEnabled.asStateFlow()
 
-    private val _canIgnoreAuthAndReturnToGone = MutableStateFlow(false)
-    override val canIgnoreAuthAndReturnToGone = _canIgnoreAuthAndReturnToGone.asStateFlow()
-
-    override fun setCanIgnoreAuthAndReturnToGone(canWakeToGone: Boolean) {
-        _canIgnoreAuthAndReturnToGone.value = canWakeToGone
-    }
-
     private val _isDozing = MutableStateFlow(statusBarStateController.isDozing)
     override val isDozing: StateFlow<Boolean> = _isDozing.asStateFlow()
 
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractor.kt
index 1167cc4..868c462 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractor.kt
@@ -53,7 +53,6 @@
     powerInteractor: PowerInteractor,
     keyguardOcclusionInteractor: KeyguardOcclusionInteractor,
     val deviceEntryRepository: DeviceEntryRepository,
-    private val wakeToGoneInteractor: KeyguardWakeDirectlyToGoneInteractor,
 ) :
     TransitionInteractor(
         fromState = KeyguardState.AOD,
@@ -99,7 +98,6 @@
                     keyguardInteractor.primaryBouncerShowing,
                     keyguardInteractor.isKeyguardOccluded,
                     canDismissLockscreen,
-                    wakeToGoneInteractor.canWakeDirectlyToGone,
                 )
                 .collect {
                     (
@@ -109,7 +107,6 @@
                         primaryBouncerShowing,
                         isKeyguardOccludedLegacy,
                         canDismissLockscreen,
-                        canWakeDirectlyToGone,
                     ) ->
                     if (!maybeHandleInsecurePowerGesture()) {
                         val shouldTransitionToLockscreen =
@@ -134,7 +131,8 @@
 
                         val shouldTransitionToGone =
                             (!KeyguardWmStateRefactor.isEnabled && canDismissLockscreen) ||
-                                (KeyguardWmStateRefactor.isEnabled && canWakeDirectlyToGone)
+                                (KeyguardWmStateRefactor.isEnabled &&
+                                    !deviceEntryRepository.isLockscreenEnabled())
 
                         if (shouldTransitionToGone) {
                             startTransitionTo(
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt
index aee65a8..76e88a2 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt
@@ -55,7 +55,6 @@
     private val communalInteractor: CommunalInteractor,
     keyguardOcclusionInteractor: KeyguardOcclusionInteractor,
     val deviceEntryRepository: DeviceEntryRepository,
-    private val wakeToGoneInteractor: KeyguardWakeDirectlyToGoneInteractor,
 ) :
     TransitionInteractor(
         fromState = KeyguardState.DOZING,
@@ -182,7 +181,7 @@
                 .sample(
                     communalInteractor.isIdleOnCommunal,
                     keyguardInteractor.biometricUnlockState,
-                    wakeToGoneInteractor.canWakeDirectlyToGone,
+                    canTransitionToGoneOnWake,
                     keyguardInteractor.primaryBouncerShowing,
                 )
                 .collect {
@@ -190,14 +189,27 @@
                         _,
                         isIdleOnCommunal,
                         biometricUnlockState,
-                        canWakeDirectlyToGone,
+                        canDismissLockscreen,
                         primaryBouncerShowing) ->
                     if (
                         !maybeStartTransitionToOccludedOrInsecureCamera() &&
                             // Handled by dismissFromDozing().
                             !isWakeAndUnlock(biometricUnlockState.mode)
                     ) {
-                        if (canWakeDirectlyToGone) {
+                        if (!KeyguardWmStateRefactor.isEnabled && canDismissLockscreen) {
+                            if (SceneContainerFlag.isEnabled) {
+                                // TODO(b/336576536): Check if adaptation for scene framework is
+                                // needed
+                            } else {
+                                startTransitionTo(
+                                    KeyguardState.GONE,
+                                    ownerReason = "waking from dozing"
+                                )
+                            }
+                        } else if (
+                            KeyguardWmStateRefactor.isEnabled &&
+                                !deviceEntryRepository.isLockscreenEnabled()
+                        ) {
                             if (SceneContainerFlag.isEnabled) {
                                 // TODO(b/336576536): Check if adaptation for scene framework is
                                 // needed
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt
index cfb161c..0e76487 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt
@@ -23,7 +23,6 @@
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dagger.qualifiers.Background
 import com.android.systemui.dagger.qualifiers.Main
-import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor
 import com.android.systemui.keyguard.KeyguardWmStateRefactor
 import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
 import com.android.systemui.keyguard.shared.model.BiometricUnlockMode
@@ -38,14 +37,11 @@
 import kotlin.time.Duration.Companion.seconds
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.FlowPreview
 import kotlinx.coroutines.flow.combine
 import kotlinx.coroutines.flow.debounce
-import kotlinx.coroutines.flow.filter
 import kotlinx.coroutines.launch
 
-@OptIn(ExperimentalCoroutinesApi::class)
 @SysUISingleton
 class FromDreamingTransitionInteractor
 @Inject
@@ -60,7 +56,6 @@
     private val glanceableHubTransitions: GlanceableHubTransitions,
     powerInteractor: PowerInteractor,
     keyguardOcclusionInteractor: KeyguardOcclusionInteractor,
-    private val deviceEntryInteractor: DeviceEntryInteractor,
 ) :
     TransitionInteractor(
         fromState = KeyguardState.DREAMING,
@@ -77,7 +72,7 @@
         listenForDreamingToOccluded()
         listenForDreamingToGoneWhenDismissable()
         listenForDreamingToGoneFromBiometricUnlock()
-        listenForDreamingToLockscreenOrGone()
+        listenForDreamingToLockscreen()
         listenForDreamingToAodOrDozing()
         listenForTransitionToCamera(scope, keyguardInteractor)
         listenForDreamingToGlanceableHub()
@@ -137,7 +132,17 @@
 
     @OptIn(FlowPreview::class)
     private fun listenForDreamingToOccluded() {
-        if (!KeyguardWmStateRefactor.isEnabled) {
+        if (KeyguardWmStateRefactor.isEnabled) {
+            scope.launch {
+                combine(
+                        keyguardInteractor.isDreaming,
+                        keyguardOcclusionInteractor.isShowWhenLockedActivityOnTop,
+                        ::Pair
+                    )
+                    .filterRelevantKeyguardStateAnd { (isDreaming, _) -> !isDreaming }
+                    .collect { maybeStartTransitionToOccludedOrInsecureCamera() }
+            }
+        } else {
             scope.launch {
                 combine(
                         keyguardInteractor.isKeyguardOccluded,
@@ -163,41 +168,21 @@
         }
     }
 
-    private fun listenForDreamingToLockscreenOrGone() {
+    private fun listenForDreamingToLockscreen() {
         if (!KeyguardWmStateRefactor.isEnabled) {
             return
         }
 
         scope.launch {
-            keyguardInteractor.isDreaming
-                .filter { !it }
-                .sample(deviceEntryInteractor.isUnlocked, ::Pair)
-                .collect { (_, dismissable) ->
-                    // TODO(b/349837588): Add check for -> OCCLUDED.
-                    if (dismissable) {
-                        startTransitionTo(
-                            KeyguardState.GONE,
-                            ownerReason = "No longer dreaming; dismissable"
-                        )
-                    } else {
-                        startTransitionTo(
-                            KeyguardState.LOCKSCREEN,
-                            ownerReason = "No longer dreaming"
-                        )
-                    }
-                }
+            keyguardOcclusionInteractor.isShowWhenLockedActivityOnTop
+                .filterRelevantKeyguardStateAnd { onTop -> !onTop }
+                .collect { startTransitionTo(KeyguardState.LOCKSCREEN) }
         }
     }
 
     private fun listenForDreamingToGoneWhenDismissable() {
-        if (SceneContainerFlag.isEnabled) {
-            return // TODO(b/336576536): Check if adaptation for scene framework is needed
-        }
-
-        if (KeyguardWmStateRefactor.isEnabled) {
-            return
-        }
-
+        // TODO(b/336576536): Check if adaptation for scene framework is needed
+        if (SceneContainerFlag.isEnabled) return
         scope.launch {
             keyguardInteractor.isAbleToDream
                 .sampleCombine(
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardWakeDirectlyToGoneInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardWakeDirectlyToGoneInteractor.kt
deleted file mode 100644
index 6a1b7cf..0000000
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardWakeDirectlyToGoneInteractor.kt
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.keyguard.domain.interactor
-
-import android.annotation.SuppressLint
-import android.app.AlarmManager
-import android.app.PendingIntent
-import android.content.BroadcastReceiver
-import android.content.Context
-import android.content.Intent
-import android.content.IntentFilter
-import android.provider.Settings
-import android.provider.Settings.Secure
-import com.android.internal.widget.LockPatternUtils
-import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.dagger.qualifiers.Application
-import com.android.systemui.keyguard.KeyguardViewMediator
-import com.android.systemui.keyguard.data.repository.KeyguardRepository
-import com.android.systemui.keyguard.shared.model.BiometricUnlockMode
-import com.android.systemui.keyguard.shared.model.KeyguardState
-import com.android.systemui.keyguard.shared.model.KeyguardState.Companion.deviceIsAsleepInState
-import com.android.systemui.keyguard.shared.model.KeyguardState.Companion.deviceIsAwakeInState
-import com.android.systemui.power.domain.interactor.PowerInteractor
-import com.android.systemui.power.shared.model.WakeSleepReason
-import com.android.systemui.user.domain.interactor.SelectedUserInteractor
-import com.android.systemui.util.kotlin.sample
-import com.android.systemui.util.settings.SecureSettings
-import com.android.systemui.util.settings.SystemSettings
-import com.android.systemui.util.time.SystemClock
-import javax.inject.Inject
-import kotlin.math.max
-import kotlin.math.min
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.combine
-import kotlinx.coroutines.flow.distinctUntilChanged
-import kotlinx.coroutines.flow.distinctUntilChangedBy
-import kotlinx.coroutines.flow.map
-import kotlinx.coroutines.launch
-
-/**
- * Logic related to the ability to wake directly to GONE from asleep (AOD/DOZING), without going
- * through LOCKSCREEN or a BOUNCER state.
- *
- * This is possible in the following scenarios:
- * - The lockscreen is disabled, either from an app request (SUW does this), or by the security
- *   "None" setting.
- * - A biometric authentication event occurred while we were asleep (fingerprint auth, etc). This
- *   specifically is referred to throughout the codebase as "wake and unlock".
- * - The screen timed out, but the "lock after screen timeout" duration has not elapsed.
- * - The power button was pressed, but "power button instantly locks" is disabled and the "lock
- *   after screen timeout" duration has not elapsed.
- *
- * In these cases, no (further) authentication is required, and we can transition directly from
- * AOD/DOZING -> GONE.
- */
-@SysUISingleton
-class KeyguardWakeDirectlyToGoneInteractor
-@Inject
-constructor(
-    @Application private val scope: CoroutineScope,
-    private val context: Context,
-    private val repository: KeyguardRepository,
-    private val systemClock: SystemClock,
-    private val alarmManager: AlarmManager,
-    private val transitionInteractor: KeyguardTransitionInteractor,
-    private val powerInteractor: PowerInteractor,
-    private val secureSettings: SecureSettings,
-    private val lockPatternUtils: LockPatternUtils,
-    private val systemSettings: SystemSettings,
-    private val selectedUserInteractor: SelectedUserInteractor,
-) {
-
-    /**
-     * Whether the lockscreen was disabled as of the last wake/sleep event, according to
-     * LockPatternUtils.
-     *
-     * This will always be true if [repository.isKeyguardServiceEnabled]=false, but it can also be
-     * true when the keyguard service is enabled if the lockscreen has been disabled via adb using
-     * the `adb shell locksettings set-disabled true` command, which is often done in tests.
-     *
-     * Unlike keyguardServiceEnabled, changes to this value should *not* immediately show or hide
-     * the keyguard. If the lockscreen is disabled in this way, it will just not show on the next
-     * sleep/wake.
-     */
-    private val isLockscreenDisabled: Flow<Boolean> =
-        powerInteractor.isAwake.map { isLockscreenDisabled() }
-
-    /**
-     * Whether we can wake from AOD/DOZING directly to GONE, bypassing LOCKSCREEN/BOUNCER states.
-     *
-     * This is possible in the following cases:
-     * - Keyguard is disabled, either from an app request or from security being set to "None".
-     * - We're wake and unlocking (fingerprint auth occurred while asleep).
-     * - We're allowed to ignore auth and return to GONE, due to timeouts not elapsing.
-     */
-    val canWakeDirectlyToGone =
-        combine(
-                repository.isKeyguardEnabled,
-                isLockscreenDisabled,
-                repository.biometricUnlockState,
-                repository.canIgnoreAuthAndReturnToGone,
-            ) {
-                keyguardEnabled,
-                isLockscreenDisabled,
-                biometricUnlockState,
-                canIgnoreAuthAndReturnToGone ->
-                (!keyguardEnabled || isLockscreenDisabled) ||
-                    BiometricUnlockMode.isWakeAndUnlock(biometricUnlockState.mode) ||
-                    canIgnoreAuthAndReturnToGone
-            }
-            .distinctUntilChanged()
-
-    /**
-     * Counter that is incremented every time we wake up or stop dreaming. Upon sleeping/dreaming,
-     * we put the current value of this counter into the intent extras of the timeout alarm intent.
-     * If this value has changed by the time we receive the intent, it is discarded since it's out
-     * of date.
-     */
-    var timeoutCounter = 0
-
-    var isAwake = false
-
-    private val broadcastReceiver: BroadcastReceiver =
-        object : BroadcastReceiver() {
-            override fun onReceive(context: Context, intent: Intent) {
-                if (DELAYED_KEYGUARD_ACTION == intent.action) {
-                    val sequence = intent.getIntExtra(SEQ_EXTRA_KEY, 0)
-                    synchronized(this) {
-                        if (timeoutCounter == sequence) {
-                            // If the sequence # matches, we have not woken up or stopped dreaming
-                            // since
-                            // the alarm was set. That means this is still relevant - the lock
-                            // timeout
-                            // has elapsed, so let the repository know that we can no longer return
-                            // to
-                            // GONE without authenticating.
-                            repository.setCanIgnoreAuthAndReturnToGone(false)
-                        }
-                    }
-                }
-            }
-        }
-
-    init {
-        setOrCancelAlarmFromWakefulness()
-        listenForWakeToClearCanIgnoreAuth()
-        registerBroadcastReceiver()
-    }
-
-    fun onDreamingStarted() {
-        // If we start dreaming while awake, lock after the normal timeout.
-        if (isAwake) {
-            setResetCanIgnoreAuthAlarm()
-        }
-    }
-
-    fun onDreamingStopped() {
-        // Cancel the timeout if we stop dreaming while awake.
-        if (isAwake) {
-            cancelCanIgnoreAuthAlarm()
-        }
-    }
-
-    private fun setOrCancelAlarmFromWakefulness() {
-        scope.launch {
-            powerInteractor.detailedWakefulness
-                .distinctUntilChangedBy { it.isAwake() }
-                .sample(transitionInteractor.currentKeyguardState, ::Pair)
-                .collect { (wakefulness, currentState) ->
-                    // Save isAwake for use in onDreamingStarted/onDreamingStopped.
-                    this@KeyguardWakeDirectlyToGoneInteractor.isAwake = wakefulness.isAwake()
-
-                    // If we're sleeping from GONE, check the timeout and lock instantly settings.
-                    // These are not relevant if we're coming from non-GONE states.
-                    if (!isAwake && currentState == KeyguardState.GONE) {
-                        val lockTimeoutDuration = getCanIgnoreAuthAndReturnToGoneDuration()
-
-                        // If the screen timed out and went to sleep, and the lock timeout is > 0ms,
-                        // then we can return to GONE until that duration elapses. If the power
-                        // button was pressed but "instantly locks" is disabled, then we can also
-                        // return to GONE until the timeout duration elapses.
-                        if (
-                            (wakefulness.lastSleepReason == WakeSleepReason.TIMEOUT &&
-                                lockTimeoutDuration > 0) ||
-                                (wakefulness.lastSleepReason == WakeSleepReason.POWER_BUTTON &&
-                                    !willLockImmediately())
-                        ) {
-
-                            // Let the repository know that we can return to GONE until we notify
-                            // it otherwise.
-                            repository.setCanIgnoreAuthAndReturnToGone(true)
-                            setResetCanIgnoreAuthAlarm()
-                        }
-                    } else if (isAwake) {
-                        // If we're waking up, ignore the alarm if it goes off since it's no longer
-                        // relevant. Once a wake KeyguardTransition is started, we'll also clear the
-                        // canIgnoreAuthAndReturnToGone value in listenForWakeToClearCanIgnoreAuth.
-                        cancelCanIgnoreAuthAlarm()
-                    }
-                }
-        }
-    }
-
-    /** Clears the canIgnoreAuthAndReturnToGone value upon waking. */
-    private fun listenForWakeToClearCanIgnoreAuth() {
-        scope.launch {
-            transitionInteractor
-                .isInTransitionWhere(
-                    fromStatePredicate = { deviceIsAsleepInState(it) },
-                    toStatePredicate = { deviceIsAwakeInState(it) },
-                )
-                .collect {
-                    // This value is reset when the timeout alarm fires, but if the device is woken
-                    // back up before then, it needs to be reset here. The alarm is cancelled
-                    // immediately upon waking up, but since this value is used by keyguard
-                    // transition internals to decide whether we can transition to GONE, wait until
-                    // that decision is made before resetting it.
-                    repository.setCanIgnoreAuthAndReturnToGone(false)
-                }
-        }
-    }
-
-    /**
-     * Registers the broadcast receiver to receive the alarm intent.
-     *
-     * TODO(b/351817381): Investigate using BroadcastDispatcher vs. ignoring this lint warning.
-     */
-    @SuppressLint("WrongConstant", "RegisterReceiverViaContext")
-    private fun registerBroadcastReceiver() {
-        val delayedActionFilter = IntentFilter()
-        delayedActionFilter.addAction(KeyguardViewMediator.DELAYED_KEYGUARD_ACTION)
-        // TODO(b/346803756): Listen for DELAYED_LOCK_PROFILE_ACTION.
-        delayedActionFilter.priority = IntentFilter.SYSTEM_HIGH_PRIORITY
-        context.registerReceiver(
-            broadcastReceiver,
-            delayedActionFilter,
-            SYSTEMUI_PERMISSION,
-            null /* scheduler */,
-            Context.RECEIVER_EXPORTED_UNAUDITED
-        )
-    }
-
-    /** Set an alarm for */
-    private fun setResetCanIgnoreAuthAlarm() {
-        val intent =
-            Intent(DELAYED_KEYGUARD_ACTION).apply {
-                setPackage(context.packageName)
-                putExtra(SEQ_EXTRA_KEY, timeoutCounter)
-                addFlags(Intent.FLAG_RECEIVER_FOREGROUND)
-            }
-
-        val sender =
-            PendingIntent.getBroadcast(
-                context,
-                0,
-                intent,
-                PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE
-            )
-
-        val time = systemClock.elapsedRealtime() + getCanIgnoreAuthAndReturnToGoneDuration()
-        alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, sender)
-
-        // TODO(b/346803756): Migrate support for child profiles.
-    }
-
-    /**
-     * Cancel the timeout by incrementing the counter so that we ignore the intent when it's
-     * received.
-     */
-    private fun cancelCanIgnoreAuthAlarm() {
-        timeoutCounter++
-    }
-
-    /**
-     * Whether pressing the power button locks the device immediately; vs. waiting for a specified
-     * timeout first.
-     */
-    private fun willLockImmediately(
-        userId: Int = selectedUserInteractor.getSelectedUserId()
-    ): Boolean {
-        return lockPatternUtils.getPowerButtonInstantlyLocks(userId) ||
-            !lockPatternUtils.isSecure(userId)
-    }
-
-    /**
-     * Returns whether the lockscreen is disabled, either because the keyguard service is disabled
-     * or because an adb command has disabled the lockscreen.
-     */
-    private fun isLockscreenDisabled(
-        userId: Int = selectedUserInteractor.getSelectedUserId()
-    ): Boolean {
-        return lockPatternUtils.isLockScreenDisabled(userId)
-    }
-
-    /**
-     * Returns the duration within which we can return to GONE without auth after a screen timeout
-     * (or power button press, if lock instantly is disabled).
-     *
-     * This takes into account the user's settings as well as device policy maximums.
-     */
-    private fun getCanIgnoreAuthAndReturnToGoneDuration(
-        userId: Int = selectedUserInteractor.getSelectedUserId()
-    ): Long {
-        // The timeout duration from settings (Security > Device Unlock > Gear icon > "Lock after
-        // screen timeout".
-        val durationSetting: Long =
-            secureSettings
-                .getIntForUser(
-                    Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT,
-                    KEYGUARD_CAN_IGNORE_AUTH_DURATION,
-                    userId
-                )
-                .toLong()
-
-        // Device policy maximum timeout.
-        val durationDevicePolicyMax =
-            lockPatternUtils.devicePolicyManager.getMaximumTimeToLock(null, userId)
-
-        return if (durationDevicePolicyMax <= 0) {
-            durationSetting
-        } else {
-            var displayTimeout =
-                systemSettings
-                    .getIntForUser(
-                        Settings.System.SCREEN_OFF_TIMEOUT,
-                        KEYGUARD_DISPLAY_TIMEOUT_DELAY_DEFAULT,
-                        userId
-                    )
-                    .toLong()
-
-            // Ignore negative values. I don't know why this would be negative, but this check has
-            // been around since 2016 and I see no upside to removing it.
-            displayTimeout = max(displayTimeout, 0)
-
-            // Respect the shorter of: the device policy (maximum duration between last user action
-            // and fully locking) or the "Lock after screen timeout" setting.
-            max(min(durationDevicePolicyMax - displayTimeout, durationSetting), 0)
-        }
-    }
-
-    companion object {
-        private const val DELAYED_KEYGUARD_ACTION =
-            "com.android.internal.policy.impl.PhoneWindowManager.DELAYED_KEYGUARD"
-        private const val DELAYED_LOCK_PROFILE_ACTION =
-            "com.android.internal.policy.impl.PhoneWindowManager.DELAYED_LOCK"
-        private const val SYSTEMUI_PERMISSION = "com.android.systemui.permission.SELF"
-        private const val SEQ_EXTRA_KEY = "count"
-
-        private const val KEYGUARD_CAN_IGNORE_AUTH_DURATION = 5000
-        private const val KEYGUARD_DISPLAY_TIMEOUT_DELAY_DEFAULT = 30000
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractor.kt
index 0985e69..3355ffd 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractor.kt
@@ -21,17 +21,14 @@
 import com.android.compose.animation.scene.ObservableTransitionState
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor
-import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
 import com.android.systemui.keyguard.shared.model.BiometricUnlockMode
 import com.android.systemui.keyguard.shared.model.Edge
 import com.android.systemui.keyguard.shared.model.KeyguardState
-import com.android.systemui.keyguard.shared.model.KeyguardState.Companion.deviceIsAsleepInState
 import com.android.systemui.keyguard.shared.model.TransitionState
 import com.android.systemui.scene.domain.interactor.SceneInteractor
 import com.android.systemui.scene.shared.flag.SceneContainerFlag
 import com.android.systemui.scene.shared.model.Scenes
 import com.android.systemui.statusbar.notification.domain.interactor.NotificationLaunchAnimationInteractor
-import com.android.systemui.util.kotlin.Utils.Companion.toTriple
 import com.android.systemui.util.kotlin.sample
 import com.android.systemui.utils.coroutines.flow.flatMapLatestConflated
 import dagger.Lazy
@@ -44,13 +41,11 @@
 import kotlinx.coroutines.flow.flowOf
 import kotlinx.coroutines.flow.map
 
-@OptIn(ExperimentalCoroutinesApi::class)
 @SysUISingleton
 class WindowManagerLockscreenVisibilityInteractor
 @Inject
 constructor(
     keyguardInteractor: KeyguardInteractor,
-    transitionRepository: KeyguardTransitionRepository,
     transitionInteractor: KeyguardTransitionInteractor,
     surfaceBehindInteractor: KeyguardSurfaceBehindInteractor,
     fromLockscreenInteractor: FromLockscreenTransitionInteractor,
@@ -59,15 +54,9 @@
     notificationLaunchAnimationInteractor: NotificationLaunchAnimationInteractor,
     sceneInteractor: Lazy<SceneInteractor>,
     deviceEntryInteractor: Lazy<DeviceEntryInteractor>,
-    wakeToGoneInteractor: KeyguardWakeDirectlyToGoneInteractor,
 ) {
     private val defaultSurfaceBehindVisibility =
-        combine(
-            transitionInteractor.finishedKeyguardState,
-            wakeToGoneInteractor.canWakeDirectlyToGone,
-        ) { finishedState, canWakeDirectlyToGone ->
-            isSurfaceVisible(finishedState) || canWakeDirectlyToGone
-        }
+        transitionInteractor.finishedKeyguardState.map(::isSurfaceVisible)
 
     /**
      * Surface visibility provided by the From*TransitionInteractor responsible for the currently
@@ -214,13 +203,9 @@
         if (SceneContainerFlag.isEnabled) {
             isDeviceNotEntered
         } else {
-            combine(
-                    transitionInteractor.currentKeyguardState,
-                    wakeToGoneInteractor.canWakeDirectlyToGone,
-                    ::Pair
-                )
-                .sample(transitionInteractor.startedStepWithPrecedingStep, ::toTriple)
-                .map { (currentState, canWakeDirectlyToGone, startedWithPrev) ->
+            transitionInteractor.currentKeyguardState
+                .sample(transitionInteractor.startedStepWithPrecedingStep, ::Pair)
+                .map { (currentState, startedWithPrev) ->
                     val startedFromStep = startedWithPrev.previousValue
                     val startedStep = startedWithPrev.newValue
                     val returningToGoneAfterCancellation =
@@ -228,33 +213,16 @@
                             startedFromStep.transitionState == TransitionState.CANCELED &&
                             startedFromStep.from == KeyguardState.GONE
 
-                    val transitionInfo = transitionRepository.currentTransitionInfoInternal.value
-                    val wakingDirectlyToGone =
-                        deviceIsAsleepInState(transitionInfo.from) &&
-                            transitionInfo.to == KeyguardState.GONE
-
-                    if (returningToGoneAfterCancellation || wakingDirectlyToGone) {
-                        // GONE -> AOD/DOZING (cancel) -> GONE is the camera launch transition,
-                        // which means we never want to show the lockscreen throughout the
-                        // transition. Same for waking directly to gone, due to the lockscreen being
-                        // disabled or because the device was woken back up before the lock timeout
-                        // duration elapsed.
-                        KeyguardState.lockscreenVisibleInState(KeyguardState.GONE)
-                    } else if (canWakeDirectlyToGone) {
-                        // Never show the lockscreen if we can wake directly to GONE. This means
-                        // that the lock timeout has not yet elapsed, or the keyguard is disabled.
-                        // In either case, we don't show the activity lock screen until one of those
-                        // conditions changes.
-                        false
-                    } else if (
-                        currentState == KeyguardState.DREAMING &&
-                            deviceEntryInteractor.get().isUnlocked.value
-                    ) {
-                        // Dreams dismiss keyguard and return to GONE if they can.
-                        false
+                    if (!returningToGoneAfterCancellation) {
+                        // By default, apply the lockscreen visibility of the current state.
+                        deviceEntryInteractor.get().isLockscreenEnabled() &&
+                            KeyguardState.lockscreenVisibleInState(currentState)
                     } else {
-                        // Otherwise, use the visibility of the current state.
-                        KeyguardState.lockscreenVisibleInState(currentState)
+                        // If we're transitioning to GONE after a prior canceled transition from
+                        // GONE, then this is the camera launch transition from an asleep state back
+                        // to GONE. We don't want to show the lockscreen since we're aborting the
+                        // lock and going back to GONE.
+                        KeyguardState.lockscreenVisibleInState(KeyguardState.GONE)
                     }
                 }
                 .distinctUntilChanged()
diff --git a/packages/SystemUI/src/com/android/systemui/power/shared/model/WakeSleepReason.kt b/packages/SystemUI/src/com/android/systemui/power/shared/model/WakeSleepReason.kt
index 776a8f4..75055668 100644
--- a/packages/SystemUI/src/com/android/systemui/power/shared/model/WakeSleepReason.kt
+++ b/packages/SystemUI/src/com/android/systemui/power/shared/model/WakeSleepReason.kt
@@ -54,10 +54,7 @@
     OTHER(isTouch = false, PowerManager.WAKE_REASON_UNKNOWN),
 
     /** Device goes to sleep due to folding of a foldable device. */
-    FOLD(isTouch = false, PowerManager.GO_TO_SLEEP_REASON_DEVICE_FOLD),
-
-    /** Device goes to sleep because it timed out. */
-    TIMEOUT(isTouch = false, PowerManager.GO_TO_SLEEP_REASON_TIMEOUT);
+    FOLD(isTouch = false, PowerManager.GO_TO_SLEEP_REASON_DEVICE_FOLD);
 
     companion object {
         fun fromPowerManagerWakeReason(reason: Int): WakeSleepReason {
@@ -78,7 +75,6 @@
         fun fromPowerManagerSleepReason(reason: Int): WakeSleepReason {
             return when (reason) {
                 PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON -> POWER_BUTTON
-                PowerManager.GO_TO_SLEEP_REASON_TIMEOUT -> TIMEOUT
                 PowerManager.GO_TO_SLEEP_REASON_DEVICE_FOLD -> FOLD
                 else -> OTHER
             }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorTest.kt
index 032794c..42ab25f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorTest.kt
@@ -56,7 +56,6 @@
 import kotlinx.coroutines.test.runCurrent
 import kotlinx.coroutines.test.runTest
 import org.junit.Before
-import org.junit.Ignore
 import org.junit.runner.RunWith
 import org.mockito.Mockito.reset
 import org.mockito.Mockito.spy
@@ -98,7 +97,6 @@
 
     @Test
     @EnableFlags(Flags.FLAG_KEYGUARD_WM_STATE_REFACTOR)
-    @Ignore("Until b/349837588 is fixed")
     fun testTransitionToOccluded_ifDreamEnds_occludingActivityOnTop() =
         testScope.runTest {
             kosmos.fakeKeyguardRepository.setDreaming(true)
@@ -158,7 +156,6 @@
             reset(transitionRepository)
 
             kosmos.keyguardOcclusionRepository.setShowWhenLockedActivityInfo(onTop = false)
-            kosmos.fakeKeyguardRepository.setDreaming(false)
             runCurrent()
 
             assertThat(transitionRepository)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/InWindowLauncherUnlockAnimationInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/InWindowLauncherUnlockAnimationInteractorTest.kt
index ea5a41f..459e41d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/InWindowLauncherUnlockAnimationInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/InWindowLauncherUnlockAnimationInteractorTest.kt
@@ -18,22 +18,25 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
+import com.android.systemui.SysUITestModule
 import com.android.systemui.SysuiTestCase
+import com.android.systemui.TestMocksModule
+import com.android.systemui.biometrics.domain.BiometricsDomainLayerModule
 import com.android.systemui.coroutines.collectValues
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.keyguard.data.repository.FakeKeyguardSurfaceBehindRepository
 import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
-import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
-import com.android.systemui.keyguard.data.repository.inWindowLauncherUnlockAnimationRepository
-import com.android.systemui.keyguard.data.repository.keyguardSurfaceBehindRepository
+import com.android.systemui.keyguard.data.repository.InWindowLauncherUnlockAnimationRepository
 import com.android.systemui.keyguard.shared.model.KeyguardState
 import com.android.systemui.keyguard.shared.model.TransitionState
 import com.android.systemui.keyguard.shared.model.TransitionStep
 import com.android.systemui.keyguard.util.mockTopActivityClassName
-import com.android.systemui.kosmos.applicationCoroutineScope
-import com.android.systemui.kosmos.testScope
 import com.android.systemui.shared.system.ActivityManagerWrapper
-import com.android.systemui.shared.system.activityManagerWrapper
-import com.android.systemui.testKosmos
+import com.android.systemui.user.domain.UserDomainLayerModule
+import dagger.BindsInstance
+import dagger.Component
 import junit.framework.Assert.assertEquals
+import kotlinx.coroutines.test.TestScope
 import kotlinx.coroutines.test.runCurrent
 import kotlinx.coroutines.test.runTest
 import org.junit.Before
@@ -46,16 +49,10 @@
 @RunWith(AndroidJUnit4::class)
 @kotlinx.coroutines.ExperimentalCoroutinesApi
 class InWindowLauncherUnlockAnimationInteractorTest : SysuiTestCase() {
-    private val kosmos = testKosmos()
-    private val underTest =
-        InWindowLauncherUnlockAnimationInteractor(
-            kosmos.inWindowLauncherUnlockAnimationRepository,
-            kosmos.applicationCoroutineScope,
-            kosmos.keyguardTransitionInteractor,
-            { kosmos.keyguardSurfaceBehindRepository },
-            kosmos.activityManagerWrapper,
-        )
-    private val testScope = kosmos.testScope
+    private lateinit var underTest: InWindowLauncherUnlockAnimationInteractor
+
+    private lateinit var testComponent: TestComponent
+    private lateinit var testScope: TestScope
     private lateinit var transitionRepository: FakeKeyguardTransitionRepository
     @Mock private lateinit var activityManagerWrapper: ActivityManagerWrapper
 
@@ -65,9 +62,19 @@
     fun setUp() {
         MockitoAnnotations.initMocks(this)
 
-        transitionRepository = kosmos.fakeKeyguardTransitionRepository
+        testComponent =
+            DaggerInWindowLauncherUnlockAnimationInteractorTest_TestComponent.factory()
+                .create(
+                    test = this,
+                    mocks =
+                        TestMocksModule(
+                            activityManagerWrapper = activityManagerWrapper,
+                        ),
+                )
+        underTest = testComponent.underTest
+        testScope = testComponent.testScope
+        transitionRepository = testComponent.transitionRepository
 
-        activityManagerWrapper = kosmos.activityManagerWrapper
         activityManagerWrapper.mockTopActivityClassName(launcherClassName)
     }
 
@@ -85,7 +92,7 @@
             )
 
             // Put launcher on top
-            kosmos.inWindowLauncherUnlockAnimationRepository.setLauncherActivityClass(
+            testComponent.inWindowLauncherUnlockAnimationRepository.setLauncherActivityClass(
                 launcherClassName
             )
             activityManagerWrapper.mockTopActivityClassName(launcherClassName)
@@ -168,7 +175,7 @@
             )
 
             // Put not launcher on top
-            kosmos.inWindowLauncherUnlockAnimationRepository.setLauncherActivityClass(
+            testComponent.inWindowLauncherUnlockAnimationRepository.setLauncherActivityClass(
                 launcherClassName
             )
             activityManagerWrapper.mockTopActivityClassName("not_launcher")
@@ -245,7 +252,7 @@
             )
 
             // Put launcher on top
-            kosmos.inWindowLauncherUnlockAnimationRepository.setLauncherActivityClass(
+            testComponent.inWindowLauncherUnlockAnimationRepository.setLauncherActivityClass(
                 launcherClassName
             )
             activityManagerWrapper.mockTopActivityClassName(launcherClassName)
@@ -289,7 +296,7 @@
             )
 
             // Put Launcher on top and begin transitioning to GONE.
-            kosmos.inWindowLauncherUnlockAnimationRepository.setLauncherActivityClass(
+            testComponent.inWindowLauncherUnlockAnimationRepository.setLauncherActivityClass(
                 launcherClassName
             )
             activityManagerWrapper.mockTopActivityClassName(launcherClassName)
@@ -309,7 +316,7 @@
                 values
             )
 
-            kosmos.keyguardSurfaceBehindRepository.setSurfaceRemoteAnimationTargetAvailable(true)
+            testComponent.surfaceBehindRepository.setSurfaceRemoteAnimationTargetAvailable(true)
             runCurrent()
 
             assertEquals(
@@ -353,7 +360,7 @@
             )
 
             // Put Launcher on top and begin transitioning to GONE.
-            kosmos.inWindowLauncherUnlockAnimationRepository.setLauncherActivityClass(
+            testComponent.inWindowLauncherUnlockAnimationRepository.setLauncherActivityClass(
                 launcherClassName
             )
             activityManagerWrapper.mockTopActivityClassName(launcherClassName)
@@ -395,7 +402,7 @@
             )
 
             // Put Launcher on top and begin transitioning to GONE.
-            kosmos.inWindowLauncherUnlockAnimationRepository.setLauncherActivityClass(
+            testComponent.inWindowLauncherUnlockAnimationRepository.setLauncherActivityClass(
                 launcherClassName
             )
             activityManagerWrapper.mockTopActivityClassName(launcherClassName)
@@ -420,7 +427,7 @@
                     to = KeyguardState.AOD,
                 )
             )
-            kosmos.keyguardSurfaceBehindRepository.setSurfaceRemoteAnimationTargetAvailable(true)
+            testComponent.surfaceBehindRepository.setSurfaceRemoteAnimationTargetAvailable(true)
             runCurrent()
 
             assertEquals(
@@ -430,4 +437,29 @@
                 values
             )
         }
+
+    @SysUISingleton
+    @Component(
+        modules =
+            [
+                SysUITestModule::class,
+                BiometricsDomainLayerModule::class,
+                UserDomainLayerModule::class,
+            ]
+    )
+    interface TestComponent {
+        val underTest: InWindowLauncherUnlockAnimationInteractor
+        val testScope: TestScope
+        val transitionRepository: FakeKeyguardTransitionRepository
+        val surfaceBehindRepository: FakeKeyguardSurfaceBehindRepository
+        val inWindowLauncherUnlockAnimationRepository: InWindowLauncherUnlockAnimationRepository
+
+        @Component.Factory
+        interface Factory {
+            fun create(
+                @BindsInstance test: SysuiTestCase,
+                mocks: TestMocksModule,
+            ): TestComponent
+        }
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardWakeDirectlyToGoneInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardWakeDirectlyToGoneInteractorTest.kt
deleted file mode 100644
index 22181f8..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardWakeDirectlyToGoneInteractorTest.kt
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.keyguard.domain.interactor
-
-import android.app.AlarmManager
-import android.app.admin.alarmManager
-import android.app.admin.devicePolicyManager
-import android.content.BroadcastReceiver
-import android.content.Intent
-import android.content.mockedContext
-import android.os.PowerManager
-import android.os.UserHandle
-import android.provider.Settings
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.android.internal.widget.lockPatternUtils
-import com.android.systemui.SysuiTestCase
-import com.android.systemui.coroutines.collectValues
-import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
-import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
-import com.android.systemui.keyguard.shared.model.BiometricUnlockMode
-import com.android.systemui.keyguard.shared.model.KeyguardState
-import com.android.systemui.kosmos.testScope
-import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAsleepForTest
-import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest
-import com.android.systemui.power.domain.interactor.powerInteractor
-import com.android.systemui.testKosmos
-import com.android.systemui.util.settings.fakeSettings
-import junit.framework.Assert.assertEquals
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.test.runCurrent
-import kotlinx.coroutines.test.runTest
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.ArgumentMatchers.anyInt
-import org.mockito.ArgumentMatchers.anyLong
-import org.mockito.kotlin.any
-import org.mockito.kotlin.doAnswer
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.verify
-import org.mockito.kotlin.whenever
-
-@OptIn(ExperimentalCoroutinesApi::class)
-@SmallTest
-@RunWith(AndroidJUnit4::class)
-class KeyguardWakeDirectlyToGoneInteractorTest : SysuiTestCase() {
-
-    private var lastRegisteredBroadcastReceiver: BroadcastReceiver? = null
-    private val kosmos =
-        testKosmos().apply {
-            whenever(mockedContext.user).thenReturn(mock<UserHandle>())
-            doAnswer { invocation ->
-                    lastRegisteredBroadcastReceiver = invocation.arguments[0] as BroadcastReceiver
-                }
-                .whenever(mockedContext)
-                .registerReceiver(any(), any(), any(), any(), any())
-        }
-
-    private val testScope = kosmos.testScope
-    private val underTest = kosmos.keyguardWakeDirectlyToGoneInteractor
-    private val lockPatternUtils = kosmos.lockPatternUtils
-    private val repository = kosmos.fakeKeyguardRepository
-    private val transitionRepository = kosmos.fakeKeyguardTransitionRepository
-
-    @Test
-    fun testCanWakeDirectlyToGone_keyguardServiceEnabledThenDisabled() =
-        testScope.runTest {
-            val canWake by collectValues(underTest.canWakeDirectlyToGone)
-
-            assertEquals(
-                listOf(
-                    false, // Defaults to false.
-                ),
-                canWake
-            )
-
-            repository.setKeyguardEnabled(false)
-            runCurrent()
-
-            assertEquals(
-                listOf(
-                    false, // Default to false.
-                    true, // True now that keyguard service is disabled
-                ),
-                canWake
-            )
-
-            repository.setKeyguardEnabled(true)
-            runCurrent()
-
-            assertEquals(
-                listOf(
-                    false,
-                    true,
-                    false,
-                ),
-                canWake
-            )
-        }
-
-    @Test
-    fun testCanWakeDirectlyToGone_lockscreenDisabledThenEnabled() =
-        testScope.runTest {
-            val canWake by collectValues(underTest.canWakeDirectlyToGone)
-
-            assertEquals(
-                listOf(
-                    false, // Defaults to false.
-                ),
-                canWake
-            )
-
-            whenever(lockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(true)
-            runCurrent()
-
-            assertEquals(
-                listOf(
-                    // Still false - isLockScreenDisabled only causes canWakeDirectlyToGone to
-                    // update on the next wake/sleep event.
-                    false,
-                ),
-                canWake
-            )
-
-            kosmos.powerInteractor.setAsleepForTest()
-            runCurrent()
-
-            assertEquals(
-                listOf(
-                    false,
-                    // True since we slept after setting isLockScreenDisabled=true
-                    true,
-                ),
-                canWake
-            )
-
-            kosmos.powerInteractor.setAwakeForTest()
-            runCurrent()
-
-            kosmos.powerInteractor.setAsleepForTest()
-            runCurrent()
-
-            assertEquals(
-                listOf(
-                    false,
-                    true,
-                ),
-                canWake
-            )
-
-            whenever(lockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false)
-            kosmos.powerInteractor.setAwakeForTest()
-            runCurrent()
-
-            assertEquals(
-                listOf(
-                    false,
-                    true,
-                    false,
-                ),
-                canWake
-            )
-        }
-
-    @Test
-    fun testCanWakeDirectlyToGone_wakeAndUnlock() =
-        testScope.runTest {
-            val canWake by collectValues(underTest.canWakeDirectlyToGone)
-
-            assertEquals(
-                listOf(
-                    false, // Defaults to false.
-                ),
-                canWake
-            )
-
-            repository.setBiometricUnlockState(BiometricUnlockMode.WAKE_AND_UNLOCK)
-            runCurrent()
-
-            assertEquals(listOf(false, true), canWake)
-
-            repository.setBiometricUnlockState(BiometricUnlockMode.NONE)
-            runCurrent()
-
-            assertEquals(listOf(false, true, false), canWake)
-        }
-
-    @Test
-    fun testCanWakeDirectlyToGone_andSetsAlarm_ifPowerButtonDoesNotLockImmediately() =
-        testScope.runTest {
-            val canWake by collectValues(underTest.canWakeDirectlyToGone)
-
-            assertEquals(
-                listOf(
-                    false, // Defaults to false.
-                ),
-                canWake
-            )
-
-            repository.setCanIgnoreAuthAndReturnToGone(true)
-            runCurrent()
-
-            assertEquals(listOf(false, true), canWake)
-
-            repository.setCanIgnoreAuthAndReturnToGone(false)
-            runCurrent()
-
-            assertEquals(listOf(false, true, false), canWake)
-        }
-
-    @Test
-    fun testSetsCanIgnoreAuth_andSetsAlarm_whenTimingOut() =
-        testScope.runTest {
-            val canWake by collectValues(underTest.canWakeDirectlyToGone)
-
-            assertEquals(
-                listOf(
-                    false, // Defaults to false.
-                ),
-                canWake
-            )
-
-            whenever(kosmos.devicePolicyManager.getMaximumTimeToLock(eq(null), anyInt()))
-                .thenReturn(-1)
-            kosmos.fakeSettings.putInt(Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT, 500)
-
-            transitionRepository.sendTransitionSteps(
-                from = KeyguardState.LOCKSCREEN,
-                to = KeyguardState.GONE,
-                testScope,
-            )
-
-            kosmos.powerInteractor.setAsleepForTest(
-                sleepReason = PowerManager.GO_TO_SLEEP_REASON_TIMEOUT
-            )
-            runCurrent()
-
-            assertEquals(
-                listOf(
-                    false,
-                    true,
-                ),
-                canWake
-            )
-
-            verify(kosmos.alarmManager)
-                .setExactAndAllowWhileIdle(
-                    eq(AlarmManager.ELAPSED_REALTIME_WAKEUP),
-                    anyLong(),
-                    any(),
-                )
-        }
-
-    @Test
-    fun testCancelsFirstAlarm_onWake_withSecondAlarmSet() =
-        testScope.runTest {
-            val canWake by collectValues(underTest.canWakeDirectlyToGone)
-
-            assertEquals(
-                listOf(
-                    false, // Defaults to false.
-                ),
-                canWake
-            )
-
-            whenever(kosmos.devicePolicyManager.getMaximumTimeToLock(eq(null), anyInt()))
-                .thenReturn(-1)
-            kosmos.fakeSettings.putInt(Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT, 500)
-
-            transitionRepository.sendTransitionSteps(
-                from = KeyguardState.LOCKSCREEN,
-                to = KeyguardState.GONE,
-                testScope,
-            )
-
-            kosmos.powerInteractor.setAsleepForTest(
-                sleepReason = PowerManager.GO_TO_SLEEP_REASON_TIMEOUT
-            )
-            transitionRepository.sendTransitionSteps(
-                from = KeyguardState.LOCKSCREEN,
-                to = KeyguardState.AOD,
-                testScope = testScope,
-            )
-            runCurrent()
-
-            assertEquals(
-                listOf(
-                    false,
-                    // Timed out, so we can ignore auth/return to GONE.
-                    true,
-                ),
-                canWake
-            )
-
-            verify(kosmos.alarmManager)
-                .setExactAndAllowWhileIdle(
-                    eq(AlarmManager.ELAPSED_REALTIME_WAKEUP),
-                    anyLong(),
-                    any(),
-                )
-
-            kosmos.powerInteractor.setAwakeForTest()
-            transitionRepository.sendTransitionSteps(
-                from = KeyguardState.AOD,
-                to = KeyguardState.GONE,
-                testScope = testScope,
-            )
-            runCurrent()
-
-            assertEquals(
-                listOf(
-                    false,
-                    true,
-                    // Should be canceled by the wakeup, but there would still be an
-                    // alarm in flight that should be canceled.
-                    false,
-                ),
-                canWake
-            )
-
-            kosmos.powerInteractor.setAsleepForTest(
-                sleepReason = PowerManager.GO_TO_SLEEP_REASON_TIMEOUT
-            )
-            runCurrent()
-
-            assertEquals(
-                listOf(
-                    false,
-                    true,
-                    false,
-                    // Back to sleep.
-                    true,
-                ),
-                canWake
-            )
-
-            // Simulate the first sleep's alarm coming in.
-            lastRegisteredBroadcastReceiver?.onReceive(
-                kosmos.mockedContext,
-                Intent("com.android.internal.policy.impl.PhoneWindowManager.DELAYED_KEYGUARD")
-            )
-            runCurrent()
-
-            // It should not have any effect.
-            assertEquals(
-                listOf(
-                    false,
-                    true,
-                    false,
-                    true,
-                ),
-                canWake
-            )
-        }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/InWindowLauncherUnlockAnimationManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/InWindowLauncherUnlockAnimationManagerTest.kt
index 0cfc20d..c7f4416 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/InWindowLauncherUnlockAnimationManagerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/InWindowLauncherUnlockAnimationManagerTest.kt
@@ -18,15 +18,17 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
+import com.android.systemui.SysUITestModule
 import com.android.systemui.SysuiTestCase
-import com.android.systemui.keyguard.domain.interactor.inWindowLauncherUnlockAnimationInteractor
+import com.android.systemui.biometrics.domain.BiometricsDomainLayerModule
+import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.keyguard.ui.view.InWindowLauncherUnlockAnimationManager
-import com.android.systemui.keyguard.ui.viewmodel.InWindowLauncherAnimationViewModel
-import com.android.systemui.kosmos.applicationCoroutineScope
-import com.android.systemui.kosmos.testScope
 import com.android.systemui.shared.system.smartspace.ILauncherUnlockAnimationController
-import com.android.systemui.testKosmos
+import com.android.systemui.user.domain.UserDomainLayerModule
 import com.android.systemui.util.mockito.any
+import dagger.BindsInstance
+import dagger.Component
+import kotlinx.coroutines.test.TestScope
 import kotlinx.coroutines.test.runTest
 import org.junit.Before
 import org.junit.Test
@@ -43,9 +45,10 @@
 @RunWith(AndroidJUnit4::class)
 @kotlinx.coroutines.ExperimentalCoroutinesApi
 class InWindowLauncherUnlockAnimationManagerTest : SysuiTestCase() {
-    private val kosmos = testKosmos()
     private lateinit var underTest: InWindowLauncherUnlockAnimationManager
-    private val testScope = kosmos.testScope
+
+    private lateinit var testComponent: TestComponent
+    private lateinit var testScope: TestScope
 
     @Mock private lateinit var launcherUnlockAnimationController: ILauncherUnlockAnimationController
 
@@ -53,14 +56,14 @@
     fun setUp() {
         MockitoAnnotations.initMocks(this)
 
-        underTest =
-            InWindowLauncherUnlockAnimationManager(
-                kosmos.inWindowLauncherUnlockAnimationInteractor,
-                InWindowLauncherAnimationViewModel(
-                    kosmos.inWindowLauncherUnlockAnimationInteractor
-                ),
-                kosmos.applicationCoroutineScope
-            )
+        testComponent =
+            DaggerInWindowLauncherUnlockAnimationManagerTest_TestComponent.factory()
+                .create(
+                    test = this,
+                )
+        underTest = testComponent.underTest
+        testScope = testComponent.testScope
+
         underTest.setLauncherUnlockController("launcherClass", launcherUnlockAnimationController)
     }
 
@@ -111,4 +114,25 @@
 
             verifyNoMoreInteractions(launcherUnlockAnimationController)
         }
+
+    @SysUISingleton
+    @Component(
+        modules =
+            [
+                SysUITestModule::class,
+                BiometricsDomainLayerModule::class,
+                UserDomainLayerModule::class,
+            ]
+    )
+    interface TestComponent {
+        val underTest: InWindowLauncherUnlockAnimationManager
+        val testScope: TestScope
+
+        @Component.Factory
+        interface Factory {
+            fun create(
+                @BindsInstance test: SysuiTestCase,
+            ): TestComponent
+        }
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
index 9e6a498..69e8f47 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
@@ -6,23 +6,26 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
 import com.android.systemui.ExpandHelper
+import com.android.systemui.SysUITestModule
 import com.android.systemui.SysuiTestCase
+import com.android.systemui.TestMocksModule
+import com.android.systemui.biometrics.domain.BiometricsDomainLayerModule
 import com.android.systemui.classifier.FalsingCollectorFake
 import com.android.systemui.classifier.FalsingManagerFake
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.flags.FakeFeatureFlagsClassicModule
 import com.android.systemui.flags.Flags
-import com.android.systemui.flags.fakeFeatureFlagsClassic
 import com.android.systemui.keyguard.domain.interactor.NaturalScrollingSettingObserver
-import com.android.systemui.kosmos.testScope
 import com.android.systemui.media.controls.ui.controller.MediaHierarchyManager
 import com.android.systemui.plugins.qs.QS
+import com.android.systemui.power.domain.interactor.PowerInteractor
 import com.android.systemui.qs.ui.adapter.FakeQSSceneAdapter
 import com.android.systemui.res.R
-import com.android.systemui.shade.data.repository.shadeRepository
 import com.android.systemui.shade.domain.interactor.ShadeLockscreenInteractor
-import com.android.systemui.shade.domain.interactor.shadeInteractor
+import com.android.systemui.shade.data.repository.FakeShadeRepository
+import com.android.systemui.shade.domain.interactor.ShadeInteractor
 import com.android.systemui.statusbar.disableflags.data.model.DisableFlagsModel
-import com.android.systemui.statusbar.disableflags.data.repository.disableFlagsRepository
-import com.android.systemui.statusbar.disableflags.data.repository.fakeDisableFlagsRepository
+import com.android.systemui.statusbar.disableflags.data.repository.FakeDisableFlagsRepository
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
 import com.android.systemui.statusbar.notification.row.NotificationTestHelper
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
@@ -30,16 +33,17 @@
 import com.android.systemui.statusbar.phone.CentralSurfaces
 import com.android.systemui.statusbar.phone.KeyguardBypassController
 import com.android.systemui.statusbar.phone.ScrimController
+import com.android.systemui.statusbar.policy.FakeConfigurationController
 import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController
-import com.android.systemui.statusbar.policy.configurationController
-import com.android.systemui.statusbar.policy.fakeConfigurationController
-import com.android.systemui.testKosmos
+import com.android.systemui.user.domain.UserDomainLayerModule
 import com.android.systemui.util.mockito.any
 import com.android.systemui.util.mockito.argumentCaptor
 import com.android.systemui.util.mockito.mock
+import dagger.BindsInstance
+import dagger.Component
 import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.TestScope
 import kotlinx.coroutines.test.runCurrent
-import kotlinx.coroutines.test.runTest
 import org.junit.After
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertNotNull
@@ -61,8 +65,8 @@
 import org.mockito.Mockito.never
 import org.mockito.Mockito.verify
 import org.mockito.Mockito.verifyZeroInteractions
-import org.mockito.Mockito.`when` as whenever
 import org.mockito.junit.MockitoJUnit
+import org.mockito.Mockito.`when` as whenever
 
 private fun <T> anyObject(): T {
     return Mockito.anyObject<T>()
@@ -73,14 +77,15 @@
 @RunWith(AndroidJUnit4::class)
 @OptIn(ExperimentalCoroutinesApi::class)
 class LockscreenShadeTransitionControllerTest : SysuiTestCase() {
-    private val kosmos =
-        testKosmos().apply {
-            fakeFeatureFlagsClassic.apply { set(Flags.FULL_SCREEN_USER_SWITCHER, false) }
-        }
+
     private lateinit var transitionController: LockscreenShadeTransitionController
-    private val configurationController = kosmos.fakeConfigurationController
-    private val disableFlagsRepository = kosmos.fakeDisableFlagsRepository
-    private val testScope = kosmos.testScope
+    private lateinit var testComponent: TestComponent
+    private val configurationController
+        get() = testComponent.configurationController
+    private val disableFlagsRepository
+        get() = testComponent.disableFlagsRepository
+    private val testScope
+        get() = testComponent.testScope
 
     private val qsSceneAdapter = FakeQSSceneAdapter({ mock() })
 
@@ -129,6 +134,26 @@
         whenever(keyguardBypassController.bypassEnabled).thenReturn(false)
         whenever(naturalScrollingSettingObserver.isNaturalScrollingEnabled).thenReturn(true)
 
+        testComponent =
+            DaggerLockscreenShadeTransitionControllerTest_TestComponent.factory()
+                .create(
+                    test = this,
+                    featureFlags =
+                        FakeFeatureFlagsClassicModule {
+                            set(Flags.FULL_SCREEN_USER_SWITCHER, false)
+                        },
+                    mocks =
+                        TestMocksModule(
+                            notificationShadeDepthController = depthController,
+                            keyguardBypassController = keyguardBypassController,
+                            mediaHierarchyManager = mediaHierarchyManager,
+                            notificationLockscreenUserManager = lockScreenUserManager,
+                            notificationStackScrollLayoutController = nsslController,
+                            scrimController = scrimController,
+                            statusBarStateController = statusbarStateController,
+                        )
+                )
+
         transitionController =
             LockscreenShadeTransitionController(
                 statusBarStateController = statusbarStateController,
@@ -166,10 +191,10 @@
                 falsingManager = FalsingManagerFake(),
                 dumpManager = mock(),
                 qsTransitionControllerFactory = { qsTransitionController },
-                shadeRepository = kosmos.shadeRepository,
-                shadeInteractor = kosmos.shadeInteractor,
+                shadeRepository = testComponent.shadeRepository,
+                shadeInteractor = testComponent.shadeInteractor,
                 splitShadeStateController = ResourcesSplitShadeStateController(),
-                shadeLockscreenInteractorLazy = { shadeLockscreenInteractor },
+                shadeLockscreenInteractorLazy = {shadeLockscreenInteractor},
                 naturalScrollingSettingObserver = naturalScrollingSettingObserver,
                 lazyQSSceneAdapter = { qsSceneAdapter }
             )
@@ -189,424 +214,387 @@
     }
 
     @Test
-    fun testCantDragDownWhenQSExpanded() =
-        testScope.runTest {
-            assertTrue("Can't drag down on keyguard", transitionController.canDragDown())
-            whenever(qS.isFullyCollapsed).thenReturn(false)
-            assertFalse("Can drag down when QS is expanded", transitionController.canDragDown())
-        }
+    fun testCantDragDownWhenQSExpanded() {
+        assertTrue("Can't drag down on keyguard", transitionController.canDragDown())
+        whenever(qS.isFullyCollapsed).thenReturn(false)
+        assertFalse("Can drag down when QS is expanded", transitionController.canDragDown())
+    }
 
     @Test
-    fun testCanDragDownInLockedDownShade() =
-        testScope.runTest {
-            whenever(statusbarStateController.state).thenReturn(StatusBarState.SHADE_LOCKED)
-            assertFalse("Can drag down in shade locked", transitionController.canDragDown())
-            whenever(nsslController.isInLockedDownShade).thenReturn(true)
-            assertTrue("Can't drag down in locked down shade", transitionController.canDragDown())
-        }
+    fun testCanDragDownInLockedDownShade() {
+        whenever(statusbarStateController.state).thenReturn(StatusBarState.SHADE_LOCKED)
+        assertFalse("Can drag down in shade locked", transitionController.canDragDown())
+        whenever(nsslController.isInLockedDownShade).thenReturn(true)
+        assertTrue("Can't drag down in locked down shade", transitionController.canDragDown())
+    }
 
     @Test
-    fun testGoingToLockedShade() =
-        testScope.runTest {
-            transitionController.goToLockedShade(null)
-            verify(statusbarStateController).setState(StatusBarState.SHADE_LOCKED)
-        }
+    fun testGoingToLockedShade() {
+        transitionController.goToLockedShade(null)
+        verify(statusbarStateController).setState(StatusBarState.SHADE_LOCKED)
+    }
 
     @Test
-    fun testWakingToShadeLockedWhenDozing() =
-        testScope.runTest {
-            whenever(statusbarStateController.isDozing).thenReturn(true)
-            transitionController.goToLockedShade(null)
-            verify(statusbarStateController).setState(StatusBarState.SHADE_LOCKED)
-            assertTrue("Not waking to shade locked", transitionController.isWakingToShadeLocked)
-        }
+    fun testWakingToShadeLockedWhenDozing() {
+        whenever(statusbarStateController.isDozing).thenReturn(true)
+        transitionController.goToLockedShade(null)
+        verify(statusbarStateController).setState(StatusBarState.SHADE_LOCKED)
+        assertTrue("Not waking to shade locked", transitionController.isWakingToShadeLocked)
+    }
 
     @Test
-    fun testNotWakingToShadeLockedWhenNotDozing() =
-        testScope.runTest {
-            whenever(statusbarStateController.isDozing).thenReturn(false)
-            transitionController.goToLockedShade(null)
-            verify(statusbarStateController).setState(StatusBarState.SHADE_LOCKED)
-            assertFalse(
-                "Waking to shade locked when not dozing",
-                transitionController.isWakingToShadeLocked
+    fun testNotWakingToShadeLockedWhenNotDozing() {
+        whenever(statusbarStateController.isDozing).thenReturn(false)
+        transitionController.goToLockedShade(null)
+        verify(statusbarStateController).setState(StatusBarState.SHADE_LOCKED)
+        assertFalse(
+            "Waking to shade locked when not dozing",
+            transitionController.isWakingToShadeLocked
+        )
+    }
+
+    @Test
+    fun testGoToLockedShadeOnlyOnKeyguard() {
+        whenever(statusbarStateController.state).thenReturn(StatusBarState.SHADE_LOCKED)
+        transitionController.goToLockedShade(null)
+        whenever(statusbarStateController.state).thenReturn(StatusBarState.SHADE)
+        transitionController.goToLockedShade(null)
+        verify(statusbarStateController, never()).setState(anyInt())
+    }
+
+    @Test
+    fun testDontGoWhenShadeDisabled() {
+        disableFlagsRepository.disableFlags.value =
+            DisableFlagsModel(
+                disable2 = DISABLE2_NOTIFICATION_SHADE,
             )
-        }
+        testScope.runCurrent()
+        transitionController.goToLockedShade(null)
+        verify(statusbarStateController, never()).setState(anyInt())
+    }
 
     @Test
-    fun testGoToLockedShadeOnlyOnKeyguard() =
-        testScope.runTest {
-            whenever(statusbarStateController.state).thenReturn(StatusBarState.SHADE_LOCKED)
-            transitionController.goToLockedShade(null)
-            whenever(statusbarStateController.state).thenReturn(StatusBarState.SHADE)
-            transitionController.goToLockedShade(null)
-            verify(statusbarStateController, never()).setState(anyInt())
-        }
+    fun testUserExpandsViewOnGoingToFullShade() {
+        assertFalse("Row shouldn't be user expanded yet", row.isUserExpanded)
+        transitionController.goToLockedShade(row)
+        assertTrue("Row wasn't user expanded on drag down", row.isUserExpanded)
+    }
 
     @Test
-    fun testDontGoWhenShadeDisabled() =
-        testScope.runTest {
-            disableFlagsRepository.disableFlags.value =
-                DisableFlagsModel(
-                    disable2 = DISABLE2_NOTIFICATION_SHADE,
-                )
-            testScope.runCurrent()
-            transitionController.goToLockedShade(null)
-            verify(statusbarStateController, never()).setState(anyInt())
-        }
+    fun testTriggeringBouncerNoNotificationsOnLockscreen() {
+        whenever(lockScreenUserManager.shouldShowLockscreenNotifications()).thenReturn(false)
+        transitionController.goToLockedShade(null)
+        verify(statusbarStateController, never()).setState(anyInt())
+        verify(statusbarStateController).setLeaveOpenOnKeyguardHide(true)
+        verify(centralSurfaces).showBouncerWithDimissAndCancelIfKeyguard(anyObject(), anyObject())
+    }
 
     @Test
-    fun testUserExpandsViewOnGoingToFullShade() =
-        testScope.runTest {
-            assertFalse("Row shouldn't be user expanded yet", row.isUserExpanded)
-            transitionController.goToLockedShade(row)
-            assertTrue("Row wasn't user expanded on drag down", row.isUserExpanded)
-        }
+    fun testGoToLockedShadeCreatesQSAnimation() {
+        transitionController.goToLockedShade(null)
+        verify(statusbarStateController).setState(StatusBarState.SHADE_LOCKED)
+        verify(shadeLockscreenInteractor).transitionToExpandedShade(anyLong())
+        assertNotNull(transitionController.dragDownAnimator)
+    }
 
     @Test
-    fun testTriggeringBouncerNoNotificationsOnLockscreen() =
-        testScope.runTest {
-            whenever(lockScreenUserManager.shouldShowLockscreenNotifications()).thenReturn(false)
-            transitionController.goToLockedShade(null)
-            verify(statusbarStateController, never()).setState(anyInt())
-            verify(statusbarStateController).setLeaveOpenOnKeyguardHide(true)
-            verify(centralSurfaces)
-                .showBouncerWithDimissAndCancelIfKeyguard(anyObject(), anyObject())
-        }
+    fun testGoToLockedShadeDoesntCreateQSAnimation() {
+        transitionController.goToLockedShade(null, needsQSAnimation = false)
+        verify(statusbarStateController).setState(StatusBarState.SHADE_LOCKED)
+        verify(shadeLockscreenInteractor).transitionToExpandedShade(anyLong())
+        assertNull(transitionController.dragDownAnimator)
+    }
 
     @Test
-    fun testGoToLockedShadeCreatesQSAnimation() =
-        testScope.runTest {
-            transitionController.goToLockedShade(null)
-            verify(statusbarStateController).setState(StatusBarState.SHADE_LOCKED)
-            verify(shadeLockscreenInteractor).transitionToExpandedShade(anyLong())
-            assertNotNull(transitionController.dragDownAnimator)
-        }
+    fun testGoToLockedShadeAlwaysCreatesQSAnimationInSplitShade() {
+        enableSplitShade()
+        transitionController.goToLockedShade(null, needsQSAnimation = true)
+        verify(shadeLockscreenInteractor).transitionToExpandedShade(anyLong())
+        assertNotNull(transitionController.dragDownAnimator)
+    }
 
     @Test
-    fun testGoToLockedShadeDoesntCreateQSAnimation() =
-        testScope.runTest {
-            transitionController.goToLockedShade(null, needsQSAnimation = false)
-            verify(statusbarStateController).setState(StatusBarState.SHADE_LOCKED)
-            verify(shadeLockscreenInteractor).transitionToExpandedShade(anyLong())
-            assertNull(transitionController.dragDownAnimator)
-        }
+    fun testGoToLockedShadeCancelDoesntLeaveShadeOpenOnKeyguardHide() {
+        whenever(lockScreenUserManager.shouldShowLockscreenNotifications()).thenReturn(false)
+        whenever(lockScreenUserManager.isLockscreenPublicMode(any())).thenReturn(true)
+        transitionController.goToLockedShade(null)
+        val captor = argumentCaptor<Runnable>()
+        verify(centralSurfaces).showBouncerWithDimissAndCancelIfKeyguard(isNull(), captor.capture())
+        captor.value.run()
+        verify(statusbarStateController).setLeaveOpenOnKeyguardHide(false)
+    }
 
     @Test
-    fun testGoToLockedShadeAlwaysCreatesQSAnimationInSplitShade() =
-        testScope.runTest {
-            enableSplitShade()
-            transitionController.goToLockedShade(null, needsQSAnimation = true)
-            verify(shadeLockscreenInteractor).transitionToExpandedShade(anyLong())
-            assertNotNull(transitionController.dragDownAnimator)
-        }
+    fun testDragDownAmountDoesntCallOutInLockedDownShade() {
+        whenever(nsslController.isInLockedDownShade).thenReturn(true)
+        transitionController.dragDownAmount = 10f
+        verify(nsslController, never()).setTransitionToFullShadeAmount(anyFloat())
+        verify(mediaHierarchyManager, never()).setTransitionToFullShadeAmount(anyFloat())
+        verify(scrimController, never()).setTransitionToFullShadeProgress(anyFloat(), anyFloat())
+        verify(transitionControllerCallback, never())
+            .setTransitionToFullShadeAmount(anyFloat(), anyBoolean(), anyLong())
+        verify(qsTransitionController, never()).dragDownAmount = anyFloat()
+    }
 
     @Test
-    fun testGoToLockedShadeCancelDoesntLeaveShadeOpenOnKeyguardHide() =
-        testScope.runTest {
-            whenever(lockScreenUserManager.shouldShowLockscreenNotifications()).thenReturn(false)
-            whenever(lockScreenUserManager.isLockscreenPublicMode(any())).thenReturn(true)
-            transitionController.goToLockedShade(null)
-            val captor = argumentCaptor<Runnable>()
-            verify(centralSurfaces)
-                .showBouncerWithDimissAndCancelIfKeyguard(isNull(), captor.capture())
-            captor.value.run()
-            verify(statusbarStateController).setLeaveOpenOnKeyguardHide(false)
-        }
+    fun testDragDownAmountCallsOut() {
+        transitionController.dragDownAmount = 10f
+        verify(nsslController).setTransitionToFullShadeAmount(anyFloat())
+        verify(mediaHierarchyManager).setTransitionToFullShadeAmount(anyFloat())
+        verify(scrimController).setTransitionToFullShadeProgress(anyFloat(), anyFloat())
+        verify(transitionControllerCallback)
+            .setTransitionToFullShadeAmount(anyFloat(), anyBoolean(), anyLong())
+        verify(qsTransitionController).dragDownAmount = 10f
+        verify(depthController).transitionToFullShadeProgress = anyFloat()
+    }
 
     @Test
-    fun testDragDownAmountDoesntCallOutInLockedDownShade() =
-        testScope.runTest {
-            whenever(nsslController.isInLockedDownShade).thenReturn(true)
-            transitionController.dragDownAmount = 10f
-            verify(nsslController, never()).setTransitionToFullShadeAmount(anyFloat())
-            verify(mediaHierarchyManager, never()).setTransitionToFullShadeAmount(anyFloat())
-            verify(scrimController, never())
-                .setTransitionToFullShadeProgress(anyFloat(), anyFloat())
-            verify(transitionControllerCallback, never())
-                .setTransitionToFullShadeAmount(anyFloat(), anyBoolean(), anyLong())
-            verify(qsTransitionController, never()).dragDownAmount = anyFloat()
-        }
+    fun testDragDownAmount_depthDistanceIsZero_setsProgressToZero() {
+        context
+            .getOrCreateTestableResources()
+            .addOverride(R.dimen.lockscreen_shade_depth_controller_transition_distance, 0)
+        configurationController.notifyConfigurationChanged()
+
+        transitionController.dragDownAmount = 10f
+
+        verify(depthController).transitionToFullShadeProgress = 0f
+    }
 
     @Test
-    fun testDragDownAmountCallsOut() =
-        testScope.runTest {
-            transitionController.dragDownAmount = 10f
-            verify(nsslController).setTransitionToFullShadeAmount(anyFloat())
-            verify(mediaHierarchyManager).setTransitionToFullShadeAmount(anyFloat())
-            verify(scrimController).setTransitionToFullShadeProgress(anyFloat(), anyFloat())
-            verify(transitionControllerCallback)
-                .setTransitionToFullShadeAmount(anyFloat(), anyBoolean(), anyLong())
-            verify(qsTransitionController).dragDownAmount = 10f
-            verify(depthController).transitionToFullShadeProgress = anyFloat()
-        }
+    fun testDragDownAmount_depthDistanceNonZero_setsProgressBasedOnDistance() {
+        context
+            .getOrCreateTestableResources()
+            .addOverride(R.dimen.lockscreen_shade_depth_controller_transition_distance, 100)
+        configurationController.notifyConfigurationChanged()
+
+        transitionController.dragDownAmount = 10f
+
+        verify(depthController).transitionToFullShadeProgress = 0.1f
+    }
 
     @Test
-    fun testDragDownAmount_depthDistanceIsZero_setsProgressToZero() =
-        testScope.runTest {
-            context
-                .getOrCreateTestableResources()
-                .addOverride(R.dimen.lockscreen_shade_depth_controller_transition_distance, 0)
-            configurationController.notifyConfigurationChanged()
+    fun setDragAmount_setsKeyguardTransitionProgress() {
+        transitionController.dragDownAmount = 10f
 
-            transitionController.dragDownAmount = 10f
-
-            verify(depthController).transitionToFullShadeProgress = 0f
-        }
+        verify(shadeLockscreenInteractor).setKeyguardTransitionProgress(anyFloat(), anyInt())
+    }
 
     @Test
-    fun testDragDownAmount_depthDistanceNonZero_setsProgressBasedOnDistance() =
-        testScope.runTest {
-            context
-                .getOrCreateTestableResources()
-                .addOverride(R.dimen.lockscreen_shade_depth_controller_transition_distance, 100)
-            configurationController.notifyConfigurationChanged()
+    fun setDragAmount_setsKeyguardAlphaBasedOnDistance() {
+        val alphaDistance =
+            context.resources.getDimensionPixelSize(
+                R.dimen.lockscreen_shade_npvc_keyguard_content_alpha_transition_distance
+            )
+        transitionController.dragDownAmount = 10f
 
-            transitionController.dragDownAmount = 10f
-
-            verify(depthController).transitionToFullShadeProgress = 0.1f
-        }
+        val expectedAlpha = 1 - 10f / alphaDistance
+        verify(shadeLockscreenInteractor).setKeyguardTransitionProgress(eq(expectedAlpha), anyInt())
+    }
 
     @Test
-    fun setDragAmount_setsKeyguardTransitionProgress() =
-        testScope.runTest {
-            transitionController.dragDownAmount = 10f
+    fun setDragAmount_notInSplitShade_setsKeyguardTranslationToZero() {
+        val mediaTranslationY = 123
+        disableSplitShade()
+        whenever(mediaHierarchyManager.isCurrentlyInGuidedTransformation()).thenReturn(true)
+        whenever(mediaHierarchyManager.getGuidedTransformationTranslationY())
+            .thenReturn(mediaTranslationY)
 
-            verify(shadeLockscreenInteractor).setKeyguardTransitionProgress(anyFloat(), anyInt())
-        }
+        transitionController.dragDownAmount = 10f
+
+        verify(shadeLockscreenInteractor).setKeyguardTransitionProgress(anyFloat(), eq(0))
+    }
 
     @Test
-    fun setDragAmount_setsKeyguardAlphaBasedOnDistance() =
-        testScope.runTest {
-            val alphaDistance =
-                context.resources.getDimensionPixelSize(
-                    R.dimen.lockscreen_shade_npvc_keyguard_content_alpha_transition_distance
-                )
-            transitionController.dragDownAmount = 10f
+    fun setDragAmount_inSplitShade_setsKeyguardTranslationBasedOnMediaTranslation() {
+        val mediaTranslationY = 123
+        enableSplitShade()
+        whenever(mediaHierarchyManager.isCurrentlyInGuidedTransformation()).thenReturn(true)
+        whenever(mediaHierarchyManager.getGuidedTransformationTranslationY())
+            .thenReturn(mediaTranslationY)
 
-            val expectedAlpha = 1 - 10f / alphaDistance
-            verify(shadeLockscreenInteractor)
-                .setKeyguardTransitionProgress(eq(expectedAlpha), anyInt())
-        }
+        transitionController.dragDownAmount = 10f
 
-    @Test
-    fun setDragAmount_notInSplitShade_setsKeyguardTranslationToZero() =
-        testScope.runTest {
-            val mediaTranslationY = 123
-            disableSplitShade()
-            whenever(mediaHierarchyManager.isCurrentlyInGuidedTransformation()).thenReturn(true)
-            whenever(mediaHierarchyManager.getGuidedTransformationTranslationY())
-                .thenReturn(mediaTranslationY)
-
-            transitionController.dragDownAmount = 10f
-
-            verify(shadeLockscreenInteractor).setKeyguardTransitionProgress(anyFloat(), eq(0))
-        }
-
-    @Test
-    fun setDragAmount_inSplitShade_setsKeyguardTranslationBasedOnMediaTranslation() =
-        testScope.runTest {
-            val mediaTranslationY = 123
-            enableSplitShade()
-            whenever(mediaHierarchyManager.isCurrentlyInGuidedTransformation()).thenReturn(true)
-            whenever(mediaHierarchyManager.getGuidedTransformationTranslationY())
-                .thenReturn(mediaTranslationY)
-
-            transitionController.dragDownAmount = 10f
-
-            verify(shadeLockscreenInteractor)
+        verify(shadeLockscreenInteractor)
                 .setKeyguardTransitionProgress(anyFloat(), eq(mediaTranslationY))
-        }
+    }
 
     @Test
-    fun setDragAmount_inSplitShade_mediaNotShowing_setsKeyguardTranslationBasedOnDistance() =
-        testScope.runTest {
-            enableSplitShade()
-            whenever(mediaHierarchyManager.isCurrentlyInGuidedTransformation()).thenReturn(false)
-            whenever(mediaHierarchyManager.getGuidedTransformationTranslationY()).thenReturn(123)
+    fun setDragAmount_inSplitShade_mediaNotShowing_setsKeyguardTranslationBasedOnDistance() {
+        enableSplitShade()
+        whenever(mediaHierarchyManager.isCurrentlyInGuidedTransformation()).thenReturn(false)
+        whenever(mediaHierarchyManager.getGuidedTransformationTranslationY()).thenReturn(123)
 
-            transitionController.dragDownAmount = 10f
+        transitionController.dragDownAmount = 10f
 
-            val distance =
-                context.resources.getDimensionPixelSize(
-                    R.dimen.lockscreen_shade_keyguard_transition_distance
-                )
-            val offset =
-                context.resources.getDimensionPixelSize(
-                    R.dimen.lockscreen_shade_keyguard_transition_vertical_offset
-                )
-            val expectedTranslation = 10f / distance * offset
-            verify(shadeLockscreenInteractor)
-                .setKeyguardTransitionProgress(anyFloat(), eq(expectedTranslation.toInt()))
-        }
-
-    @Test
-    fun setDragDownAmount_setsValueOnMediaHierarchyManager() =
-        testScope.runTest {
-            transitionController.dragDownAmount = 10f
-
-            verify(mediaHierarchyManager).setTransitionToFullShadeAmount(10f)
-        }
-
-    @Test
-    fun setDragAmount_setsScrimProgressBasedOnScrimDistance() =
-        testScope.runTest {
-            val distance = 10
-            context.orCreateTestableResources.addOverride(
-                R.dimen.lockscreen_shade_scrim_transition_distance,
-                distance
+        val distance =
+            context.resources.getDimensionPixelSize(
+                R.dimen.lockscreen_shade_keyguard_transition_distance
             )
-            configurationController.notifyConfigurationChanged()
-
-            transitionController.dragDownAmount = 5f
-
-            verify(scrimController)
-                .transitionToFullShadeProgress(
-                    progress = eq(0.5f),
-                    lockScreenNotificationsProgress = anyFloat()
-                )
-        }
-
-    @Test
-    fun setDragAmount_setsNotificationsScrimProgressBasedOnNotificationsScrimDistanceAndDelay() =
-        testScope.runTest {
-            val distance = 100
-            val delay = 10
-            context.orCreateTestableResources.addOverride(
-                R.dimen.lockscreen_shade_notifications_scrim_transition_distance,
-                distance
+        val offset =
+            context.resources.getDimensionPixelSize(
+                R.dimen.lockscreen_shade_keyguard_transition_vertical_offset
             )
-            context.orCreateTestableResources.addOverride(
-                R.dimen.lockscreen_shade_notifications_scrim_transition_delay,
-                delay
+        val expectedTranslation = 10f / distance * offset
+        verify(shadeLockscreenInteractor)
+            .setKeyguardTransitionProgress(anyFloat(), eq(expectedTranslation.toInt()))
+    }
+
+    @Test
+    fun setDragDownAmount_setsValueOnMediaHierarchyManager() {
+        transitionController.dragDownAmount = 10f
+
+        verify(mediaHierarchyManager).setTransitionToFullShadeAmount(10f)
+    }
+
+    @Test
+    fun setDragAmount_setsScrimProgressBasedOnScrimDistance() {
+        val distance = 10
+        context.orCreateTestableResources.addOverride(
+            R.dimen.lockscreen_shade_scrim_transition_distance,
+            distance
+        )
+        configurationController.notifyConfigurationChanged()
+
+        transitionController.dragDownAmount = 5f
+
+        verify(scrimController)
+            .transitionToFullShadeProgress(
+                progress = eq(0.5f),
+                lockScreenNotificationsProgress = anyFloat()
             )
-            configurationController.notifyConfigurationChanged()
-
-            transitionController.dragDownAmount = 20f
-
-            verify(scrimController)
-                .transitionToFullShadeProgress(
-                    progress = anyFloat(),
-                    lockScreenNotificationsProgress = eq(0.1f)
-                )
-        }
+    }
 
     @Test
-    fun setDragAmount_dragAmountLessThanNotifDelayDistance_setsNotificationsScrimProgressToZero() =
-        testScope.runTest {
-            val distance = 100
-            val delay = 50
-            context.orCreateTestableResources.addOverride(
-                R.dimen.lockscreen_shade_notifications_scrim_transition_distance,
-                distance
+    fun setDragAmount_setsNotificationsScrimProgressBasedOnNotificationsScrimDistanceAndDelay() {
+        val distance = 100
+        val delay = 10
+        context.orCreateTestableResources.addOverride(
+            R.dimen.lockscreen_shade_notifications_scrim_transition_distance,
+            distance
+        )
+        context.orCreateTestableResources.addOverride(
+            R.dimen.lockscreen_shade_notifications_scrim_transition_delay,
+            delay
+        )
+        configurationController.notifyConfigurationChanged()
+
+        transitionController.dragDownAmount = 20f
+
+        verify(scrimController)
+            .transitionToFullShadeProgress(
+                progress = anyFloat(),
+                lockScreenNotificationsProgress = eq(0.1f)
             )
-            context.orCreateTestableResources.addOverride(
-                R.dimen.lockscreen_shade_notifications_scrim_transition_delay,
-                delay
+    }
+
+    @Test
+    fun setDragAmount_dragAmountLessThanNotifDelayDistance_setsNotificationsScrimProgressToZero() {
+        val distance = 100
+        val delay = 50
+        context.orCreateTestableResources.addOverride(
+            R.dimen.lockscreen_shade_notifications_scrim_transition_distance,
+            distance
+        )
+        context.orCreateTestableResources.addOverride(
+            R.dimen.lockscreen_shade_notifications_scrim_transition_delay,
+            delay
+        )
+        configurationController.notifyConfigurationChanged()
+
+        transitionController.dragDownAmount = 20f
+
+        verify(scrimController)
+            .transitionToFullShadeProgress(
+                progress = anyFloat(),
+                lockScreenNotificationsProgress = eq(0f)
             )
-            configurationController.notifyConfigurationChanged()
-
-            transitionController.dragDownAmount = 20f
-
-            verify(scrimController)
-                .transitionToFullShadeProgress(
-                    progress = anyFloat(),
-                    lockScreenNotificationsProgress = eq(0f)
-                )
-        }
+    }
 
     @Test
-    fun setDragAmount_dragAmountMoreThanTotalDistance_setsNotificationsScrimProgressToOne() =
-        testScope.runTest {
-            val distance = 100
-            val delay = 50
-            context.orCreateTestableResources.addOverride(
-                R.dimen.lockscreen_shade_notifications_scrim_transition_distance,
-                distance
+    fun setDragAmount_dragAmountMoreThanTotalDistance_setsNotificationsScrimProgressToOne() {
+        val distance = 100
+        val delay = 50
+        context.orCreateTestableResources.addOverride(
+            R.dimen.lockscreen_shade_notifications_scrim_transition_distance,
+            distance
+        )
+        context.orCreateTestableResources.addOverride(
+            R.dimen.lockscreen_shade_notifications_scrim_transition_delay,
+            delay
+        )
+        configurationController.notifyConfigurationChanged()
+
+        transitionController.dragDownAmount = 999999f
+
+        verify(scrimController)
+            .transitionToFullShadeProgress(
+                progress = anyFloat(),
+                lockScreenNotificationsProgress = eq(1f)
             )
-            context.orCreateTestableResources.addOverride(
-                R.dimen.lockscreen_shade_notifications_scrim_transition_delay,
-                delay
+    }
+
+    @Test
+    fun setDragDownAmount_inSplitShade_setsValueOnMediaHierarchyManager() {
+        enableSplitShade()
+
+        transitionController.dragDownAmount = 10f
+
+        verify(mediaHierarchyManager).setTransitionToFullShadeAmount(10f)
+    }
+
+    @Test
+    fun setDragAmount_notInSplitShade_forwardsToSingleShadeOverScroller() {
+        disableSplitShade()
+
+        transitionController.dragDownAmount = 10f
+
+        verify(singleShadeOverScroller).expansionDragDownAmount = 10f
+        verifyZeroInteractions(splitShadeOverScroller)
+    }
+
+    @Test
+    fun setDragAmount_inSplitShade_forwardsToSplitShadeOverScroller() {
+        enableSplitShade()
+
+        transitionController.dragDownAmount = 10f
+
+        verify(splitShadeOverScroller).expansionDragDownAmount = 10f
+        verifyZeroInteractions(singleShadeOverScroller)
+    }
+
+    @Test
+    fun setDragDownAmount_inSplitShade_setsKeyguardStatusBarAlphaBasedOnDistance() {
+        val alphaDistance =
+            context.resources.getDimensionPixelSize(
+                R.dimen.lockscreen_shade_npvc_keyguard_content_alpha_transition_distance
             )
-            configurationController.notifyConfigurationChanged()
+        val dragDownAmount = 10f
+        enableSplitShade()
 
-            transitionController.dragDownAmount = 999999f
+        transitionController.dragDownAmount = dragDownAmount
 
-            verify(scrimController)
-                .transitionToFullShadeProgress(
-                    progress = anyFloat(),
-                    lockScreenNotificationsProgress = eq(1f)
-                )
-        }
+        val expectedAlpha = 1 - dragDownAmount / alphaDistance
+        verify(shadeLockscreenInteractor).setKeyguardStatusBarAlpha(expectedAlpha)
+    }
 
     @Test
-    fun setDragDownAmount_inSplitShade_setsValueOnMediaHierarchyManager() =
-        testScope.runTest {
-            enableSplitShade()
+    fun setDragDownAmount_notInSplitShade_setsKeyguardStatusBarAlphaToMinusOne() {
+        disableSplitShade()
 
-            transitionController.dragDownAmount = 10f
+        transitionController.dragDownAmount = 10f
 
-            verify(mediaHierarchyManager).setTransitionToFullShadeAmount(10f)
-        }
+        verify(shadeLockscreenInteractor).setKeyguardStatusBarAlpha(-1f)
+    }
 
     @Test
-    fun setDragAmount_notInSplitShade_forwardsToSingleShadeOverScroller() =
-        testScope.runTest {
-            disableSplitShade()
+    fun nullQs_canDragDownFromAdapter() {
+        transitionController.qS = null
 
-            transitionController.dragDownAmount = 10f
-
-            verify(singleShadeOverScroller).expansionDragDownAmount = 10f
-            verifyZeroInteractions(splitShadeOverScroller)
-        }
-
-    @Test
-    fun setDragAmount_inSplitShade_forwardsToSplitShadeOverScroller() =
-        testScope.runTest {
-            enableSplitShade()
-
-            transitionController.dragDownAmount = 10f
-
-            verify(splitShadeOverScroller).expansionDragDownAmount = 10f
-            verifyZeroInteractions(singleShadeOverScroller)
-        }
-
-    @Test
-    fun setDragDownAmount_inSplitShade_setsKeyguardStatusBarAlphaBasedOnDistance() =
-        testScope.runTest {
-            val alphaDistance =
-                context.resources.getDimensionPixelSize(
-                    R.dimen.lockscreen_shade_npvc_keyguard_content_alpha_transition_distance
-                )
-            val dragDownAmount = 10f
-            enableSplitShade()
-
-            transitionController.dragDownAmount = dragDownAmount
-
-            val expectedAlpha = 1 - dragDownAmount / alphaDistance
-            verify(shadeLockscreenInteractor).setKeyguardStatusBarAlpha(expectedAlpha)
-        }
-
-    @Test
-    fun setDragDownAmount_notInSplitShade_setsKeyguardStatusBarAlphaToMinusOne() =
-        testScope.runTest {
-            disableSplitShade()
-
-            transitionController.dragDownAmount = 10f
-
-            verify(shadeLockscreenInteractor).setKeyguardStatusBarAlpha(-1f)
-        }
-
-    @Test
-    fun nullQs_canDragDownFromAdapter() =
-        testScope.runTest {
-            transitionController.qS = null
-
-            qsSceneAdapter.isQsFullyCollapsed = true
-            assertTrue("Can't drag down on keyguard", transitionController.canDragDown())
-            qsSceneAdapter.isQsFullyCollapsed = false
-            assertFalse("Can drag down when QS is expanded", transitionController.canDragDown())
-        }
+        qsSceneAdapter.isQsFullyCollapsed = true
+        assertTrue("Can't drag down on keyguard", transitionController.canDragDown())
+        qsSceneAdapter.isQsFullyCollapsed = false
+        assertFalse("Can drag down when QS is expanded", transitionController.canDragDown())
+    }
 
     private fun enableSplitShade() {
         setSplitShadeEnabled(true)
@@ -631,4 +619,32 @@
     ) {
         setTransitionToFullShadeProgress(progress, lockScreenNotificationsProgress)
     }
+
+    @SysUISingleton
+    @Component(
+        modules =
+            [
+                SysUITestModule::class,
+                UserDomainLayerModule::class,
+                BiometricsDomainLayerModule::class,
+            ]
+    )
+    interface TestComponent {
+
+        val configurationController: FakeConfigurationController
+        val disableFlagsRepository: FakeDisableFlagsRepository
+        val powerInteractor: PowerInteractor
+        val shadeInteractor: ShadeInteractor
+        val shadeRepository: FakeShadeRepository
+        val testScope: TestScope
+
+        @Component.Factory
+        interface Factory {
+            fun create(
+                    @BindsInstance test: SysuiTestCase,
+                    featureFlags: FakeFeatureFlagsClassicModule,
+                    mocks: TestMocksModule,
+            ): TestComponent
+        }
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/icon/domain/interactor/NotificationIconsInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/icon/domain/interactor/NotificationIconsInteractorTest.kt
index f07303e..26f5370 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/icon/domain/interactor/NotificationIconsInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/icon/domain/interactor/NotificationIconsInteractorTest.kt
@@ -17,19 +17,21 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
+import com.android.systemui.SysUITestComponent
+import com.android.systemui.SysUITestModule
 import com.android.systemui.SysuiTestCase
-import com.android.systemui.coroutines.collectLastValue
-import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
-import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
-import com.android.systemui.kosmos.testDispatcher
-import com.android.systemui.kosmos.testScope
-import com.android.systemui.statusbar.data.repository.notificationListenerSettingsRepository
+import com.android.systemui.TestMocksModule
+import com.android.systemui.biometrics.domain.BiometricsDomainLayerModule
+import com.android.systemui.collectLastValue
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.deviceentry.data.repository.FakeDeviceEntryRepository
+import com.android.systemui.runTest
+import com.android.systemui.statusbar.data.repository.NotificationListenerSettingsRepository
 import com.android.systemui.statusbar.notification.data.model.activeNotificationModel
+import com.android.systemui.statusbar.notification.data.repository.ActiveNotificationListRepository
 import com.android.systemui.statusbar.notification.data.repository.ActiveNotificationsStore
-import com.android.systemui.statusbar.notification.data.repository.activeNotificationListRepository
-import com.android.systemui.statusbar.notification.data.repository.notificationsKeyguardViewStateRepository
-import com.android.systemui.statusbar.notification.domain.interactor.activeNotificationsInteractor
-import com.android.systemui.statusbar.notification.domain.interactor.headsUpNotificationIconInteractor
+import com.android.systemui.statusbar.notification.domain.interactor.HeadsUpNotificationIconInteractor
+import com.android.systemui.statusbar.notification.domain.interactor.NotificationsKeyguardInteractor
 import com.android.systemui.statusbar.notification.shared.byIsAmbient
 import com.android.systemui.statusbar.notification.shared.byIsLastMessageFromReply
 import com.android.systemui.statusbar.notification.shared.byIsPulsing
@@ -37,15 +39,15 @@
 import com.android.systemui.statusbar.notification.shared.byIsSilent
 import com.android.systemui.statusbar.notification.shared.byIsSuppressedFromStatusBar
 import com.android.systemui.statusbar.notification.shared.byKey
-import com.android.systemui.statusbar.notification.stack.domain.interactor.notificationsKeyguardInteractor
-import com.android.systemui.testKosmos
+import com.android.systemui.user.domain.UserDomainLayerModule
 import com.android.systemui.util.mockito.eq
+import com.android.systemui.util.mockito.mock
 import com.android.systemui.util.mockito.whenever
-import com.android.wm.shell.bubbles.bubbles
-import com.android.wm.shell.bubbles.bubblesOptional
+import com.android.wm.shell.bubbles.Bubbles
 import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.test.runTest
+import dagger.BindsInstance
+import dagger.Component
+import java.util.Optional
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -53,22 +55,29 @@
 @SmallTest
 @RunWith(AndroidJUnit4::class)
 class NotificationIconsInteractorTest : SysuiTestCase() {
-    private val kosmos = testKosmos()
-    private val testScope = kosmos.testScope
-    private val activeNotificationListRepository = kosmos.activeNotificationListRepository
-    private val notificationsKeyguardInteractor = kosmos.notificationsKeyguardInteractor
 
-    private val underTest =
-        NotificationIconsInteractor(
-            kosmos.activeNotificationsInteractor,
-            kosmos.bubblesOptional,
-            kosmos.headsUpNotificationIconInteractor,
-            kosmos.notificationsKeyguardViewStateRepository
-        )
+    private val bubbles: Bubbles = mock()
+
+    @Component(modules = [SysUITestModule::class])
+    @SysUISingleton
+    interface TestComponent : SysUITestComponent<NotificationIconsInteractor> {
+
+        val activeNotificationListRepository: ActiveNotificationListRepository
+        val notificationsKeyguardInteractor: NotificationsKeyguardInteractor
+
+        @Component.Factory
+        interface Factory {
+            fun create(@BindsInstance test: SysuiTestCase, mocks: TestMocksModule): TestComponent
+        }
+    }
+
+    val testComponent: TestComponent =
+        DaggerNotificationIconsInteractorTest_TestComponent.factory()
+            .create(test = this, mocks = TestMocksModule(bubbles = Optional.of(bubbles)))
 
     @Before
     fun setup() {
-        testScope.apply {
+        testComponent.apply {
             activeNotificationListRepository.activeNotifications.value =
                 ActiveNotificationsStore.Builder()
                     .apply { testIcons.forEach(::addIndividualNotif) }
@@ -78,22 +87,22 @@
 
     @Test
     fun filteredEntrySet() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.filteredNotifSet())
             assertThat(filteredSet).containsExactlyElementsIn(testIcons)
         }
 
     @Test
     fun filteredEntrySet_noExpandedBubbles() =
-        testScope.runTest {
-            whenever(kosmos.bubbles.isBubbleExpanded(eq("notif1"))).thenReturn(true)
+        testComponent.runTest {
+            whenever(bubbles.isBubbleExpanded(eq("notif1"))).thenReturn(true)
             val filteredSet by collectLastValue(underTest.filteredNotifSet())
             assertThat(filteredSet).comparingElementsUsing(byKey).doesNotContain("notif1")
         }
 
     @Test
     fun filteredEntrySet_noAmbient() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.filteredNotifSet(showAmbient = false))
             assertThat(filteredSet).comparingElementsUsing(byIsAmbient).doesNotContain(true)
             assertThat(filteredSet)
@@ -103,21 +112,21 @@
 
     @Test
     fun filteredEntrySet_noLowPriority() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.filteredNotifSet(showLowPriority = false))
             assertThat(filteredSet).comparingElementsUsing(byIsSilent).doesNotContain(true)
         }
 
     @Test
     fun filteredEntrySet_noDismissed() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.filteredNotifSet(showDismissed = false))
             assertThat(filteredSet).comparingElementsUsing(byIsRowDismissed).doesNotContain(true)
         }
 
     @Test
     fun filteredEntrySet_noRepliedMessages() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by
                 collectLastValue(underTest.filteredNotifSet(showRepliedMessages = false))
             assertThat(filteredSet)
@@ -127,7 +136,7 @@
 
     @Test
     fun filteredEntrySet_noPulsing_notifsNotFullyHidden() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.filteredNotifSet(showPulsing = false))
             notificationsKeyguardInteractor.setNotificationsFullyHidden(false)
             assertThat(filteredSet).comparingElementsUsing(byIsPulsing).doesNotContain(true)
@@ -135,46 +144,65 @@
 
     @Test
     fun filteredEntrySet_noPulsing_notifsFullyHidden() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.filteredNotifSet(showPulsing = false))
             notificationsKeyguardInteractor.setNotificationsFullyHidden(true)
             assertThat(filteredSet).comparingElementsUsing(byIsPulsing).contains(true)
         }
 }
 
-@OptIn(ExperimentalCoroutinesApi::class)
 @SmallTest
 @RunWith(AndroidJUnit4::class)
 class AlwaysOnDisplayNotificationIconsInteractorTest : SysuiTestCase() {
-    private val kosmos = testKosmos()
-    private val testScope = kosmos.testScope
 
-    private val underTest =
-        AlwaysOnDisplayNotificationIconsInteractor(
-            kosmos.testDispatcher,
-            kosmos.deviceEntryInteractor,
-            kosmos.notificationIconsInteractor,
-        )
+    private val bubbles: Bubbles = mock()
+
+    @Component(
+        modules =
+            [
+                SysUITestModule::class,
+                BiometricsDomainLayerModule::class,
+                UserDomainLayerModule::class,
+            ]
+    )
+    @SysUISingleton
+    interface TestComponent : SysUITestComponent<AlwaysOnDisplayNotificationIconsInteractor> {
+
+        val activeNotificationListRepository: ActiveNotificationListRepository
+        val deviceEntryRepository: FakeDeviceEntryRepository
+        val notificationsKeyguardInteractor: NotificationsKeyguardInteractor
+
+        @Component.Factory
+        interface Factory {
+            fun create(@BindsInstance test: SysuiTestCase, mocks: TestMocksModule): TestComponent
+        }
+    }
+
+    private val testComponent: TestComponent =
+        DaggerAlwaysOnDisplayNotificationIconsInteractorTest_TestComponent.factory()
+            .create(test = this, mocks = TestMocksModule(bubbles = Optional.of(bubbles)))
 
     @Before
     fun setup() {
-        kosmos.activeNotificationListRepository.activeNotifications.value =
-            ActiveNotificationsStore.Builder()
-                .apply { testIcons.forEach(::addIndividualNotif) }
-                .build()
+        testComponent.apply {
+            activeNotificationListRepository.activeNotifications.value =
+                ActiveNotificationsStore.Builder()
+                    .apply { testIcons.forEach(::addIndividualNotif) }
+                    .build()
+        }
     }
 
     @Test
     fun filteredEntrySet_noExpandedBubbles() =
-        testScope.runTest {
-            whenever(kosmos.bubbles.isBubbleExpanded(eq("notif1"))).thenReturn(true)
+        testComponent.runTest {
+            whenever(bubbles.isBubbleExpanded(eq("notif1"))).thenReturn(true)
             val filteredSet by collectLastValue(underTest.aodNotifs)
             assertThat(filteredSet).comparingElementsUsing(byKey).doesNotContain("notif1")
         }
 
     @Test
     fun filteredEntrySet_noAmbient() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.aodNotifs)
             assertThat(filteredSet).comparingElementsUsing(byIsAmbient).doesNotContain(true)
             assertThat(filteredSet)
@@ -184,14 +212,14 @@
 
     @Test
     fun filteredEntrySet_noDismissed() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.aodNotifs)
             assertThat(filteredSet).comparingElementsUsing(byIsRowDismissed).doesNotContain(true)
         }
 
     @Test
     fun filteredEntrySet_noRepliedMessages() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.aodNotifs)
             assertThat(filteredSet)
                 .comparingElementsUsing(byIsLastMessageFromReply)
@@ -200,37 +228,37 @@
 
     @Test
     fun filteredEntrySet_showPulsing_notifsNotFullyHidden_bypassDisabled() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.aodNotifs)
-            kosmos.fakeDeviceEntryRepository.setBypassEnabled(false)
-            kosmos.notificationsKeyguardInteractor.setNotificationsFullyHidden(false)
+            deviceEntryRepository.setBypassEnabled(false)
+            notificationsKeyguardInteractor.setNotificationsFullyHidden(false)
             assertThat(filteredSet).comparingElementsUsing(byIsPulsing).contains(true)
         }
 
     @Test
     fun filteredEntrySet_showPulsing_notifsFullyHidden_bypassDisabled() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.aodNotifs)
-            kosmos.fakeDeviceEntryRepository.setBypassEnabled(false)
-            kosmos.notificationsKeyguardInteractor.setNotificationsFullyHidden(true)
+            deviceEntryRepository.setBypassEnabled(false)
+            notificationsKeyguardInteractor.setNotificationsFullyHidden(true)
             assertThat(filteredSet).comparingElementsUsing(byIsPulsing).contains(true)
         }
 
     @Test
     fun filteredEntrySet_noPulsing_notifsNotFullyHidden_bypassEnabled() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.aodNotifs)
-            kosmos.fakeDeviceEntryRepository.setBypassEnabled(true)
-            kosmos.notificationsKeyguardInteractor.setNotificationsFullyHidden(false)
+            deviceEntryRepository.setBypassEnabled(true)
+            notificationsKeyguardInteractor.setNotificationsFullyHidden(false)
             assertThat(filteredSet).comparingElementsUsing(byIsPulsing).doesNotContain(true)
         }
 
     @Test
     fun filteredEntrySet_showPulsing_notifsFullyHidden_bypassEnabled() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.aodNotifs)
-            kosmos.fakeDeviceEntryRepository.setBypassEnabled(true)
-            kosmos.notificationsKeyguardInteractor.setNotificationsFullyHidden(true)
+            deviceEntryRepository.setBypassEnabled(true)
+            notificationsKeyguardInteractor.setNotificationsFullyHidden(true)
             assertThat(filteredSet).comparingElementsUsing(byIsPulsing).contains(true)
         }
 }
@@ -238,19 +266,32 @@
 @SmallTest
 @RunWith(AndroidJUnit4::class)
 class StatusBarNotificationIconsInteractorTest : SysuiTestCase() {
-    private val kosmos = testKosmos()
-    private val testScope = kosmos.testScope
-    private val underTest =
-        StatusBarNotificationIconsInteractor(
-            kosmos.testDispatcher,
-            kosmos.notificationIconsInteractor,
-            kosmos.notificationListenerSettingsRepository,
-        )
+
+    private val bubbles: Bubbles = mock()
+
+    @Component(modules = [SysUITestModule::class])
+    @SysUISingleton
+    interface TestComponent : SysUITestComponent<StatusBarNotificationIconsInteractor> {
+
+        val activeNotificationListRepository: ActiveNotificationListRepository
+        val headsUpIconsInteractor: HeadsUpNotificationIconInteractor
+        val notificationsKeyguardInteractor: NotificationsKeyguardInteractor
+        val notificationListenerSettingsRepository: NotificationListenerSettingsRepository
+
+        @Component.Factory
+        interface Factory {
+            fun create(@BindsInstance test: SysuiTestCase, mocks: TestMocksModule): TestComponent
+        }
+    }
+
+    val testComponent: TestComponent =
+        DaggerStatusBarNotificationIconsInteractorTest_TestComponent.factory()
+            .create(test = this, mocks = TestMocksModule(bubbles = Optional.of(bubbles)))
 
     @Before
     fun setup() {
-        testScope.apply {
-            kosmos.activeNotificationListRepository.activeNotifications.value =
+        testComponent.apply {
+            activeNotificationListRepository.activeNotifications.value =
                 ActiveNotificationsStore.Builder()
                     .apply { testIcons.forEach(::addIndividualNotif) }
                     .build()
@@ -259,15 +300,15 @@
 
     @Test
     fun filteredEntrySet_noExpandedBubbles() =
-        testScope.runTest {
-            whenever(kosmos.bubbles.isBubbleExpanded(eq("notif1"))).thenReturn(true)
+        testComponent.runTest {
+            whenever(bubbles.isBubbleExpanded(eq("notif1"))).thenReturn(true)
             val filteredSet by collectLastValue(underTest.statusBarNotifs)
             assertThat(filteredSet).comparingElementsUsing(byKey).doesNotContain("notif1")
         }
 
     @Test
     fun filteredEntrySet_noAmbient() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.statusBarNotifs)
             assertThat(filteredSet).comparingElementsUsing(byIsAmbient).doesNotContain(true)
             assertThat(filteredSet)
@@ -277,30 +318,30 @@
 
     @Test
     fun filteredEntrySet_noLowPriority_whenDontShowSilentIcons() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.statusBarNotifs)
-            kosmos.notificationListenerSettingsRepository.showSilentStatusIcons.value = false
+            notificationListenerSettingsRepository.showSilentStatusIcons.value = false
             assertThat(filteredSet).comparingElementsUsing(byIsSilent).doesNotContain(true)
         }
 
     @Test
     fun filteredEntrySet_showLowPriority_whenShowSilentIcons() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.statusBarNotifs)
-            kosmos.notificationListenerSettingsRepository.showSilentStatusIcons.value = true
+            notificationListenerSettingsRepository.showSilentStatusIcons.value = true
             assertThat(filteredSet).comparingElementsUsing(byIsSilent).contains(true)
         }
 
     @Test
     fun filteredEntrySet_noDismissed() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.statusBarNotifs)
             assertThat(filteredSet).comparingElementsUsing(byIsRowDismissed).doesNotContain(true)
         }
 
     @Test
     fun filteredEntrySet_noRepliedMessages() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.statusBarNotifs)
             assertThat(filteredSet)
                 .comparingElementsUsing(byIsLastMessageFromReply)
@@ -309,9 +350,9 @@
 
     @Test
     fun filteredEntrySet_includesIsolatedIcon() =
-        testScope.runTest {
+        testComponent.runTest {
             val filteredSet by collectLastValue(underTest.statusBarNotifs)
-            kosmos.headsUpNotificationIconInteractor.setIsolatedIconNotificationKey("notif5")
+            headsUpIconsInteractor.setIsolatedIconNotificationKey("notif5")
             assertThat(filteredSet).comparingElementsUsing(byKey).contains("notif5")
         }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/icon/ui/viewmodel/NotificationIconContainerAlwaysOnDisplayViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/icon/ui/viewmodel/NotificationIconContainerAlwaysOnDisplayViewModelTest.kt
index 1f4e80e..894e02e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/icon/ui/viewmodel/NotificationIconContainerAlwaysOnDisplayViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/icon/ui/viewmodel/NotificationIconContainerAlwaysOnDisplayViewModelTest.kt
@@ -16,81 +16,111 @@
 
 package com.android.systemui.statusbar.notification.icon.ui.viewmodel
 
-import android.content.res.mainResources
 import android.platform.test.annotations.DisableFlags
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
 import com.android.systemui.Flags.FLAG_KEYGUARD_WM_STATE_REFACTOR
 import com.android.systemui.Flags.FLAG_NEW_AOD_TRANSITION
+import com.android.systemui.SysUITestComponent
+import com.android.systemui.SysUITestModule
 import com.android.systemui.SysuiTestCase
-import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.TestMocksModule
+import com.android.systemui.biometrics.domain.BiometricsDomainLayerModule
+import com.android.systemui.collectLastValue
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.flags.FakeFeatureFlagsClassicModule
 import com.android.systemui.flags.Flags
-import com.android.systemui.flags.fakeFeatureFlagsClassic
-import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
-import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
-import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
-import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
+import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
+import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
 import com.android.systemui.keyguard.shared.model.DozeStateModel
 import com.android.systemui.keyguard.shared.model.DozeTransitionModel
 import com.android.systemui.keyguard.shared.model.KeyguardState
 import com.android.systemui.keyguard.shared.model.TransitionState
 import com.android.systemui.keyguard.shared.model.TransitionStep
-import com.android.systemui.kosmos.testDispatcher
-import com.android.systemui.kosmos.testScope
-import com.android.systemui.power.data.repository.fakePowerRepository
+import com.android.systemui.power.data.repository.FakePowerRepository
 import com.android.systemui.power.shared.model.WakeSleepReason
 import com.android.systemui.power.shared.model.WakefulnessState
-import com.android.systemui.shade.domain.interactor.shadeInteractor
-import com.android.systemui.statusbar.notification.icon.domain.interactor.alwaysOnDisplayNotificationIconsInteractor
-import com.android.systemui.statusbar.phone.dozeParameters
-import com.android.systemui.testKosmos
+import com.android.systemui.runCurrent
+import com.android.systemui.runTest
+import com.android.systemui.statusbar.phone.DozeParameters
+import com.android.systemui.statusbar.phone.ScreenOffAnimationController
+import com.android.systemui.statusbar.policy.data.repository.FakeDeviceProvisioningRepository
+import com.android.systemui.user.domain.UserDomainLayerModule
+import com.android.systemui.util.mockito.mock
 import com.android.systemui.util.mockito.whenever
 import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.test.runCurrent
-import kotlinx.coroutines.test.runTest
+import dagger.BindsInstance
+import dagger.Component
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
 
-@OptIn(ExperimentalCoroutinesApi::class)
 @SmallTest
 @RunWith(AndroidJUnit4::class)
 class NotificationIconContainerAlwaysOnDisplayViewModelTest : SysuiTestCase() {
-    private val kosmos =
-        testKosmos().apply {
-            fakeFeatureFlagsClassic.apply { set(Flags.FULL_SCREEN_USER_SWITCHER, value = false) }
-        }
 
-    val underTest =
-        NotificationIconContainerAlwaysOnDisplayViewModel(
-            kosmos.testDispatcher,
-            kosmos.alwaysOnDisplayNotificationIconsInteractor,
-            kosmos.keyguardInteractor,
-            kosmos.keyguardTransitionInteractor,
-            kosmos.mainResources,
-            kosmos.shadeInteractor,
-        )
-    val testScope = kosmos.testScope
-    val keyguardRepository = kosmos.fakeKeyguardRepository
-    val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository
-    val powerRepository = kosmos.fakePowerRepository
+    @SysUISingleton
+    @Component(
+        modules =
+            [
+                SysUITestModule::class,
+                BiometricsDomainLayerModule::class,
+                UserDomainLayerModule::class,
+            ]
+    )
+    interface TestComponent :
+        SysUITestComponent<NotificationIconContainerAlwaysOnDisplayViewModel> {
+
+        val deviceProvisioningRepository: FakeDeviceProvisioningRepository
+        val keyguardRepository: FakeKeyguardRepository
+        val keyguardTransitionRepository: FakeKeyguardTransitionRepository
+        val powerRepository: FakePowerRepository
+
+        @Component.Factory
+        interface Factory {
+            fun create(
+                @BindsInstance test: SysuiTestCase,
+                mocks: TestMocksModule,
+                featureFlags: FakeFeatureFlagsClassicModule,
+            ): TestComponent
+        }
+    }
+
+    private val dozeParams: DozeParameters = mock()
+    private val screenOffAnimController: ScreenOffAnimationController = mock()
+
+    private val testComponent: TestComponent =
+        DaggerNotificationIconContainerAlwaysOnDisplayViewModelTest_TestComponent.factory()
+            .create(
+                test = this,
+                featureFlags =
+                    FakeFeatureFlagsClassicModule {
+                        set(Flags.FULL_SCREEN_USER_SWITCHER, value = false)
+                    },
+                mocks =
+                    TestMocksModule(
+                        dozeParameters = dozeParams,
+                        screenOffAnimationController = screenOffAnimController,
+                    ),
+            )
 
     @Before
     fun setup() {
-        keyguardRepository.setKeyguardShowing(true)
-        keyguardRepository.setKeyguardOccluded(false)
-        kosmos.fakePowerRepository.updateWakefulness(
-            rawState = WakefulnessState.AWAKE,
-            lastWakeReason = WakeSleepReason.OTHER,
-            lastSleepReason = WakeSleepReason.OTHER,
-        )
+        testComponent.apply {
+            keyguardRepository.setKeyguardShowing(true)
+            keyguardRepository.setKeyguardOccluded(false)
+            powerRepository.updateWakefulness(
+                rawState = WakefulnessState.AWAKE,
+                lastWakeReason = WakeSleepReason.OTHER,
+                lastSleepReason = WakeSleepReason.OTHER,
+            )
+        }
         mSetFlagsRule.enableFlags(FLAG_NEW_AOD_TRANSITION)
     }
 
     @Test
     fun animationsEnabled_isFalse_whenDeviceAsleepAndNotPulsing() =
-        testScope.runTest {
+        testComponent.runTest {
             powerRepository.updateWakefulness(
                 rawState = WakefulnessState.ASLEEP,
                 lastWakeReason = WakeSleepReason.POWER_BUTTON,
@@ -113,7 +143,7 @@
 
     @Test
     fun animationsEnabled_isTrue_whenDeviceAsleepAndPulsing() =
-        testScope.runTest {
+        testComponent.runTest {
             powerRepository.updateWakefulness(
                 rawState = WakefulnessState.ASLEEP,
                 lastWakeReason = WakeSleepReason.POWER_BUTTON,
@@ -136,7 +166,7 @@
 
     @Test
     fun animationsEnabled_isFalse_whenStartingToSleepAndNotControlScreenOff() =
-        testScope.runTest {
+        testComponent.runTest {
             powerRepository.updateWakefulness(
                 rawState = WakefulnessState.STARTING_TO_SLEEP,
                 lastWakeReason = WakeSleepReason.POWER_BUTTON,
@@ -149,7 +179,7 @@
                     transitionState = TransitionState.STARTED,
                 )
             )
-            whenever(kosmos.dozeParameters.shouldControlScreenOff()).thenReturn(false)
+            whenever(dozeParams.shouldControlScreenOff()).thenReturn(false)
             val animationsEnabled by collectLastValue(underTest.areContainerChangesAnimated)
             runCurrent()
             assertThat(animationsEnabled).isFalse()
@@ -157,7 +187,7 @@
 
     @Test
     fun animationsEnabled_isTrue_whenStartingToSleepAndControlScreenOff() =
-        testScope.runTest {
+        testComponent.runTest {
             val animationsEnabled by collectLastValue(underTest.areContainerChangesAnimated)
             assertThat(animationsEnabled).isTrue()
 
@@ -173,13 +203,13 @@
                     transitionState = TransitionState.STARTED,
                 )
             )
-            whenever(kosmos.dozeParameters.shouldControlScreenOff()).thenReturn(true)
+            whenever(dozeParams.shouldControlScreenOff()).thenReturn(true)
             assertThat(animationsEnabled).isTrue()
         }
 
     @Test
     fun animationsEnabled_isTrue_whenNotAsleep() =
-        testScope.runTest {
+        testComponent.runTest {
             powerRepository.updateWakefulness(
                 rawState = WakefulnessState.AWAKE,
                 lastWakeReason = WakeSleepReason.POWER_BUTTON,
@@ -198,7 +228,7 @@
     @Test
     @DisableFlags(FLAG_KEYGUARD_WM_STATE_REFACTOR)
     fun animationsEnabled_isTrue_whenKeyguardIsShowing() =
-        testScope.runTest {
+        testComponent.runTest {
             keyguardTransitionRepository.sendTransitionStep(
                 TransitionStep(
                     transitionState = TransitionState.STARTED,
@@ -227,7 +257,7 @@
 
     @Test
     fun tintAlpha_isZero_whenNotOnAodOrDozing() =
-        testScope.runTest {
+        testComponent.runTest {
             val tintAlpha by collectLastValue(underTest.tintAlpha)
             runCurrent()
             keyguardTransitionRepository.sendTransitionSteps(
@@ -241,7 +271,7 @@
 
     @Test
     fun tintAlpha_isOne_whenOnAod() =
-        testScope.runTest {
+        testComponent.runTest {
             val tintAlpha by collectLastValue(underTest.tintAlpha)
             runCurrent()
             keyguardTransitionRepository.sendTransitionSteps(
@@ -255,7 +285,7 @@
 
     @Test
     fun tintAlpha_isOne_whenDozing() =
-        testScope.runTest {
+        testComponent.runTest {
             val tintAlpha by collectLastValue(underTest.tintAlpha)
             runCurrent()
             keyguardTransitionRepository.sendTransitionSteps(
@@ -268,7 +298,7 @@
 
     @Test
     fun tintAlpha_isOne_whenTransitionFromAodToDoze() =
-        testScope.runTest {
+        testComponent.runTest {
             keyguardTransitionRepository.sendTransitionSteps(
                 from = KeyguardState.GONE,
                 to = KeyguardState.AOD,
@@ -302,7 +332,7 @@
 
     @Test
     fun tintAlpha_isFraction_midTransitionToAod() =
-        testScope.runTest {
+        testComponent.runTest {
             val tintAlpha by collectLastValue(underTest.tintAlpha)
             runCurrent()
 
@@ -331,7 +361,7 @@
 
     @Test
     fun iconAnimationsEnabled_whenOnLockScreen() =
-        testScope.runTest {
+        testComponent.runTest {
             val iconAnimationsEnabled by collectLastValue(underTest.areIconAnimationsEnabled)
             runCurrent()
 
@@ -346,7 +376,7 @@
 
     @Test
     fun iconAnimationsDisabled_whenOnAod() =
-        testScope.runTest {
+        testComponent.runTest {
             val iconAnimationsEnabled by collectLastValue(underTest.areIconAnimationsEnabled)
             runCurrent()
 
@@ -361,7 +391,7 @@
 
     @Test
     fun iconAnimationsDisabled_whenDozing() =
-        testScope.runTest {
+        testComponent.runTest {
             val iconAnimationsEnabled by collectLastValue(underTest.areIconAnimationsEnabled)
             runCurrent()
 
diff --git a/packages/SystemUI/tests/utils/src/android/app/admin/AlarmManagerKosmos.kt b/packages/SystemUI/tests/utils/src/android/app/admin/AlarmManagerKosmos.kt
deleted file mode 100644
index a7b5873..0000000
--- a/packages/SystemUI/tests/utils/src/android/app/admin/AlarmManagerKosmos.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.app.admin
-
-import android.app.AlarmManager
-import com.android.systemui.kosmos.Kosmos
-import com.android.systemui.util.mockito.mock
-
-var Kosmos.alarmManager by Kosmos.Fixture { mock<AlarmManager>() }
diff --git a/packages/SystemUI/tests/utils/src/com/android/app/admin/DevicePolicyManagerKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/app/admin/DevicePolicyManagerKosmos.kt
deleted file mode 100644
index f51e122..0000000
--- a/packages/SystemUI/tests/utils/src/com/android/app/admin/DevicePolicyManagerKosmos.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.app.admin
-
-import com.android.systemui.kosmos.Kosmos
-import com.android.systemui.util.mockito.mock
-
-val Kosmos.devicePolicyManager by Kosmos.Fixture { mock<android.app.admin.DevicePolicyManager>() }
diff --git a/packages/SystemUI/tests/utils/src/com/android/internal/widget/LockPatternUtilsKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/internal/widget/LockPatternUtilsKosmos.kt
index b511270..d9ea5e9 100644
--- a/packages/SystemUI/tests/utils/src/com/android/internal/widget/LockPatternUtilsKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/internal/widget/LockPatternUtilsKosmos.kt
@@ -16,14 +16,7 @@
 
 package com.android.internal.widget
 
-import android.app.admin.devicePolicyManager
 import com.android.systemui.kosmos.Kosmos
 import com.android.systemui.util.mockito.mock
-import com.android.systemui.util.mockito.whenever
 
-var Kosmos.lockPatternUtils by
-    Kosmos.Fixture {
-        mock<LockPatternUtils>().apply {
-            whenever(this.devicePolicyManager).thenReturn(this@Fixture.devicePolicyManager)
-        }
-    }
+var Kosmos.lockPatternUtils by Kosmos.Fixture { mock<LockPatternUtils>() }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt
index 87143ef..5bae6ec 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt
@@ -135,9 +135,6 @@
 
     private var isShowKeyguardWhenReenabled: Boolean = false
 
-    private val _canIgnoreAuthAndReturnToGone = MutableStateFlow(false)
-    override val canIgnoreAuthAndReturnToGone = _canIgnoreAuthAndReturnToGone.asStateFlow()
-
     override fun setQuickSettingsVisible(isVisible: Boolean) {
         _isQuickSettingsVisible.value = isVisible
     }
@@ -281,10 +278,6 @@
     override fun isShowKeyguardWhenReenabled(): Boolean {
         return isShowKeyguardWhenReenabled
     }
-
-    override fun setCanIgnoreAuthAndReturnToGone(canWake: Boolean) {
-        _canIgnoreAuthAndReturnToGone.value = canWake
-    }
 }
 
 @Module
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractorKosmos.kt
index ef789d1..ae138c8 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractorKosmos.kt
@@ -37,6 +37,5 @@
             powerInteractor = powerInteractor,
             keyguardOcclusionInteractor = keyguardOcclusionInteractor,
             deviceEntryRepository = deviceEntryRepository,
-            wakeToGoneInteractor = keyguardWakeDirectlyToGoneInteractor,
         )
     }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractorKosmos.kt
index 446652c..e7e007f 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractorKosmos.kt
@@ -39,6 +39,5 @@
             powerInteractor = powerInteractor,
             keyguardOcclusionInteractor = keyguardOcclusionInteractor,
             deviceEntryRepository = deviceEntryRepository,
-            wakeToGoneInteractor = keyguardWakeDirectlyToGoneInteractor,
         )
     }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorKosmos.kt
index 6c3de44..a9be06d 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorKosmos.kt
@@ -16,16 +16,13 @@
 
 package com.android.systemui.keyguard.domain.interactor
 
-import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
 import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
 import com.android.systemui.kosmos.Kosmos
 import com.android.systemui.kosmos.applicationCoroutineScope
 import com.android.systemui.kosmos.testDispatcher
 import com.android.systemui.power.domain.interactor.powerInteractor
 import com.android.systemui.statusbar.domain.interactor.keyguardOcclusionInteractor
-import kotlinx.coroutines.ExperimentalCoroutinesApi
 
-@OptIn(ExperimentalCoroutinesApi::class)
 var Kosmos.fromDreamingTransitionInteractor by
     Kosmos.Fixture {
         FromDreamingTransitionInteractor(
@@ -39,6 +36,5 @@
             glanceableHubTransitions = glanceableHubTransitions,
             powerInteractor = powerInteractor,
             keyguardOcclusionInteractor = keyguardOcclusionInteractor,
-            deviceEntryInteractor = deviceEntryInteractor,
         )
     }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardWakeDirectlyToGoneInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardWakeDirectlyToGoneInteractorKosmos.kt
deleted file mode 100644
index 63e168d..0000000
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardWakeDirectlyToGoneInteractorKosmos.kt
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.keyguard.domain.interactor
-
-import android.app.admin.alarmManager
-import android.content.mockedContext
-import com.android.internal.widget.lockPatternUtils
-import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
-import com.android.systemui.kosmos.Kosmos
-import com.android.systemui.kosmos.applicationCoroutineScope
-import com.android.systemui.power.domain.interactor.powerInteractor
-import com.android.systemui.user.domain.interactor.selectedUserInteractor
-import com.android.systemui.util.settings.fakeSettings
-import com.android.systemui.util.time.systemClock
-
-val Kosmos.keyguardWakeDirectlyToGoneInteractor by
-    Kosmos.Fixture {
-        KeyguardWakeDirectlyToGoneInteractor(
-            applicationCoroutineScope,
-            mockedContext,
-            fakeKeyguardRepository,
-            systemClock,
-            alarmManager,
-            keyguardTransitionInteractor,
-            powerInteractor,
-            fakeSettings,
-            lockPatternUtils,
-            fakeSettings,
-            selectedUserInteractor,
-        )
-    }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractorKosmos.kt
index 8bb2fce..bd9c0be 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractorKosmos.kt
@@ -17,7 +17,6 @@
 package com.android.systemui.keyguard.domain.interactor
 
 import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
-import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
 import com.android.systemui.kosmos.Kosmos
 import com.android.systemui.scene.domain.interactor.sceneInteractor
 import com.android.systemui.statusbar.notification.domain.interactor.notificationLaunchAnimationInteractor
@@ -26,7 +25,6 @@
     Kosmos.Fixture {
         WindowManagerLockscreenVisibilityInteractor(
             keyguardInteractor = keyguardInteractor,
-            transitionRepository = keyguardTransitionRepository,
             transitionInteractor = keyguardTransitionInteractor,
             surfaceBehindInteractor = keyguardSurfaceBehindInteractor,
             fromLockscreenInteractor = fromLockscreenTransitionInteractor,
@@ -35,6 +33,5 @@
             notificationLaunchAnimationInteractor = notificationLaunchAnimationInteractor,
             sceneInteractor = { sceneInteractor },
             deviceEntryInteractor = { deviceEntryInteractor },
-            wakeToGoneInteractor = keyguardWakeDirectlyToGoneInteractor,
         )
     }