Merge "Fix Flaky MediaPlayerDataTest test." into sc-dev

This commit is contained in:
Dave Mankoff
2021-07-01 17:32:57 +00:00
committed by Android (Google) Code Review
2 changed files with 40 additions and 23 deletions

View File

@@ -26,6 +26,7 @@ import com.android.systemui.util.Utils
import com.android.systemui.util.animation.UniqueObjectHostView import com.android.systemui.util.animation.UniqueObjectHostView
import com.android.systemui.util.animation.requiresRemeasuring import com.android.systemui.util.animation.requiresRemeasuring
import com.android.systemui.util.concurrency.DelayableExecutor import com.android.systemui.util.concurrency.DelayableExecutor
import com.android.systemui.util.time.SystemClock
import java.util.TreeMap import java.util.TreeMap
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Provider import javax.inject.Provider
@@ -45,6 +46,7 @@ class MediaCarouselController @Inject constructor(
private val visualStabilityManager: VisualStabilityManager, private val visualStabilityManager: VisualStabilityManager,
private val mediaHostStatesManager: MediaHostStatesManager, private val mediaHostStatesManager: MediaHostStatesManager,
private val activityStarter: ActivityStarter, private val activityStarter: ActivityStarter,
private val systemClock: SystemClock,
@Main executor: DelayableExecutor, @Main executor: DelayableExecutor,
private val mediaManager: MediaDataManager, private val mediaManager: MediaDataManager,
configurationController: ConfigurationController, configurationController: ConfigurationController,
@@ -358,12 +360,12 @@ class MediaCarouselController @Inject constructor(
newPlayer.playerViewHolder?.player?.setLayoutParams(lp) newPlayer.playerViewHolder?.player?.setLayoutParams(lp)
newPlayer.bindPlayer(dataCopy, key) newPlayer.bindPlayer(dataCopy, key)
newPlayer.setListening(currentlyExpanded) newPlayer.setListening(currentlyExpanded)
MediaPlayerData.addMediaPlayer(key, dataCopy, newPlayer) MediaPlayerData.addMediaPlayer(key, dataCopy, newPlayer, systemClock)
updatePlayerToState(newPlayer, noAnimation = true) updatePlayerToState(newPlayer, noAnimation = true)
reorderAllPlayers(curVisibleMediaKey) reorderAllPlayers(curVisibleMediaKey)
} else { } else {
existingPlayer.bindPlayer(dataCopy, key) existingPlayer.bindPlayer(dataCopy, key)
MediaPlayerData.addMediaPlayer(key, dataCopy, existingPlayer) MediaPlayerData.addMediaPlayer(key, dataCopy, existingPlayer, systemClock)
if (visualStabilityManager.isReorderingAllowed || shouldScrollToActivePlayer) { if (visualStabilityManager.isReorderingAllowed || shouldScrollToActivePlayer) {
reorderAllPlayers(curVisibleMediaKey) reorderAllPlayers(curVisibleMediaKey)
} else { } else {
@@ -407,7 +409,7 @@ class MediaCarouselController @Inject constructor(
newRecs.bindRecommendation(data.copy(backgroundColor = bgColor)) newRecs.bindRecommendation(data.copy(backgroundColor = bgColor))
val curVisibleMediaKey = MediaPlayerData.playerKeys() val curVisibleMediaKey = MediaPlayerData.playerKeys()
.elementAtOrNull(mediaCarouselScrollHandler.visibleMediaIndex) .elementAtOrNull(mediaCarouselScrollHandler.visibleMediaIndex)
MediaPlayerData.addMediaRecommendation(key, data, newRecs, shouldPrioritize) MediaPlayerData.addMediaRecommendation(key, data, newRecs, shouldPrioritize, systemClock)
updatePlayerToState(newRecs, noAnimation = true) updatePlayerToState(newRecs, noAnimation = true)
reorderAllPlayers(curVisibleMediaKey) reorderAllPlayers(curVisibleMediaKey)
updatePageIndicator() updatePageIndicator()
@@ -775,9 +777,9 @@ internal object MediaPlayerData {
private val mediaPlayers = TreeMap<MediaSortKey, MediaControlPanel>(comparator) private val mediaPlayers = TreeMap<MediaSortKey, MediaControlPanel>(comparator)
private val mediaData: MutableMap<String, MediaSortKey> = mutableMapOf() private val mediaData: MutableMap<String, MediaSortKey> = mutableMapOf()
fun addMediaPlayer(key: String, data: MediaData, player: MediaControlPanel) { fun addMediaPlayer(key: String, data: MediaData, player: MediaControlPanel, clock: SystemClock) {
removeMediaPlayer(key) removeMediaPlayer(key)
val sortKey = MediaSortKey(isSsMediaRec = false, data, System.currentTimeMillis()) val sortKey = MediaSortKey(isSsMediaRec = false, data, clock.currentTimeMillis())
mediaData.put(key, sortKey) mediaData.put(key, sortKey)
mediaPlayers.put(sortKey, player) mediaPlayers.put(sortKey, player)
} }
@@ -786,11 +788,12 @@ internal object MediaPlayerData {
key: String, key: String,
data: SmartspaceMediaData, data: SmartspaceMediaData,
player: MediaControlPanel, player: MediaControlPanel,
shouldPrioritize: Boolean shouldPrioritize: Boolean,
clock: SystemClock
) { ) {
shouldPrioritizeSs = shouldPrioritize shouldPrioritizeSs = shouldPrioritize
removeMediaPlayer(key) removeMediaPlayer(key)
val sortKey = MediaSortKey(isSsMediaRec = true, EMPTY, System.currentTimeMillis()) val sortKey = MediaSortKey(isSsMediaRec = true, EMPTY, clock.currentTimeMillis())
mediaData.put(key, sortKey) mediaData.put(key, sortKey)
mediaPlayers.put(sortKey, player) mediaPlayers.put(sortKey, player)
smartspaceMediaData = data smartspaceMediaData = data

View File

@@ -19,9 +19,9 @@ package com.android.systemui.media
import android.testing.AndroidTestingRunner import android.testing.AndroidTestingRunner
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import org.junit.Before import org.junit.Before
import org.junit.Ignore
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
@@ -35,6 +35,7 @@ public class MediaPlayerDataTest : SysuiTestCase() {
@Mock @Mock
private lateinit var playerIsPlaying: MediaControlPanel private lateinit var playerIsPlaying: MediaControlPanel
private var systemClock: FakeSystemClock = FakeSystemClock()
@JvmField @JvmField
@Rule @Rule
@@ -59,8 +60,8 @@ public class MediaPlayerDataTest : SysuiTestCase() {
val playerIsRemote = mock(MediaControlPanel::class.java) val playerIsRemote = mock(MediaControlPanel::class.java)
val dataIsRemote = createMediaData("app2", PLAYING, !LOCAL, !RESUMPTION) val dataIsRemote = createMediaData("app2", PLAYING, !LOCAL, !RESUMPTION)
MediaPlayerData.addMediaPlayer("2", dataIsRemote, playerIsRemote) MediaPlayerData.addMediaPlayer("2", dataIsRemote, playerIsRemote, systemClock)
MediaPlayerData.addMediaPlayer("1", dataIsPlaying, playerIsPlaying) MediaPlayerData.addMediaPlayer("1", dataIsPlaying, playerIsPlaying, systemClock)
val players = MediaPlayerData.players() val players = MediaPlayerData.players()
assertThat(players).hasSize(2) assertThat(players).hasSize(2)
@@ -68,7 +69,6 @@ public class MediaPlayerDataTest : SysuiTestCase() {
} }
@Test @Test
@Ignore("Flaky")
fun switchPlayersPlaying() { fun switchPlayersPlaying() {
val playerIsPlaying1 = mock(MediaControlPanel::class.java) val playerIsPlaying1 = mock(MediaControlPanel::class.java)
var dataIsPlaying1 = createMediaData("app1", PLAYING, LOCAL, !RESUMPTION) var dataIsPlaying1 = createMediaData("app1", PLAYING, LOCAL, !RESUMPTION)
@@ -76,14 +76,19 @@ public class MediaPlayerDataTest : SysuiTestCase() {
val playerIsPlaying2 = mock(MediaControlPanel::class.java) val playerIsPlaying2 = mock(MediaControlPanel::class.java)
var dataIsPlaying2 = createMediaData("app2", !PLAYING, LOCAL, !RESUMPTION) var dataIsPlaying2 = createMediaData("app2", !PLAYING, LOCAL, !RESUMPTION)
MediaPlayerData.addMediaPlayer("1", dataIsPlaying1, playerIsPlaying1) MediaPlayerData.addMediaPlayer("1", dataIsPlaying1, playerIsPlaying1, systemClock)
MediaPlayerData.addMediaPlayer("2", dataIsPlaying2, playerIsPlaying2) systemClock.advanceTime(1)
MediaPlayerData.addMediaPlayer("2", dataIsPlaying2, playerIsPlaying2, systemClock)
systemClock.advanceTime(1)
dataIsPlaying1 = createMediaData("app1", !PLAYING, LOCAL, !RESUMPTION) dataIsPlaying1 = createMediaData("app1", !PLAYING, LOCAL, !RESUMPTION)
dataIsPlaying2 = createMediaData("app2", PLAYING, LOCAL, !RESUMPTION) dataIsPlaying2 = createMediaData("app2", PLAYING, LOCAL, !RESUMPTION)
MediaPlayerData.addMediaPlayer("1", dataIsPlaying1, playerIsPlaying1) MediaPlayerData.addMediaPlayer("1", dataIsPlaying1, playerIsPlaying1, systemClock)
MediaPlayerData.addMediaPlayer("2", dataIsPlaying2, playerIsPlaying2) systemClock.advanceTime(1)
MediaPlayerData.addMediaPlayer("2", dataIsPlaying2, playerIsPlaying2, systemClock)
systemClock.advanceTime(1)
val players = MediaPlayerData.players() val players = MediaPlayerData.players()
assertThat(players).hasSize(2) assertThat(players).hasSize(2)
@@ -109,12 +114,15 @@ public class MediaPlayerDataTest : SysuiTestCase() {
val playerUndetermined = mock(MediaControlPanel::class.java) val playerUndetermined = mock(MediaControlPanel::class.java)
val dataUndetermined = createMediaData("app6", UNDETERMINED, LOCAL, RESUMPTION) val dataUndetermined = createMediaData("app6", UNDETERMINED, LOCAL, RESUMPTION)
MediaPlayerData.addMediaPlayer("3", dataIsStoppedAndLocal, playerIsStoppedAndLocal) MediaPlayerData.addMediaPlayer(
MediaPlayerData.addMediaPlayer("5", dataIsStoppedAndRemote, playerIsStoppedAndRemote) "3", dataIsStoppedAndLocal, playerIsStoppedAndLocal, systemClock)
MediaPlayerData.addMediaPlayer("4", dataCanResume, playerCanResume) MediaPlayerData.addMediaPlayer(
MediaPlayerData.addMediaPlayer("1", dataIsPlaying, playerIsPlaying) "5", dataIsStoppedAndRemote, playerIsStoppedAndRemote, systemClock)
MediaPlayerData.addMediaPlayer("2", dataIsPlayingAndRemote, playerIsPlayingAndRemote) MediaPlayerData.addMediaPlayer("4", dataCanResume, playerCanResume, systemClock)
MediaPlayerData.addMediaPlayer("6", dataUndetermined, playerUndetermined) MediaPlayerData.addMediaPlayer("1", dataIsPlaying, playerIsPlaying, systemClock)
MediaPlayerData.addMediaPlayer(
"2", dataIsPlayingAndRemote, playerIsPlayingAndRemote, systemClock)
MediaPlayerData.addMediaPlayer("6", dataUndetermined, playerUndetermined, systemClock)
val players = MediaPlayerData.players() val players = MediaPlayerData.players()
assertThat(players).hasSize(6) assertThat(players).hasSize(6)
@@ -130,8 +138,14 @@ public class MediaPlayerDataTest : SysuiTestCase() {
val data = createMediaData("app1", PLAYING, LOCAL, !RESUMPTION) val data = createMediaData("app1", PLAYING, LOCAL, !RESUMPTION)
MediaPlayerData.addMediaPlayer(keyA, data, playerIsPlaying) assertThat(MediaPlayerData.players()).hasSize(0)
MediaPlayerData.addMediaPlayer(keyB, data, playerIsPlaying)
MediaPlayerData.addMediaPlayer(keyA, data, playerIsPlaying, systemClock)
systemClock.advanceTime(1)
assertThat(MediaPlayerData.players()).hasSize(1)
MediaPlayerData.addMediaPlayer(keyB, data, playerIsPlaying, systemClock)
systemClock.advanceTime(1)
assertThat(MediaPlayerData.players()).hasSize(2) assertThat(MediaPlayerData.players()).hasSize(2)