Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99af61e1 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Dual Shade] Hide the status bar on QuickSettings shade on wide screens." into main

parents 2013428e 5d86b464
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -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)
            }
@@ -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,
+19 −0
Original line number Diff line number Diff line
@@ -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()
+15 −0
Original line number Diff line number Diff line
@@ -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) {