Loading packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeOverlay.kt +11 −8 Original line number Diff line number Diff line Loading @@ -103,12 +103,15 @@ constructor( onScrimClicked = viewModel::onScrimClicked, ) { Column { if (viewModel.showHeader) { CollapsedShadeHeader( viewModelFactory = viewModel.shadeHeaderViewModelFactory, createTintedIconManager = tintedIconManagerFactory::create, createBatteryMeterViewController = batteryMeterViewControllerFactory::create, createBatteryMeterViewController = batteryMeterViewControllerFactory::create, statusBarIconController = statusBarIconController, ) } ShadeBody(viewModel = viewModel.quickSettingsContainerViewModel) } Loading Loading @@ -178,8 +181,8 @@ fun ContentScope.QuickSettingsLayout( Column( verticalArrangement = Arrangement.spacedBy(QuickSettingsShade.Dimensions.Padding), horizontalAlignment = Alignment.CenterHorizontally, modifier = modifier .padding( modifier = modifier.padding( start = QuickSettingsShade.Dimensions.Padding, end = QuickSettingsShade.Dimensions.Padding, bottom = QuickSettingsShade.Dimensions.Padding, Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt +19 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.startable.sceneContainerStartable import com.android.systemui.scene.shared.model.Overlays import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.data.repository.shadeRepository import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.shared.flag.DualShade import com.android.systemui.testKosmos Loading Loading @@ -124,6 +125,24 @@ class QuickSettingsShadeOverlayContentViewModelTest : SysuiTestCase() { assertThat(currentOverlays).doesNotContain(Overlays.QuickSettingsShade) } @Test fun showHeader_showsOnNarrowScreen() = testScope.runTest { kosmos.shadeRepository.setShadeLayoutWide(false) runCurrent() assertThat(underTest.showHeader).isTrue() } @Test fun showHeader_hidesOnWideScreen() = testScope.runTest { kosmos.shadeRepository.setShadeLayoutWide(true) runCurrent() assertThat(underTest.showHeader).isFalse() } private fun TestScope.lockDevice() { val currentScene by collectLastValue(sceneInteractor.currentScene) kosmos.powerInteractor.setAsleepForTest() Loading packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModel.kt +15 −0 Original line number Diff line number Diff line Loading @@ -16,8 +16,10 @@ package com.android.systemui.qs.ui.viewmodel import androidx.compose.runtime.getValue import com.android.app.tracing.coroutines.launchTraced as launch import com.android.systemui.lifecycle.ExclusiveActivatable import com.android.systemui.lifecycle.Hydrator import com.android.systemui.scene.domain.interactor.SceneInteractor import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.domain.interactor.ShadeInteractor Loading @@ -28,6 +30,8 @@ import kotlinx.coroutines.awaitCancellation import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch /** * Models UI state used to render the content of the quick settings shade overlay. Loading @@ -44,10 +48,21 @@ constructor( quickSettingsContainerViewModelFactory: QuickSettingsContainerViewModel.Factory, ) : ExclusiveActivatable() { private val hydrator = Hydrator("QuickSettingsContainerViewModel.hydrator") val showHeader: Boolean by hydrator.hydratedStateOf( traceName = "showHeader", initialValue = !shadeInteractor.isShadeLayoutWide.value, source = shadeInteractor.isShadeLayoutWide.map { !it }, ) val quickSettingsContainerViewModel = quickSettingsContainerViewModelFactory.create(false) override suspend fun onActivated(): Nothing { coroutineScope { launch { hydrator.activate() } launch { sceneInteractor.currentScene.collect { currentScene -> when (currentScene) { Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeOverlay.kt +11 −8 Original line number Diff line number Diff line Loading @@ -103,12 +103,15 @@ constructor( onScrimClicked = viewModel::onScrimClicked, ) { Column { if (viewModel.showHeader) { CollapsedShadeHeader( viewModelFactory = viewModel.shadeHeaderViewModelFactory, createTintedIconManager = tintedIconManagerFactory::create, createBatteryMeterViewController = batteryMeterViewControllerFactory::create, createBatteryMeterViewController = batteryMeterViewControllerFactory::create, statusBarIconController = statusBarIconController, ) } ShadeBody(viewModel = viewModel.quickSettingsContainerViewModel) } Loading Loading @@ -178,8 +181,8 @@ fun ContentScope.QuickSettingsLayout( Column( verticalArrangement = Arrangement.spacedBy(QuickSettingsShade.Dimensions.Padding), horizontalAlignment = Alignment.CenterHorizontally, modifier = modifier .padding( modifier = modifier.padding( start = QuickSettingsShade.Dimensions.Padding, end = QuickSettingsShade.Dimensions.Padding, bottom = QuickSettingsShade.Dimensions.Padding, Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt +19 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.startable.sceneContainerStartable import com.android.systemui.scene.shared.model.Overlays import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.data.repository.shadeRepository import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.shared.flag.DualShade import com.android.systemui.testKosmos Loading Loading @@ -124,6 +125,24 @@ class QuickSettingsShadeOverlayContentViewModelTest : SysuiTestCase() { assertThat(currentOverlays).doesNotContain(Overlays.QuickSettingsShade) } @Test fun showHeader_showsOnNarrowScreen() = testScope.runTest { kosmos.shadeRepository.setShadeLayoutWide(false) runCurrent() assertThat(underTest.showHeader).isTrue() } @Test fun showHeader_hidesOnWideScreen() = testScope.runTest { kosmos.shadeRepository.setShadeLayoutWide(true) runCurrent() assertThat(underTest.showHeader).isFalse() } private fun TestScope.lockDevice() { val currentScene by collectLastValue(sceneInteractor.currentScene) kosmos.powerInteractor.setAsleepForTest() Loading
packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModel.kt +15 −0 Original line number Diff line number Diff line Loading @@ -16,8 +16,10 @@ package com.android.systemui.qs.ui.viewmodel import androidx.compose.runtime.getValue import com.android.app.tracing.coroutines.launchTraced as launch import com.android.systemui.lifecycle.ExclusiveActivatable import com.android.systemui.lifecycle.Hydrator import com.android.systemui.scene.domain.interactor.SceneInteractor import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.domain.interactor.ShadeInteractor Loading @@ -28,6 +30,8 @@ import kotlinx.coroutines.awaitCancellation import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch /** * Models UI state used to render the content of the quick settings shade overlay. Loading @@ -44,10 +48,21 @@ constructor( quickSettingsContainerViewModelFactory: QuickSettingsContainerViewModel.Factory, ) : ExclusiveActivatable() { private val hydrator = Hydrator("QuickSettingsContainerViewModel.hydrator") val showHeader: Boolean by hydrator.hydratedStateOf( traceName = "showHeader", initialValue = !shadeInteractor.isShadeLayoutWide.value, source = shadeInteractor.isShadeLayoutWide.map { !it }, ) val quickSettingsContainerViewModel = quickSettingsContainerViewModelFactory.create(false) override suspend fun onActivated(): Nothing { coroutineScope { launch { hydrator.activate() } launch { sceneInteractor.currentScene.collect { currentScene -> when (currentScene) { Loading