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

Commit 02bf9ff7 authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Android (Google) Code Review
Browse files

Merge "Support collapsed media in landscape" into main

parents 3e20bdd5 b493a57d
Loading
Loading
Loading
Loading
+65 −0
Original line number Diff line number Diff line
@@ -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
@@ -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

+27 −1
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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() }
@@ -389,7 +409,7 @@ constructor(

    private fun initMediaHosts() {
        qqsMediaHost.apply {
            expansion = MediaHostState.EXPANDED
            expansion = qqsMediaExpansion
            showsOnlyActiveMedia = true
            init(MediaHierarchyManager.LOCATION_QQS)
        }
@@ -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") {
@@ -448,6 +472,8 @@ constructor(
                println("qqsMediaInRow", qqsMediaInRow)
                println("qsMediaVisible", qsMediaVisible)
                println("qsMediaInRow", qsMediaInRow)
                println("collapsedLandscapeMedia", collapsedLandscapeMedia)
                println("qqsMediaExpansion", qqsMediaExpansion)
            }
        }
    }
+2 −0
Original line number Diff line number Diff line
@@ -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
@@ -56,4 +57,5 @@ fun Kosmos.setConfigurationForMediaInRow(mediaInRow: Boolean) {
        }
    mainResources.configuration.updateFrom(config)
    fakeConfigurationRepository.onConfigurationChange(config)
    runCurrent()
}