Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/DetailsViewModelTest.kt +40 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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() Loading Loading @@ -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() } } } packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/DetailsViewModel.kt +9 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/ui/viewmodel/DetailsViewModelKosmos.kt +7 −1 Original line number Diff line number Diff line Loading @@ -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 ) } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/DetailsViewModelTest.kt +40 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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() Loading Loading @@ -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() } } }
packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/DetailsViewModel.kt +9 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading
packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/ui/viewmodel/DetailsViewModelKosmos.kt +7 −1 Original line number Diff line number Diff line Loading @@ -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 ) }