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

Commit d16af9ee authored by Michael Mikhail's avatar Michael Mikhail
Browse files

Reorder media players when orientation changes

makes sure we only update players if orientation changes not all
configs. And reorder players to make them available in the UI.
Fixes: 261592246
Bug: 261695345
Test: atest MediaCarouselControllerTest
Test: manual - check the UMO exists on switching orientation

Change-Id: Ieb3ab97b747cb21e51ca42b8e9e56cb611b0d3d8
parent bc2a6556
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -184,6 +184,7 @@ constructor(

    private val configListener =
        object : ConfigurationController.ConfigurationListener {
            var lastOrientation = -1

            override fun onDensityOrFontScaleChanged() {
                // System font changes should only happen when UMO is offscreen or a flicker may
@@ -200,8 +201,14 @@ constructor(
            override fun onConfigChanged(newConfig: Configuration?) {
                if (newConfig == null) return
                isRtl = newConfig.layoutDirection == View.LAYOUT_DIRECTION_RTL
                val newOrientation = newConfig.orientation
                if (lastOrientation != newOrientation) {
                    // The players actually depend on the orientation possibly, so we have to
                    // recreate them (at least on large screen devices)
                    lastOrientation = newOrientation
                    updatePlayers(recreateMedia = true)
                }
            }

            override fun onUiModeChanged() {
                updatePlayers(recreateMedia = false)
@@ -717,6 +724,9 @@ constructor(
    private fun updatePlayers(recreateMedia: Boolean) {
        pageIndicator.tintList =
            ColorStateList.valueOf(context.getColor(R.color.media_paging_indicator))
        val previousVisibleKey =
            MediaPlayerData.visiblePlayerKeys()
                .elementAtOrNull(mediaCarouselScrollHandler.visibleMediaIndex)

        MediaPlayerData.mediaData().forEach { (key, data, isSsMediaRec) ->
            if (isSsMediaRec) {
@@ -741,6 +751,9 @@ constructor(
                    isSsReactivated = isSsReactivated
                )
            }
            if (recreateMedia) {
                reorderAllPlayers(previousVisibleKey)
            }
        }
    }

+40 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.media.controls.ui

import android.app.PendingIntent
import android.content.res.Configuration
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import androidx.test.filters.SmallTest
@@ -86,6 +87,9 @@ class MediaCarouselControllerTest : SysuiTestCase() {
    @Mock lateinit var mediaViewController: MediaViewController
    @Mock lateinit var smartspaceMediaData: SmartspaceMediaData
    @Captor lateinit var listener: ArgumentCaptor<MediaDataManager.Listener>
    @Captor
    lateinit var configListener: ArgumentCaptor<ConfigurationController.ConfigurationListener>
    @Captor lateinit var newConfig: ArgumentCaptor<Configuration>
    @Captor lateinit var visualStabilityCallback: ArgumentCaptor<OnReorderingAllowedListener>

    private val clock = FakeSystemClock()
@@ -111,6 +115,7 @@ class MediaCarouselControllerTest : SysuiTestCase() {
                logger,
                debugLogger
            )
        verify(configurationController).addCallback(capture(configListener))
        verify(mediaDataManager).addListener(capture(listener))
        verify(visualStabilityProvider)
            .addPersistentReorderingAllowedListener(capture(visualStabilityCallback))
@@ -662,4 +667,39 @@ class MediaCarouselControllerTest : SysuiTestCase() {
        mediaCarouselController.updatePageIndicatorAlpha()
        assertEquals(mediaCarouselController.pageIndicator.alpha, 1.0F, delta)
    }

    @Ignore("b/253229241")
    @Test
    fun testOnConfigChanged_playersAreAddedBack() {
        listener.value.onMediaDataLoaded(
            "playing local",
            null,
            DATA.copy(
                active = true,
                isPlaying = true,
                playbackLocation = MediaData.PLAYBACK_LOCAL,
                resumption = false
            )
        )
        listener.value.onMediaDataLoaded(
            "paused local",
            null,
            DATA.copy(
                active = true,
                isPlaying = false,
                playbackLocation = MediaData.PLAYBACK_LOCAL,
                resumption = false
            )
        )

        val playersSize = MediaPlayerData.players().size

        configListener.value.onConfigChanged(capture(newConfig))

        assertEquals(playersSize, MediaPlayerData.players().size)
        assertEquals(
            MediaPlayerData.getMediaPlayerIndex("playing local"),
            mediaCarouselController.mediaCarouselScrollHandler.visibleMediaIndex
        )
    }
}