Loading packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt +10 −7 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import com.android.systemui.util.Utils import com.android.systemui.util.animation.UniqueObjectHostView import com.android.systemui.util.animation.requiresRemeasuring import com.android.systemui.util.concurrency.DelayableExecutor import com.android.systemui.util.time.SystemClock import java.util.TreeMap import javax.inject.Inject import javax.inject.Provider Loading @@ -45,6 +46,7 @@ class MediaCarouselController @Inject constructor( private val visualStabilityManager: VisualStabilityManager, private val mediaHostStatesManager: MediaHostStatesManager, private val activityStarter: ActivityStarter, private val systemClock: SystemClock, @Main executor: DelayableExecutor, private val mediaManager: MediaDataManager, configurationController: ConfigurationController, Loading Loading @@ -358,12 +360,12 @@ class MediaCarouselController @Inject constructor( newPlayer.playerViewHolder?.player?.setLayoutParams(lp) newPlayer.bindPlayer(dataCopy, key) newPlayer.setListening(currentlyExpanded) MediaPlayerData.addMediaPlayer(key, dataCopy, newPlayer) MediaPlayerData.addMediaPlayer(key, dataCopy, newPlayer, systemClock) updatePlayerToState(newPlayer, noAnimation = true) reorderAllPlayers(curVisibleMediaKey) } else { existingPlayer.bindPlayer(dataCopy, key) MediaPlayerData.addMediaPlayer(key, dataCopy, existingPlayer) MediaPlayerData.addMediaPlayer(key, dataCopy, existingPlayer, systemClock) if (visualStabilityManager.isReorderingAllowed || shouldScrollToActivePlayer) { reorderAllPlayers(curVisibleMediaKey) } else { Loading Loading @@ -407,7 +409,7 @@ class MediaCarouselController @Inject constructor( newRecs.bindRecommendation(data.copy(backgroundColor = bgColor)) val curVisibleMediaKey = MediaPlayerData.playerKeys() .elementAtOrNull(mediaCarouselScrollHandler.visibleMediaIndex) MediaPlayerData.addMediaRecommendation(key, data, newRecs, shouldPrioritize) MediaPlayerData.addMediaRecommendation(key, data, newRecs, shouldPrioritize, systemClock) updatePlayerToState(newRecs, noAnimation = true) reorderAllPlayers(curVisibleMediaKey) updatePageIndicator() Loading Loading @@ -775,9 +777,9 @@ internal object MediaPlayerData { private val mediaPlayers = TreeMap<MediaSortKey, MediaControlPanel>(comparator) 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) val sortKey = MediaSortKey(isSsMediaRec = false, data, System.currentTimeMillis()) val sortKey = MediaSortKey(isSsMediaRec = false, data, clock.currentTimeMillis()) mediaData.put(key, sortKey) mediaPlayers.put(sortKey, player) } Loading @@ -786,11 +788,12 @@ internal object MediaPlayerData { key: String, data: SmartspaceMediaData, player: MediaControlPanel, shouldPrioritize: Boolean shouldPrioritize: Boolean, clock: SystemClock ) { shouldPrioritizeSs = shouldPrioritize removeMediaPlayer(key) val sortKey = MediaSortKey(isSsMediaRec = true, EMPTY, System.currentTimeMillis()) val sortKey = MediaSortKey(isSsMediaRec = true, EMPTY, clock.currentTimeMillis()) mediaData.put(key, sortKey) mediaPlayers.put(sortKey, player) smartspaceMediaData = data Loading packages/SystemUI/tests/src/com/android/systemui/media/MediaPlayerDataTest.kt +30 −16 Original line number Diff line number Diff line Loading @@ -19,9 +19,9 @@ package com.android.systemui.media import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Ignore import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith Loading @@ -35,6 +35,7 @@ public class MediaPlayerDataTest : SysuiTestCase() { @Mock private lateinit var playerIsPlaying: MediaControlPanel private var systemClock: FakeSystemClock = FakeSystemClock() @JvmField @Rule Loading @@ -59,8 +60,8 @@ public class MediaPlayerDataTest : SysuiTestCase() { val playerIsRemote = mock(MediaControlPanel::class.java) val dataIsRemote = createMediaData("app2", PLAYING, !LOCAL, !RESUMPTION) MediaPlayerData.addMediaPlayer("2", dataIsRemote, playerIsRemote) MediaPlayerData.addMediaPlayer("1", dataIsPlaying, playerIsPlaying) MediaPlayerData.addMediaPlayer("2", dataIsRemote, playerIsRemote, systemClock) MediaPlayerData.addMediaPlayer("1", dataIsPlaying, playerIsPlaying, systemClock) val players = MediaPlayerData.players() assertThat(players).hasSize(2) Loading @@ -68,7 +69,6 @@ public class MediaPlayerDataTest : SysuiTestCase() { } @Test @Ignore("Flaky") fun switchPlayersPlaying() { val playerIsPlaying1 = mock(MediaControlPanel::class.java) var dataIsPlaying1 = createMediaData("app1", PLAYING, LOCAL, !RESUMPTION) Loading @@ -76,14 +76,19 @@ public class MediaPlayerDataTest : SysuiTestCase() { val playerIsPlaying2 = mock(MediaControlPanel::class.java) var dataIsPlaying2 = createMediaData("app2", !PLAYING, LOCAL, !RESUMPTION) MediaPlayerData.addMediaPlayer("1", dataIsPlaying1, playerIsPlaying1) MediaPlayerData.addMediaPlayer("2", dataIsPlaying2, playerIsPlaying2) MediaPlayerData.addMediaPlayer("1", dataIsPlaying1, playerIsPlaying1, systemClock) systemClock.advanceTime(1) MediaPlayerData.addMediaPlayer("2", dataIsPlaying2, playerIsPlaying2, systemClock) systemClock.advanceTime(1) dataIsPlaying1 = createMediaData("app1", !PLAYING, LOCAL, !RESUMPTION) dataIsPlaying2 = createMediaData("app2", PLAYING, LOCAL, !RESUMPTION) MediaPlayerData.addMediaPlayer("1", dataIsPlaying1, playerIsPlaying1) MediaPlayerData.addMediaPlayer("2", dataIsPlaying2, playerIsPlaying2) MediaPlayerData.addMediaPlayer("1", dataIsPlaying1, playerIsPlaying1, systemClock) systemClock.advanceTime(1) MediaPlayerData.addMediaPlayer("2", dataIsPlaying2, playerIsPlaying2, systemClock) systemClock.advanceTime(1) val players = MediaPlayerData.players() assertThat(players).hasSize(2) Loading @@ -109,12 +114,15 @@ public class MediaPlayerDataTest : SysuiTestCase() { val playerUndetermined = mock(MediaControlPanel::class.java) val dataUndetermined = createMediaData("app6", UNDETERMINED, LOCAL, RESUMPTION) MediaPlayerData.addMediaPlayer("3", dataIsStoppedAndLocal, playerIsStoppedAndLocal) MediaPlayerData.addMediaPlayer("5", dataIsStoppedAndRemote, playerIsStoppedAndRemote) MediaPlayerData.addMediaPlayer("4", dataCanResume, playerCanResume) MediaPlayerData.addMediaPlayer("1", dataIsPlaying, playerIsPlaying) MediaPlayerData.addMediaPlayer("2", dataIsPlayingAndRemote, playerIsPlayingAndRemote) MediaPlayerData.addMediaPlayer("6", dataUndetermined, playerUndetermined) MediaPlayerData.addMediaPlayer( "3", dataIsStoppedAndLocal, playerIsStoppedAndLocal, systemClock) MediaPlayerData.addMediaPlayer( "5", dataIsStoppedAndRemote, playerIsStoppedAndRemote, systemClock) MediaPlayerData.addMediaPlayer("4", dataCanResume, playerCanResume, systemClock) MediaPlayerData.addMediaPlayer("1", dataIsPlaying, playerIsPlaying, systemClock) MediaPlayerData.addMediaPlayer( "2", dataIsPlayingAndRemote, playerIsPlayingAndRemote, systemClock) MediaPlayerData.addMediaPlayer("6", dataUndetermined, playerUndetermined, systemClock) val players = MediaPlayerData.players() assertThat(players).hasSize(6) Loading @@ -130,8 +138,14 @@ public class MediaPlayerDataTest : SysuiTestCase() { val data = createMediaData("app1", PLAYING, LOCAL, !RESUMPTION) MediaPlayerData.addMediaPlayer(keyA, data, playerIsPlaying) MediaPlayerData.addMediaPlayer(keyB, data, playerIsPlaying) assertThat(MediaPlayerData.players()).hasSize(0) 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) Loading Loading
packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt +10 −7 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import com.android.systemui.util.Utils import com.android.systemui.util.animation.UniqueObjectHostView import com.android.systemui.util.animation.requiresRemeasuring import com.android.systemui.util.concurrency.DelayableExecutor import com.android.systemui.util.time.SystemClock import java.util.TreeMap import javax.inject.Inject import javax.inject.Provider Loading @@ -45,6 +46,7 @@ class MediaCarouselController @Inject constructor( private val visualStabilityManager: VisualStabilityManager, private val mediaHostStatesManager: MediaHostStatesManager, private val activityStarter: ActivityStarter, private val systemClock: SystemClock, @Main executor: DelayableExecutor, private val mediaManager: MediaDataManager, configurationController: ConfigurationController, Loading Loading @@ -358,12 +360,12 @@ class MediaCarouselController @Inject constructor( newPlayer.playerViewHolder?.player?.setLayoutParams(lp) newPlayer.bindPlayer(dataCopy, key) newPlayer.setListening(currentlyExpanded) MediaPlayerData.addMediaPlayer(key, dataCopy, newPlayer) MediaPlayerData.addMediaPlayer(key, dataCopy, newPlayer, systemClock) updatePlayerToState(newPlayer, noAnimation = true) reorderAllPlayers(curVisibleMediaKey) } else { existingPlayer.bindPlayer(dataCopy, key) MediaPlayerData.addMediaPlayer(key, dataCopy, existingPlayer) MediaPlayerData.addMediaPlayer(key, dataCopy, existingPlayer, systemClock) if (visualStabilityManager.isReorderingAllowed || shouldScrollToActivePlayer) { reorderAllPlayers(curVisibleMediaKey) } else { Loading Loading @@ -407,7 +409,7 @@ class MediaCarouselController @Inject constructor( newRecs.bindRecommendation(data.copy(backgroundColor = bgColor)) val curVisibleMediaKey = MediaPlayerData.playerKeys() .elementAtOrNull(mediaCarouselScrollHandler.visibleMediaIndex) MediaPlayerData.addMediaRecommendation(key, data, newRecs, shouldPrioritize) MediaPlayerData.addMediaRecommendation(key, data, newRecs, shouldPrioritize, systemClock) updatePlayerToState(newRecs, noAnimation = true) reorderAllPlayers(curVisibleMediaKey) updatePageIndicator() Loading Loading @@ -775,9 +777,9 @@ internal object MediaPlayerData { private val mediaPlayers = TreeMap<MediaSortKey, MediaControlPanel>(comparator) 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) val sortKey = MediaSortKey(isSsMediaRec = false, data, System.currentTimeMillis()) val sortKey = MediaSortKey(isSsMediaRec = false, data, clock.currentTimeMillis()) mediaData.put(key, sortKey) mediaPlayers.put(sortKey, player) } Loading @@ -786,11 +788,12 @@ internal object MediaPlayerData { key: String, data: SmartspaceMediaData, player: MediaControlPanel, shouldPrioritize: Boolean shouldPrioritize: Boolean, clock: SystemClock ) { shouldPrioritizeSs = shouldPrioritize removeMediaPlayer(key) val sortKey = MediaSortKey(isSsMediaRec = true, EMPTY, System.currentTimeMillis()) val sortKey = MediaSortKey(isSsMediaRec = true, EMPTY, clock.currentTimeMillis()) mediaData.put(key, sortKey) mediaPlayers.put(sortKey, player) smartspaceMediaData = data Loading
packages/SystemUI/tests/src/com/android/systemui/media/MediaPlayerDataTest.kt +30 −16 Original line number Diff line number Diff line Loading @@ -19,9 +19,9 @@ package com.android.systemui.media import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Ignore import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith Loading @@ -35,6 +35,7 @@ public class MediaPlayerDataTest : SysuiTestCase() { @Mock private lateinit var playerIsPlaying: MediaControlPanel private var systemClock: FakeSystemClock = FakeSystemClock() @JvmField @Rule Loading @@ -59,8 +60,8 @@ public class MediaPlayerDataTest : SysuiTestCase() { val playerIsRemote = mock(MediaControlPanel::class.java) val dataIsRemote = createMediaData("app2", PLAYING, !LOCAL, !RESUMPTION) MediaPlayerData.addMediaPlayer("2", dataIsRemote, playerIsRemote) MediaPlayerData.addMediaPlayer("1", dataIsPlaying, playerIsPlaying) MediaPlayerData.addMediaPlayer("2", dataIsRemote, playerIsRemote, systemClock) MediaPlayerData.addMediaPlayer("1", dataIsPlaying, playerIsPlaying, systemClock) val players = MediaPlayerData.players() assertThat(players).hasSize(2) Loading @@ -68,7 +69,6 @@ public class MediaPlayerDataTest : SysuiTestCase() { } @Test @Ignore("Flaky") fun switchPlayersPlaying() { val playerIsPlaying1 = mock(MediaControlPanel::class.java) var dataIsPlaying1 = createMediaData("app1", PLAYING, LOCAL, !RESUMPTION) Loading @@ -76,14 +76,19 @@ public class MediaPlayerDataTest : SysuiTestCase() { val playerIsPlaying2 = mock(MediaControlPanel::class.java) var dataIsPlaying2 = createMediaData("app2", !PLAYING, LOCAL, !RESUMPTION) MediaPlayerData.addMediaPlayer("1", dataIsPlaying1, playerIsPlaying1) MediaPlayerData.addMediaPlayer("2", dataIsPlaying2, playerIsPlaying2) MediaPlayerData.addMediaPlayer("1", dataIsPlaying1, playerIsPlaying1, systemClock) systemClock.advanceTime(1) MediaPlayerData.addMediaPlayer("2", dataIsPlaying2, playerIsPlaying2, systemClock) systemClock.advanceTime(1) dataIsPlaying1 = createMediaData("app1", !PLAYING, LOCAL, !RESUMPTION) dataIsPlaying2 = createMediaData("app2", PLAYING, LOCAL, !RESUMPTION) MediaPlayerData.addMediaPlayer("1", dataIsPlaying1, playerIsPlaying1) MediaPlayerData.addMediaPlayer("2", dataIsPlaying2, playerIsPlaying2) MediaPlayerData.addMediaPlayer("1", dataIsPlaying1, playerIsPlaying1, systemClock) systemClock.advanceTime(1) MediaPlayerData.addMediaPlayer("2", dataIsPlaying2, playerIsPlaying2, systemClock) systemClock.advanceTime(1) val players = MediaPlayerData.players() assertThat(players).hasSize(2) Loading @@ -109,12 +114,15 @@ public class MediaPlayerDataTest : SysuiTestCase() { val playerUndetermined = mock(MediaControlPanel::class.java) val dataUndetermined = createMediaData("app6", UNDETERMINED, LOCAL, RESUMPTION) MediaPlayerData.addMediaPlayer("3", dataIsStoppedAndLocal, playerIsStoppedAndLocal) MediaPlayerData.addMediaPlayer("5", dataIsStoppedAndRemote, playerIsStoppedAndRemote) MediaPlayerData.addMediaPlayer("4", dataCanResume, playerCanResume) MediaPlayerData.addMediaPlayer("1", dataIsPlaying, playerIsPlaying) MediaPlayerData.addMediaPlayer("2", dataIsPlayingAndRemote, playerIsPlayingAndRemote) MediaPlayerData.addMediaPlayer("6", dataUndetermined, playerUndetermined) MediaPlayerData.addMediaPlayer( "3", dataIsStoppedAndLocal, playerIsStoppedAndLocal, systemClock) MediaPlayerData.addMediaPlayer( "5", dataIsStoppedAndRemote, playerIsStoppedAndRemote, systemClock) MediaPlayerData.addMediaPlayer("4", dataCanResume, playerCanResume, systemClock) MediaPlayerData.addMediaPlayer("1", dataIsPlaying, playerIsPlaying, systemClock) MediaPlayerData.addMediaPlayer( "2", dataIsPlayingAndRemote, playerIsPlayingAndRemote, systemClock) MediaPlayerData.addMediaPlayer("6", dataUndetermined, playerUndetermined, systemClock) val players = MediaPlayerData.players() assertThat(players).hasSize(6) Loading @@ -130,8 +138,14 @@ public class MediaPlayerDataTest : SysuiTestCase() { val data = createMediaData("app1", PLAYING, LOCAL, !RESUMPTION) MediaPlayerData.addMediaPlayer(keyA, data, playerIsPlaying) MediaPlayerData.addMediaPlayer(keyB, data, playerIsPlaying) assertThat(MediaPlayerData.players()).hasSize(0) 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) Loading