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
This commit is contained in:
Michael Mikhail
2022-12-16 21:05:02 +00:00
parent bc2a65562e
commit d16af9ee11
2 changed files with 54 additions and 1 deletions

View File

@@ -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,7 +201,13 @@ constructor(
override fun onConfigChanged(newConfig: Configuration?) {
if (newConfig == null) return
isRtl = newConfig.layoutDirection == View.LAYOUT_DIRECTION_RTL
updatePlayers(recreateMedia = true)
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() {
@@ -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)
}
}
}

View File

@@ -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
)
}
}