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

Commit f71e1f5b authored by burakov's avatar burakov
Browse files

[Dual Shade] Render the shade header in QS based on the compose state.

This removes the QS container view-model's dependence on the
`isShadeLayoutWide` flow, which will soon be removed.

This has the nice side effect of simplifying the related code.

Bug: 354926927
Bug: 338033836
Test: Manually tested by opening and closing both shades on both a
 folded and unfolded device, verifying the shade header clock appears as
 expected.
Flag: com.android.systemui.scene_container
Change-Id: I743e9964e54ab1fa115b4602910bdd763fb69252
parent 61a39e2b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ import com.android.systemui.scene.ui.composable.Overlay
import com.android.systemui.shade.ui.composable.OverlayShade
import com.android.systemui.shade.ui.composable.OverlayShadeHeader
import com.android.systemui.shade.ui.composable.QuickSettingsOverlayHeader
import com.android.systemui.shade.ui.composable.isFullWidthShade
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.view.NotificationScrollView
@@ -236,7 +237,7 @@ fun ContentScope.QuickSettingsLayout(
                bottom = QuickSettingsShade.Dimensions.Padding,
            ),
    ) {
        if (viewModel.showHeader) {
        if (isFullWidthShade()) {
            QuickSettingsOverlayHeader(
                viewModel = viewModel.shadeHeaderViewModel,
                modifier =
+0 −24
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.testing.TestableLooper
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.kosmos.testScope
import com.android.systemui.lifecycle.activateIn
@@ -29,7 +28,6 @@ import com.android.systemui.media.controls.shared.model.MediaData
import com.android.systemui.qs.composefragment.dagger.usingMediaInComposeFragment
import com.android.systemui.scene.domain.startable.sceneContainerStartable
import com.android.systemui.shade.domain.interactor.enableDualShade
import com.android.systemui.shade.domain.interactor.shadeModeInteractor
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -52,8 +50,6 @@ class QuickSettingsContainerViewModelTest : SysuiTestCase() {
        }
    private val testScope = kosmos.testScope

    private val shadeModeInteractor = kosmos.shadeModeInteractor

    private val underTest by lazy {
        kosmos.quickSettingsContainerViewModelFactory.create(supportsBrightnessMirroring = false)
    }
@@ -65,26 +61,6 @@ class QuickSettingsContainerViewModelTest : SysuiTestCase() {
        underTest.activateIn(testScope)
    }

    @Test
    fun showHeader_showsOnNarrowScreen() =
        testScope.runTest {
            kosmos.enableDualShade(wideLayout = false)
            val isShadeLayoutWide by collectLastValue(shadeModeInteractor.isShadeLayoutWide)
            assertThat(isShadeLayoutWide).isFalse()

            assertThat(underTest.showHeader).isTrue()
        }

    @Test
    fun showHeader_hidesOnWideScreen() =
        testScope.runTest {
            kosmos.enableDualShade(wideLayout = true)
            val isShadeLayoutWide by collectLastValue(shadeModeInteractor.isShadeLayoutWide)
            assertThat(isShadeLayoutWide).isTrue()

            assertThat(underTest.showHeader).isFalse()
        }

    @Test
    fun showMedia_activeMedia_true() =
        testScope.runTest {
+0 −10
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ import com.android.systemui.qs.panels.ui.viewmodel.DetailsViewModel
import com.android.systemui.qs.panels.ui.viewmodel.EditModeViewModel
import com.android.systemui.qs.panels.ui.viewmodel.TileGridViewModel
import com.android.systemui.qs.panels.ui.viewmodel.toolbar.ToolbarViewModel
import com.android.systemui.shade.domain.interactor.ShadeModeInteractor
import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
@@ -36,7 +35,6 @@ import dagger.assisted.AssistedInject
import javax.inject.Named
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch

class QuickSettingsContainerViewModel
@@ -50,7 +48,6 @@ constructor(
    val editModeViewModel: EditModeViewModel,
    val detailsViewModel: DetailsViewModel,
    toolbarViewModelFactory: ToolbarViewModel.Factory,
    shadeModeInteractor: ShadeModeInteractor,
    mediaCarouselInteractor: MediaCarouselInteractor,
    val mediaCarouselController: MediaCarouselController,
    @Named(MediaModule.QS_PANEL) val mediaHost: MediaHost,
@@ -67,13 +64,6 @@ constructor(

    val tileGridViewModel = tileGridViewModelFactory.create()

    val showHeader: Boolean by
        hydrator.hydratedStateOf(
            traceName = "showHeader",
            initialValue = !shadeModeInteractor.isShadeLayoutWide.value,
            source = shadeModeInteractor.isShadeLayoutWide.map { !it },
        )

    val showMedia: Boolean by
        hydrator.hydratedStateOf(
            traceName = "showMedia",
+0 −2
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import com.android.systemui.qs.panels.ui.viewmodel.detailsViewModel
import com.android.systemui.qs.panels.ui.viewmodel.editModeViewModel
import com.android.systemui.qs.panels.ui.viewmodel.tileGridViewModelFactory
import com.android.systemui.qs.panels.ui.viewmodel.toolbar.toolbarViewModelFactory
import com.android.systemui.shade.domain.interactor.shadeModeInteractor
import com.android.systemui.shade.ui.viewmodel.shadeHeaderViewModelFactory
import org.mockito.kotlin.mock

@@ -45,7 +44,6 @@ val Kosmos.quickSettingsContainerViewModelFactory by
                    editModeViewModel = editModeViewModel,
                    detailsViewModel = detailsViewModel,
                    toolbarViewModelFactory = toolbarViewModelFactory,
                    shadeModeInteractor = shadeModeInteractor,
                    mediaCarouselInteractor = mediaCarouselInteractor,
                    mediaCarouselController = mediaCarouselController,
                    mediaHost = mock<MediaHost>(),