Loading packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationsShadeOverlay.kt +13 −11 Original line number Diff line number Diff line Loading @@ -112,6 +112,7 @@ constructor( modifier = modifier, onScrimClicked = viewModel::onScrimClicked, header = { if (viewModel.showHeader) { val headerViewModel = rememberViewModel("NotificationsShadeOverlayHeader") { viewModel.shadeHeaderViewModelFactory.create() Loading @@ -123,6 +124,7 @@ constructor( showClock = !isFullWidth, modifier = Modifier.element(NotificationsShade.Elements.StatusBar), ) } }, ) { Column { Loading packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeOverlay.kt +10 −10 Original line number Diff line number Diff line Loading @@ -165,6 +165,7 @@ constructor( ) }, header = { if (contentViewModel.showHeader) { OverlayShadeHeader( viewModel = quickSettingsContainerViewModel.shadeHeaderViewModel, notificationsHighlight = ShadeHeader.ChipHighlight.Weak, Loading @@ -172,6 +173,7 @@ constructor( showClock = true, modifier = Modifier.element(QuickSettingsShade.Elements.StatusBar), ) } }, ) { QuickSettingsContainer(viewModel = quickSettingsContainerViewModel) Loading Loading @@ -268,9 +270,7 @@ fun ContentScope.QuickSettingsLayout( // TODO(b/428805936): Double check this padding. VerticalSeparator() Column( modifier = Modifier.fillMaxWidth().verticalScroll(rememberScrollState()), ) { Column(modifier = Modifier.fillMaxWidth().verticalScroll(rememberScrollState())) { MediaCarousel( isVisible = viewModel.showMedia, mediaHost = viewModel.mediaHost, Loading packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModelTest.kt +38 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.systemui.notifications.ui.viewmodel import android.app.StatusBarManager.DISABLE2_QUICK_SETTINGS import android.content.res.Configuration import android.content.testableContext import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import android.testing.TestableLooper Loading @@ -31,12 +33,14 @@ import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.EnableSceneContainer import com.android.systemui.kosmos.runCurrent import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.lifecycle.activateIn import com.android.systemui.media.controls.data.repository.mediaFilterRepository import com.android.systemui.media.controls.shared.model.MediaData 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.res.R import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.startable.sceneContainerStartable import com.android.systemui.scene.shared.model.Overlays Loading @@ -46,7 +50,9 @@ import com.android.systemui.shade.domain.interactor.enableSingleShade import com.android.systemui.shade.domain.interactor.enableSplitShade import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.ui.viewmodel.notificationsShadeOverlayContentViewModel import com.android.systemui.statusbar.core.StatusBarForDesktop import com.android.systemui.statusbar.disableflags.data.repository.fakeDisableFlagsRepository import com.android.systemui.statusbar.policy.configurationController import com.android.systemui.testKosmos import com.android.systemui.window.data.repository.fakeWindowRootViewBlurRepository import com.google.common.truth.Truth.assertThat Loading @@ -66,7 +72,7 @@ import org.junit.runner.RunWith @EnableSceneContainer class NotificationsShadeOverlayContentViewModelTest : SysuiTestCase() { private val kosmos = testKosmos() private val kosmos = testKosmos().useUnconfinedTestDispatcher() private val testScope = kosmos.testScope private val sceneInteractor by lazy { kosmos.sceneInteractor } private val underTest by lazy { kosmos.notificationsShadeOverlayContentViewModel } Loading @@ -79,6 +85,29 @@ class NotificationsShadeOverlayContentViewModelTest : SysuiTestCase() { underTest.activateIn(testScope) } @Test fun showHeader_desktopFeatureSetDisabled_true() = testScope.runTest { setEnableDesktopFeatureSet(false) assertThat(underTest.showHeader).isTrue() } @Test @EnableFlags(StatusBarForDesktop.FLAG_NAME) fun showHeader_desktopFeatureSetEnabled_statusBarForDesktopEnabled_false() = testScope.runTest { setEnableDesktopFeatureSet(true) assertThat(underTest.showHeader).isFalse() } @Test @DisableFlags(StatusBarForDesktop.FLAG_NAME) fun showHeader_desktopFeatureSetEnabled_statusBarForDesktopDisabled_true() = testScope.runTest { setEnableDesktopFeatureSet(true) assertThat(underTest.showHeader).isTrue() } @Test fun onScrimClicked_hidesShade() = testScope.runTest { Loading Loading @@ -228,6 +257,14 @@ class NotificationsShadeOverlayContentViewModelTest : SysuiTestCase() { assertThat(currentScene).isEqualTo(Scenes.Lockscreen) } private fun setEnableDesktopFeatureSet(enable: Boolean) { kosmos.testableContext.orCreateTestableResources.addOverride( R.bool.config_enableDesktopFeatureSet, enable, ) kosmos.configurationController.onConfigurationChanged(Configuration()) } private suspend fun TestScope.unlockDevice() { val currentScene by collectLastValue(sceneInteractor.currentScene) kosmos.powerInteractor.setAwakeForTest() Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt +41 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package com.android.systemui.qs.ui.viewmodel import android.content.res.Configuration import android.content.testableContext import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import android.testing.TestableLooper import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest Loading @@ -27,11 +31,13 @@ import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.EnableSceneContainer import com.android.systemui.kosmos.runCurrent import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.lifecycle.activateIn 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.qs.composefragment.dagger.usingMediaInComposeFragment import com.android.systemui.res.R import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.startable.sceneContainerStartable import com.android.systemui.scene.shared.model.Overlays Loading @@ -40,9 +46,11 @@ import com.android.systemui.shade.domain.interactor.enableDualShade import com.android.systemui.shade.domain.interactor.enableSingleShade import com.android.systemui.shade.domain.interactor.enableSplitShade import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.statusbar.core.StatusBarForDesktop import com.android.systemui.statusbar.notification.stack.shared.model.ShadeScrimBounds import com.android.systemui.statusbar.notification.stack.shared.model.ShadeScrimShape import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationScrollViewModel import com.android.systemui.statusbar.policy.configurationController import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi Loading @@ -61,9 +69,10 @@ import org.junit.runner.RunWith class QuickSettingsShadeOverlayContentViewModelTest : SysuiTestCase() { private val kosmos = testKosmos().apply { testKosmos().useUnconfinedTestDispatcher().apply { usingMediaInComposeFragment = false // This is not for the compose fragment } private val testScope = kosmos.testScope private val sceneInteractor by lazy { kosmos.sceneInteractor } private val underTest by lazy { kosmos.quickSettingsShadeOverlayContentViewModel } Loading Loading @@ -169,6 +178,37 @@ class QuickSettingsShadeOverlayContentViewModelTest : SysuiTestCase() { assertThat(actual).isEqualTo(expected) } @Test fun showHeader_desktopFeatureSetDisabled_true() = testScope.runTest { setEnableDesktopFeatureSet(false) assertThat(underTest.showHeader).isTrue() } @Test @EnableFlags(StatusBarForDesktop.FLAG_NAME) fun showHeader_desktopFeatureSetEnabled_statusBarForDesktopEnabled_false() = testScope.runTest { setEnableDesktopFeatureSet(true) assertThat(underTest.showHeader).isFalse() } @Test @DisableFlags(StatusBarForDesktop.FLAG_NAME) fun showHeader_desktopFeatureSetEnabled_statusBarForDesktopDisabled_true() = testScope.runTest { setEnableDesktopFeatureSet(true) assertThat(underTest.showHeader).isTrue() } private fun setEnableDesktopFeatureSet(enable: Boolean) { kosmos.testableContext.orCreateTestableResources.addOverride( R.bool.config_enableDesktopFeatureSet, enable, ) kosmos.configurationController.onConfigurationChanged(Configuration()) } private fun TestScope.lockDevice() { val currentScene by collectLastValue(sceneInteractor.currentScene) kosmos.powerInteractor.setAsleepForTest() Loading packages/SystemUI/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModel.kt +21 −1 Original line number Diff line number Diff line Loading @@ -17,9 +17,11 @@ package com.android.systemui.notifications.ui.viewmodel import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import com.android.app.tracing.coroutines.launchTraced as launch import com.android.systemui.Flags import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.desktop.domain.interactor.DesktopInteractor import com.android.systemui.lifecycle.ExclusiveActivatable import com.android.systemui.lifecycle.Hydrator import com.android.systemui.media.controls.domain.pipeline.interactor.MediaCarouselInteractor Loading @@ -29,6 +31,7 @@ import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.domain.interactor.ShadeModeInteractor import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel import com.android.systemui.statusbar.core.StatusBarForDesktop import com.android.systemui.statusbar.disableflags.domain.interactor.DisableFlagsInteractor import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel import com.android.systemui.utils.coroutines.flow.flatMapLatestConflated Loading @@ -41,6 +44,7 @@ import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map import kotlinx.coroutines.withContext /** Loading @@ -55,6 +59,7 @@ constructor( @Main private val mainDispatcher: CoroutineDispatcher, val shadeHeaderViewModelFactory: ShadeHeaderViewModel.Factory, val notificationsPlaceholderViewModelFactory: NotificationsPlaceholderViewModel.Factory, private val desktopInteractor: DesktopInteractor, val sceneInteractor: SceneInteractor, private val shadeInteractor: ShadeInteractor, private val shadeModeInteractor: ShadeModeInteractor, Loading @@ -65,6 +70,21 @@ constructor( private val hydrator = Hydrator("NotificationsShadeOverlayContentViewModel.hydrator") /** * The Shade header can only be shown if desktop features are disabled. This is because the * status bar is always visible when desktop features are enabled. */ val showHeader: Boolean by if (StatusBarForDesktop.isEnabled) { hydrator.hydratedStateOf( traceName = "showHeader", initialValue = !desktopInteractor.isDesktopFeatureSetEnabled.value, source = desktopInteractor.isDesktopFeatureSetEnabled.map { !it }, ) } else { mutableStateOf(true) } val showMedia: Boolean by hydrator.hydratedStateOf( traceName = "showMedia", Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationsShadeOverlay.kt +13 −11 Original line number Diff line number Diff line Loading @@ -112,6 +112,7 @@ constructor( modifier = modifier, onScrimClicked = viewModel::onScrimClicked, header = { if (viewModel.showHeader) { val headerViewModel = rememberViewModel("NotificationsShadeOverlayHeader") { viewModel.shadeHeaderViewModelFactory.create() Loading @@ -123,6 +124,7 @@ constructor( showClock = !isFullWidth, modifier = Modifier.element(NotificationsShade.Elements.StatusBar), ) } }, ) { Column { Loading
packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeOverlay.kt +10 −10 Original line number Diff line number Diff line Loading @@ -165,6 +165,7 @@ constructor( ) }, header = { if (contentViewModel.showHeader) { OverlayShadeHeader( viewModel = quickSettingsContainerViewModel.shadeHeaderViewModel, notificationsHighlight = ShadeHeader.ChipHighlight.Weak, Loading @@ -172,6 +173,7 @@ constructor( showClock = true, modifier = Modifier.element(QuickSettingsShade.Elements.StatusBar), ) } }, ) { QuickSettingsContainer(viewModel = quickSettingsContainerViewModel) Loading Loading @@ -268,9 +270,7 @@ fun ContentScope.QuickSettingsLayout( // TODO(b/428805936): Double check this padding. VerticalSeparator() Column( modifier = Modifier.fillMaxWidth().verticalScroll(rememberScrollState()), ) { Column(modifier = Modifier.fillMaxWidth().verticalScroll(rememberScrollState())) { MediaCarousel( isVisible = viewModel.showMedia, mediaHost = viewModel.mediaHost, Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModelTest.kt +38 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.systemui.notifications.ui.viewmodel import android.app.StatusBarManager.DISABLE2_QUICK_SETTINGS import android.content.res.Configuration import android.content.testableContext import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import android.testing.TestableLooper Loading @@ -31,12 +33,14 @@ import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.EnableSceneContainer import com.android.systemui.kosmos.runCurrent import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.lifecycle.activateIn import com.android.systemui.media.controls.data.repository.mediaFilterRepository import com.android.systemui.media.controls.shared.model.MediaData 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.res.R import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.startable.sceneContainerStartable import com.android.systemui.scene.shared.model.Overlays Loading @@ -46,7 +50,9 @@ import com.android.systemui.shade.domain.interactor.enableSingleShade import com.android.systemui.shade.domain.interactor.enableSplitShade import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.ui.viewmodel.notificationsShadeOverlayContentViewModel import com.android.systemui.statusbar.core.StatusBarForDesktop import com.android.systemui.statusbar.disableflags.data.repository.fakeDisableFlagsRepository import com.android.systemui.statusbar.policy.configurationController import com.android.systemui.testKosmos import com.android.systemui.window.data.repository.fakeWindowRootViewBlurRepository import com.google.common.truth.Truth.assertThat Loading @@ -66,7 +72,7 @@ import org.junit.runner.RunWith @EnableSceneContainer class NotificationsShadeOverlayContentViewModelTest : SysuiTestCase() { private val kosmos = testKosmos() private val kosmos = testKosmos().useUnconfinedTestDispatcher() private val testScope = kosmos.testScope private val sceneInteractor by lazy { kosmos.sceneInteractor } private val underTest by lazy { kosmos.notificationsShadeOverlayContentViewModel } Loading @@ -79,6 +85,29 @@ class NotificationsShadeOverlayContentViewModelTest : SysuiTestCase() { underTest.activateIn(testScope) } @Test fun showHeader_desktopFeatureSetDisabled_true() = testScope.runTest { setEnableDesktopFeatureSet(false) assertThat(underTest.showHeader).isTrue() } @Test @EnableFlags(StatusBarForDesktop.FLAG_NAME) fun showHeader_desktopFeatureSetEnabled_statusBarForDesktopEnabled_false() = testScope.runTest { setEnableDesktopFeatureSet(true) assertThat(underTest.showHeader).isFalse() } @Test @DisableFlags(StatusBarForDesktop.FLAG_NAME) fun showHeader_desktopFeatureSetEnabled_statusBarForDesktopDisabled_true() = testScope.runTest { setEnableDesktopFeatureSet(true) assertThat(underTest.showHeader).isTrue() } @Test fun onScrimClicked_hidesShade() = testScope.runTest { Loading Loading @@ -228,6 +257,14 @@ class NotificationsShadeOverlayContentViewModelTest : SysuiTestCase() { assertThat(currentScene).isEqualTo(Scenes.Lockscreen) } private fun setEnableDesktopFeatureSet(enable: Boolean) { kosmos.testableContext.orCreateTestableResources.addOverride( R.bool.config_enableDesktopFeatureSet, enable, ) kosmos.configurationController.onConfigurationChanged(Configuration()) } private suspend fun TestScope.unlockDevice() { val currentScene by collectLastValue(sceneInteractor.currentScene) kosmos.powerInteractor.setAwakeForTest() Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt +41 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package com.android.systemui.qs.ui.viewmodel import android.content.res.Configuration import android.content.testableContext import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import android.testing.TestableLooper import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest Loading @@ -27,11 +31,13 @@ import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.EnableSceneContainer import com.android.systemui.kosmos.runCurrent import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.lifecycle.activateIn 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.qs.composefragment.dagger.usingMediaInComposeFragment import com.android.systemui.res.R import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.startable.sceneContainerStartable import com.android.systemui.scene.shared.model.Overlays Loading @@ -40,9 +46,11 @@ import com.android.systemui.shade.domain.interactor.enableDualShade import com.android.systemui.shade.domain.interactor.enableSingleShade import com.android.systemui.shade.domain.interactor.enableSplitShade import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.statusbar.core.StatusBarForDesktop import com.android.systemui.statusbar.notification.stack.shared.model.ShadeScrimBounds import com.android.systemui.statusbar.notification.stack.shared.model.ShadeScrimShape import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationScrollViewModel import com.android.systemui.statusbar.policy.configurationController import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi Loading @@ -61,9 +69,10 @@ import org.junit.runner.RunWith class QuickSettingsShadeOverlayContentViewModelTest : SysuiTestCase() { private val kosmos = testKosmos().apply { testKosmos().useUnconfinedTestDispatcher().apply { usingMediaInComposeFragment = false // This is not for the compose fragment } private val testScope = kosmos.testScope private val sceneInteractor by lazy { kosmos.sceneInteractor } private val underTest by lazy { kosmos.quickSettingsShadeOverlayContentViewModel } Loading Loading @@ -169,6 +178,37 @@ class QuickSettingsShadeOverlayContentViewModelTest : SysuiTestCase() { assertThat(actual).isEqualTo(expected) } @Test fun showHeader_desktopFeatureSetDisabled_true() = testScope.runTest { setEnableDesktopFeatureSet(false) assertThat(underTest.showHeader).isTrue() } @Test @EnableFlags(StatusBarForDesktop.FLAG_NAME) fun showHeader_desktopFeatureSetEnabled_statusBarForDesktopEnabled_false() = testScope.runTest { setEnableDesktopFeatureSet(true) assertThat(underTest.showHeader).isFalse() } @Test @DisableFlags(StatusBarForDesktop.FLAG_NAME) fun showHeader_desktopFeatureSetEnabled_statusBarForDesktopDisabled_true() = testScope.runTest { setEnableDesktopFeatureSet(true) assertThat(underTest.showHeader).isTrue() } private fun setEnableDesktopFeatureSet(enable: Boolean) { kosmos.testableContext.orCreateTestableResources.addOverride( R.bool.config_enableDesktopFeatureSet, enable, ) kosmos.configurationController.onConfigurationChanged(Configuration()) } private fun TestScope.lockDevice() { val currentScene by collectLastValue(sceneInteractor.currentScene) kosmos.powerInteractor.setAsleepForTest() Loading
packages/SystemUI/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModel.kt +21 −1 Original line number Diff line number Diff line Loading @@ -17,9 +17,11 @@ package com.android.systemui.notifications.ui.viewmodel import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import com.android.app.tracing.coroutines.launchTraced as launch import com.android.systemui.Flags import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.desktop.domain.interactor.DesktopInteractor import com.android.systemui.lifecycle.ExclusiveActivatable import com.android.systemui.lifecycle.Hydrator import com.android.systemui.media.controls.domain.pipeline.interactor.MediaCarouselInteractor Loading @@ -29,6 +31,7 @@ import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.domain.interactor.ShadeModeInteractor import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel import com.android.systemui.statusbar.core.StatusBarForDesktop import com.android.systemui.statusbar.disableflags.domain.interactor.DisableFlagsInteractor import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel import com.android.systemui.utils.coroutines.flow.flatMapLatestConflated Loading @@ -41,6 +44,7 @@ import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map import kotlinx.coroutines.withContext /** Loading @@ -55,6 +59,7 @@ constructor( @Main private val mainDispatcher: CoroutineDispatcher, val shadeHeaderViewModelFactory: ShadeHeaderViewModel.Factory, val notificationsPlaceholderViewModelFactory: NotificationsPlaceholderViewModel.Factory, private val desktopInteractor: DesktopInteractor, val sceneInteractor: SceneInteractor, private val shadeInteractor: ShadeInteractor, private val shadeModeInteractor: ShadeModeInteractor, Loading @@ -65,6 +70,21 @@ constructor( private val hydrator = Hydrator("NotificationsShadeOverlayContentViewModel.hydrator") /** * The Shade header can only be shown if desktop features are disabled. This is because the * status bar is always visible when desktop features are enabled. */ val showHeader: Boolean by if (StatusBarForDesktop.isEnabled) { hydrator.hydratedStateOf( traceName = "showHeader", initialValue = !desktopInteractor.isDesktopFeatureSetEnabled.value, source = desktopInteractor.isDesktopFeatureSetEnabled.map { !it }, ) } else { mutableStateOf(true) } val showMedia: Boolean by hydrator.hydratedStateOf( traceName = "showMedia", Loading