Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModelTest.kt +65 −0 Original line number Diff line number Diff line Loading @@ -318,6 +318,63 @@ class QSFragmentComposeViewModelTest : AbstractQSFragmentComposeViewModelTest() } } @Test fun qqsMediaExpansion_collapsedMediaInLandscape() = with(kosmos) { testScope.testWithinLifecycle { setCollapsedMediaInLandscape(true) setMediaState(ACTIVE_MEDIA) setConfigurationForMediaInRow(mediaInRow = false) Snapshot.sendApplyNotifications() runCurrent() assertThat(underTest.qqsMediaHost.expansion).isEqualTo(MediaHostState.EXPANDED) setConfigurationForMediaInRow(mediaInRow = true) Snapshot.sendApplyNotifications() runCurrent() assertThat(underTest.qqsMediaHost.expansion).isEqualTo(MediaHostState.COLLAPSED) } } @Test fun qqsMediaExpansion_notCollapsedMediaInLandscape_alwaysExpanded() = with(kosmos) { testScope.testWithinLifecycle { setCollapsedMediaInLandscape(false) setMediaState(ACTIVE_MEDIA) setConfigurationForMediaInRow(mediaInRow = false) Snapshot.sendApplyNotifications() runCurrent() assertThat(underTest.qqsMediaHost.expansion).isEqualTo(MediaHostState.EXPANDED) setConfigurationForMediaInRow(mediaInRow = true) Snapshot.sendApplyNotifications() runCurrent() assertThat(underTest.qqsMediaHost.expansion).isEqualTo(MediaHostState.EXPANDED) } } @Test fun qqsMediaExpansion_reactsToChangesInCollapsedMediaInLandscape() = with(kosmos) { testScope.testWithinLifecycle { setConfigurationForMediaInRow(mediaInRow = true) setMediaState(ACTIVE_MEDIA) setCollapsedMediaInLandscape(false) Snapshot.sendApplyNotifications() runCurrent() assertThat(underTest.qqsMediaHost.expansion).isEqualTo(MediaHostState.EXPANDED) setCollapsedMediaInLandscape(true) Snapshot.sendApplyNotifications() runCurrent() assertThat(underTest.qqsMediaHost.expansion).isEqualTo(MediaHostState.COLLAPSED) } } private fun TestScope.setMediaState(state: MediaState) { with(kosmos) { val activeMedia = state == ACTIVE_MEDIA Loading @@ -331,6 +388,14 @@ class QSFragmentComposeViewModelTest : AbstractQSFragmentComposeViewModelTest() runCurrent() } private fun TestScope.setCollapsedMediaInLandscape(collapsed: Boolean) { with(kosmos) { overrideResource(R.bool.config_quickSettingsMediaLandscapeCollapsed, collapsed) fakeConfigurationRepository.onAnyConfigurationChange() } runCurrent() } companion object { private const val QS_DISABLE_FLAG = StatusBarManager.DISABLE2_QUICK_SETTINGS Loading packages/SystemUI/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModel.kt +27 −1 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.disableflags.data.repository.DisableFlagsRepository import com.android.systemui.util.LargeScreenUtils import com.android.systemui.util.asIndenting import com.android.systemui.util.kotlin.emitOnStart import com.android.systemui.util.printSection import com.android.systemui.util.println import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow Loading Loading @@ -278,6 +279,24 @@ constructor( private val mediaSuddenlyAppearingInLandscape: Boolean get() = !qqsMediaInRow && qsMediaInRow private val collapsedLandscapeMedia by hydrator.hydratedStateOf( traceName = "collapsedLandscapeMedia", initialValue = resources.getBoolean(R.bool.config_quickSettingsMediaLandscapeCollapsed), source = configurationInteractor.onAnyConfigurationChange.emitOnStart().map { resources.getBoolean(R.bool.config_quickSettingsMediaLandscapeCollapsed) }, ) private val qqsMediaExpansion: Float get() = if (qqsMediaInRow && collapsedLandscapeMedia) { MediaHostState.COLLAPSED } else { MediaHostState.EXPANDED } private var qsBounds by mutableStateOf(Rect()) private val constrainedSquishinessFraction: Float Loading Loading @@ -379,6 +398,7 @@ constructor( initMediaHosts() // init regardless of using media (same as current QS). coroutineScope { launch { hydrateSquishinessInteractor() } launch { hydrateQqsMediaExpansion() } launch { hydrator.activate() } launch { containerViewModel.activate() } launch { qqsMediaInRowViewModel.activate() } Loading @@ -389,7 +409,7 @@ constructor( private fun initMediaHosts() { qqsMediaHost.apply { expansion = MediaHostState.EXPANDED expansion = qqsMediaExpansion showsOnlyActiveMedia = true init(MediaHierarchyManager.LOCATION_QQS) } Loading @@ -405,6 +425,10 @@ constructor( .collect { squishinessInteractor.setSquishinessValue(it) } } private suspend fun hydrateQqsMediaExpansion() { snapshotFlow { qqsMediaExpansion }.collect { qqsMediaHost.expansion = it } } override fun dump(pw: PrintWriter, args: Array<out String>) { pw.asIndenting().run { printSection("Quick Settings state") { Loading Loading @@ -448,6 +472,8 @@ constructor( println("qqsMediaInRow", qqsMediaInRow) println("qsMediaVisible", qsMediaVisible) println("qsMediaInRow", qsMediaInRow) println("collapsedLandscapeMedia", collapsedLandscapeMedia) println("qqsMediaExpansion", qqsMediaExpansion) } } } Loading packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/ui/viewmodel/MediaInRowInLandscapeViewModelKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.res.mainResources import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository import com.android.systemui.common.ui.domain.interactor.configurationInteractor import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.runCurrent import com.android.systemui.media.controls.ui.controller.mediaHostStatesManager import com.android.systemui.qs.composefragment.dagger.usingMediaInComposeFragment import com.android.systemui.shade.data.repository.shadeRepository Loading Loading @@ -56,4 +57,5 @@ fun Kosmos.setConfigurationForMediaInRow(mediaInRow: Boolean) { } mainResources.configuration.updateFrom(config) fakeConfigurationRepository.onConfigurationChange(config) runCurrent() } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModelTest.kt +65 −0 Original line number Diff line number Diff line Loading @@ -318,6 +318,63 @@ class QSFragmentComposeViewModelTest : AbstractQSFragmentComposeViewModelTest() } } @Test fun qqsMediaExpansion_collapsedMediaInLandscape() = with(kosmos) { testScope.testWithinLifecycle { setCollapsedMediaInLandscape(true) setMediaState(ACTIVE_MEDIA) setConfigurationForMediaInRow(mediaInRow = false) Snapshot.sendApplyNotifications() runCurrent() assertThat(underTest.qqsMediaHost.expansion).isEqualTo(MediaHostState.EXPANDED) setConfigurationForMediaInRow(mediaInRow = true) Snapshot.sendApplyNotifications() runCurrent() assertThat(underTest.qqsMediaHost.expansion).isEqualTo(MediaHostState.COLLAPSED) } } @Test fun qqsMediaExpansion_notCollapsedMediaInLandscape_alwaysExpanded() = with(kosmos) { testScope.testWithinLifecycle { setCollapsedMediaInLandscape(false) setMediaState(ACTIVE_MEDIA) setConfigurationForMediaInRow(mediaInRow = false) Snapshot.sendApplyNotifications() runCurrent() assertThat(underTest.qqsMediaHost.expansion).isEqualTo(MediaHostState.EXPANDED) setConfigurationForMediaInRow(mediaInRow = true) Snapshot.sendApplyNotifications() runCurrent() assertThat(underTest.qqsMediaHost.expansion).isEqualTo(MediaHostState.EXPANDED) } } @Test fun qqsMediaExpansion_reactsToChangesInCollapsedMediaInLandscape() = with(kosmos) { testScope.testWithinLifecycle { setConfigurationForMediaInRow(mediaInRow = true) setMediaState(ACTIVE_MEDIA) setCollapsedMediaInLandscape(false) Snapshot.sendApplyNotifications() runCurrent() assertThat(underTest.qqsMediaHost.expansion).isEqualTo(MediaHostState.EXPANDED) setCollapsedMediaInLandscape(true) Snapshot.sendApplyNotifications() runCurrent() assertThat(underTest.qqsMediaHost.expansion).isEqualTo(MediaHostState.COLLAPSED) } } private fun TestScope.setMediaState(state: MediaState) { with(kosmos) { val activeMedia = state == ACTIVE_MEDIA Loading @@ -331,6 +388,14 @@ class QSFragmentComposeViewModelTest : AbstractQSFragmentComposeViewModelTest() runCurrent() } private fun TestScope.setCollapsedMediaInLandscape(collapsed: Boolean) { with(kosmos) { overrideResource(R.bool.config_quickSettingsMediaLandscapeCollapsed, collapsed) fakeConfigurationRepository.onAnyConfigurationChange() } runCurrent() } companion object { private const val QS_DISABLE_FLAG = StatusBarManager.DISABLE2_QUICK_SETTINGS Loading
packages/SystemUI/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModel.kt +27 −1 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.disableflags.data.repository.DisableFlagsRepository import com.android.systemui.util.LargeScreenUtils import com.android.systemui.util.asIndenting import com.android.systemui.util.kotlin.emitOnStart import com.android.systemui.util.printSection import com.android.systemui.util.println import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow Loading Loading @@ -278,6 +279,24 @@ constructor( private val mediaSuddenlyAppearingInLandscape: Boolean get() = !qqsMediaInRow && qsMediaInRow private val collapsedLandscapeMedia by hydrator.hydratedStateOf( traceName = "collapsedLandscapeMedia", initialValue = resources.getBoolean(R.bool.config_quickSettingsMediaLandscapeCollapsed), source = configurationInteractor.onAnyConfigurationChange.emitOnStart().map { resources.getBoolean(R.bool.config_quickSettingsMediaLandscapeCollapsed) }, ) private val qqsMediaExpansion: Float get() = if (qqsMediaInRow && collapsedLandscapeMedia) { MediaHostState.COLLAPSED } else { MediaHostState.EXPANDED } private var qsBounds by mutableStateOf(Rect()) private val constrainedSquishinessFraction: Float Loading Loading @@ -379,6 +398,7 @@ constructor( initMediaHosts() // init regardless of using media (same as current QS). coroutineScope { launch { hydrateSquishinessInteractor() } launch { hydrateQqsMediaExpansion() } launch { hydrator.activate() } launch { containerViewModel.activate() } launch { qqsMediaInRowViewModel.activate() } Loading @@ -389,7 +409,7 @@ constructor( private fun initMediaHosts() { qqsMediaHost.apply { expansion = MediaHostState.EXPANDED expansion = qqsMediaExpansion showsOnlyActiveMedia = true init(MediaHierarchyManager.LOCATION_QQS) } Loading @@ -405,6 +425,10 @@ constructor( .collect { squishinessInteractor.setSquishinessValue(it) } } private suspend fun hydrateQqsMediaExpansion() { snapshotFlow { qqsMediaExpansion }.collect { qqsMediaHost.expansion = it } } override fun dump(pw: PrintWriter, args: Array<out String>) { pw.asIndenting().run { printSection("Quick Settings state") { Loading Loading @@ -448,6 +472,8 @@ constructor( println("qqsMediaInRow", qqsMediaInRow) println("qsMediaVisible", qsMediaVisible) println("qsMediaInRow", qsMediaInRow) println("collapsedLandscapeMedia", collapsedLandscapeMedia) println("qqsMediaExpansion", qqsMediaExpansion) } } } Loading
packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/ui/viewmodel/MediaInRowInLandscapeViewModelKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.res.mainResources import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository import com.android.systemui.common.ui.domain.interactor.configurationInteractor import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.runCurrent import com.android.systemui.media.controls.ui.controller.mediaHostStatesManager import com.android.systemui.qs.composefragment.dagger.usingMediaInComposeFragment import com.android.systemui.shade.data.repository.shadeRepository Loading Loading @@ -56,4 +57,5 @@ fun Kosmos.setConfigurationForMediaInRow(mediaInRow: Boolean) { } mainResources.configuration.updateFrom(config) fakeConfigurationRepository.onConfigurationChange(config) runCurrent() }