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

Commit 5edd4c32 authored by Jiaming Cheng's avatar Jiaming Cheng Committed by Android (Google) Code Review
Browse files

Merge "[QSDetailedView] Guard details view with dual_shade mode only" into main

parents c6af79cf 0a08b31e
Loading
Loading
Loading
Loading
+40 −1
Original line number Diff line number Diff line
@@ -19,13 +19,17 @@ package com.android.systemui.qs.panels.ui.viewmodel
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.kosmos.testScope
import com.android.systemui.qs.FakeQSTile
import com.android.systemui.qs.pipeline.data.repository.tileSpecRepository
import com.android.systemui.qs.pipeline.domain.interactor.currentTilesInteractor
import com.android.systemui.qs.pipeline.shared.TileSpec
import com.android.systemui.shade.domain.interactor.disableDualShade
import com.android.systemui.shade.domain.interactor.enableDualShade
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Before
@@ -34,6 +38,7 @@ import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
@SmallTest
@EnableSceneContainer
class DetailsViewModelTest : SysuiTestCase() {
    private val kosmos = testKosmos()
    private lateinit var underTest: DetailsViewModel
@@ -45,10 +50,12 @@ class DetailsViewModelTest : SysuiTestCase() {
        underTest = kosmos.detailsViewModel
    }

    @OptIn(ExperimentalCoroutinesApi::class)
    @Test
    fun changeTileDetailsViewModel() =
    fun changeTileDetailsViewModelWithDualShadeEnabled() =
        with(kosmos) {
            testScope.runTest {
                kosmos.enableDualShade()
                val specs = listOf(spec, specNoDetails)
                tileSpecRepository.setTiles(0, specs)
                runCurrent()
@@ -85,4 +92,36 @@ class DetailsViewModelTest : SysuiTestCase() {
                assertThat(underTest.onTileClicked(null)).isFalse()
            }
        }

    @OptIn(ExperimentalCoroutinesApi::class)
    @Test
    fun ignoreChangingTileDetailsViewModelWithDualShadeDisabled() =
        with(kosmos) {
            testScope.runTest {
                kosmos.disableDualShade()
                val specs = listOf(spec, specNoDetails)
                tileSpecRepository.setTiles(0, specs)
                runCurrent()

                val tiles = currentTilesInteractor.currentTiles.value

                assertThat(currentTilesInteractor.currentTilesSpecs.size).isEqualTo(2)
                assertThat(tiles[1].spec).isEqualTo(specNoDetails)
                (tiles[1].tile as FakeQSTile).hasDetailsViewModel = false

                assertThat(underTest.activeTileDetails).isNull()

                // Click on the tile who has the `spec`.
                assertThat(underTest.onTileClicked(spec)).isFalse()
                assertThat(underTest.activeTileDetails).isNull()

                // Click on a tile who dose not have a valid spec.
                assertThat(underTest.onTileClicked(null)).isFalse()
                assertThat(underTest.activeTileDetails).isNull()

                // Click on a tile who dose not have a detailed view.
                assertThat(underTest.onTileClicked(specNoDetails)).isFalse()
                assertThat(underTest.activeTileDetails).isNull()
            }
        }
}
+9 −1
Original line number Diff line number Diff line
@@ -23,11 +23,15 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.plugins.qs.TileDetailsViewModel
import com.android.systemui.qs.pipeline.domain.interactor.CurrentTilesInteractor
import com.android.systemui.qs.pipeline.shared.TileSpec
import com.android.systemui.shade.domain.interactor.ShadeModeInteractor
import javax.inject.Inject

@SysUISingleton
@Stable
class DetailsViewModel @Inject constructor(val currentTilesInteractor: CurrentTilesInteractor) {
class DetailsViewModel @Inject constructor(
    val currentTilesInteractor: CurrentTilesInteractor,
    val shadeModeInteractor: ShadeModeInteractor
) {

    /**
     * The current active [TileDetailsViewModel]. If it's `null`, it means the qs overlay is not
@@ -52,6 +56,10 @@ class DetailsViewModel @Inject constructor(val currentTilesInteractor: CurrentTi
     * @see activeTileDetails
     */
    fun onTileClicked(spec: TileSpec?): Boolean {
        if (!shadeModeInteractor.isDualShade){
            return false
        }

        if (spec == null) {
            _activeTileDetails.value = null
            return false
+7 −1
Original line number Diff line number Diff line
@@ -18,5 +18,11 @@ package com.android.systemui.qs.panels.ui.viewmodel

import com.android.systemui.kosmos.Kosmos
import com.android.systemui.qs.pipeline.domain.interactor.currentTilesInteractor
import com.android.systemui.shade.domain.interactor.shadeModeInteractor

val Kosmos.detailsViewModel by Kosmos.Fixture { DetailsViewModel(currentTilesInteractor) }
val Kosmos.detailsViewModel by Kosmos.Fixture {
    DetailsViewModel(
        currentTilesInteractor,
        shadeModeInteractor
    )
}