diff options
| author | 2024-12-19 11:07:25 +0000 | |
|---|---|---|
| committer | 2024-12-20 14:53:56 +0000 | |
| commit | 5d86b464f1e18ba613961a6ae4269787f40894f6 (patch) | |
| tree | def29791c356f45e4371d079448e138e3b2a23f7 | |
| parent | 964521803669aa8d430be9097bc4c81550c83d26 (diff) | |
[Dual Shade] Hide the status bar on QuickSettings shade on wide screens.
Fix: 385077133
Test: Manually tested by opening the quick settings shade on a folded
and unfolded device.
Test: Added unit tests.
Flag: com.android.systemui.dual_shade
Change-Id: Id01c07cf7ee0d8f09dc2fcd21526ba6341d35f9e
3 files changed, 45 insertions, 8 deletions
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeOverlay.kt b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeOverlay.kt index 3327fc020da3..f052e60246d2 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeOverlay.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeOverlay.kt @@ -103,12 +103,15 @@ constructor( onScrimClicked = viewModel::onScrimClicked, ) { Column { - CollapsedShadeHeader( - viewModelFactory = viewModel.shadeHeaderViewModelFactory, - createTintedIconManager = tintedIconManagerFactory::create, - createBatteryMeterViewController = batteryMeterViewControllerFactory::create, - statusBarIconController = statusBarIconController, - ) + if (viewModel.showHeader) { + CollapsedShadeHeader( + viewModelFactory = viewModel.shadeHeaderViewModelFactory, + createTintedIconManager = tintedIconManagerFactory::create, + createBatteryMeterViewController = + batteryMeterViewControllerFactory::create, + statusBarIconController = statusBarIconController, + ) + } ShadeBody(viewModel = viewModel.quickSettingsContainerViewModel) } @@ -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, diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt index 24f6b6d8566b..7ab8ab93c024 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt @@ -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 @@ -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() diff --git a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModel.kt index 8ef51af18881..c0c0aea073f1 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModel.kt @@ -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 @@ -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. @@ -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) { |