Merge "Make dndMode not lazy" into main
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileDataInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileDataInteractorTest.kt
index 44e6b4d..029a2f9 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileDataInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileDataInteractorTest.kt
@@ -58,7 +58,9 @@
     private val dispatcher = kosmos.testDispatcher
     private val zenModeRepository = kosmos.fakeZenModeRepository
 
-    private val underTest = ModesTileDataInteractor(context, kosmos.zenModeInteractor, dispatcher)
+    private val underTest by lazy {
+        ModesTileDataInteractor(context, kosmos.zenModeInteractor, dispatcher)
+    }
 
     @Before
     fun setUp() {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/emptyshade/ui/viewmodel/EmptyShadeViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/emptyshade/ui/viewmodel/EmptyShadeViewModelTest.kt
index 3d5d1ed..9a42f5b 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/emptyshade/ui/viewmodel/EmptyShadeViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/emptyshade/ui/viewmodel/EmptyShadeViewModelTest.kt
@@ -54,7 +54,7 @@
     private val activeNotificationListRepository = kosmos.activeNotificationListRepository
     private val fakeSecureSettingsRepository = kosmos.fakeSecureSettingsRepository
 
-    private val underTest = kosmos.emptyShadeViewModel
+    private val underTest by lazy { kosmos.emptyShadeViewModel }
 
     companion object {
         @JvmStatic
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractorTest.kt
index 7c47264..ff1ffcc 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractorTest.kt
@@ -57,7 +57,7 @@
     private val settingsRepository = kosmos.secureSettingsRepository
     private val deviceProvisioningRepository = kosmos.fakeDeviceProvisioningRepository
 
-    private val underTest = kosmos.zenModeInteractor
+    private val underTest by lazy { kosmos.zenModeInteractor }
 
     @Test
     fun isZenAvailable_off() =
@@ -176,13 +176,13 @@
     @Test
     fun shouldAskForZenDuration_changesWithSetting() =
         kosmos.runTest {
-            val manualDnd = TestModeBuilder().makeManualDnd().setActive(true).build()
+            val manualDnd by collectLastValue(underTest.dndMode)
 
             settingsRepository.setInt(ZEN_DURATION, ZEN_DURATION_FOREVER)
-            assertThat(underTest.shouldAskForZenDuration(manualDnd)).isFalse()
+            assertThat(underTest.shouldAskForZenDuration(manualDnd!!)).isFalse()
 
             settingsRepository.setInt(ZEN_DURATION, ZEN_DURATION_PROMPT)
-            assertThat(underTest.shouldAskForZenDuration(manualDnd)).isTrue()
+            assertThat(underTest.shouldAskForZenDuration(manualDnd!!)).isTrue()
         }
 
     @Test
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractor.kt
index fdc2d8d..5fa15b8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractor.kt
@@ -43,6 +43,7 @@
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.SharingStarted
 import kotlinx.coroutines.flow.StateFlow
 import kotlinx.coroutines.flow.combine
@@ -123,12 +124,20 @@
      * explicitly wants a shortcut to DND). Please prefer using [modes] or [activeModes] in all
      * other scenarios.
      */
-    val dndMode: StateFlow<ZenMode?> by lazy {
-        ModesUi.assertInNewMode()
-        zenModeRepository.modes
-            .map { modes -> modes.singleOrNull { it.isManualDnd } }
-            .stateIn(scope = backgroundScope, started = SharingStarted.Eagerly, initialValue = null)
-    }
+    val dndMode: StateFlow<ZenMode?> =
+        if (ModesUi.isEnabled)
+            zenModeRepository.modes
+                .map { modes -> modes.singleOrNull { it.isManualDnd } }
+                .stateIn(
+                    scope = backgroundScope,
+                    started = SharingStarted.Eagerly,
+                    initialValue = null,
+                )
+        else MutableStateFlow<ZenMode?>(null)
+        get() {
+            ModesUi.assertInNewMode()
+            return field
+        }
 
     /** Flow returning the currently active mode(s), if any. */
     val activeModes: Flow<ActiveZenModes> =