diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaCarouselControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaCarouselControllerTest.kt index 1a00ac2722fe9..745f094220f2b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaCarouselControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaCarouselControllerTest.kt @@ -17,6 +17,7 @@ package com.android.systemui.media.controls.ui import android.app.PendingIntent +import android.content.res.ColorStateList import android.content.res.Configuration import android.testing.AndroidTestingRunner import android.testing.TestableLooper @@ -26,6 +27,7 @@ import androidx.test.filters.SmallTest import com.android.internal.logging.InstanceId import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.KeyguardUpdateMonitorCallback +import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector import com.android.systemui.dagger.qualifiers.Main @@ -50,6 +52,7 @@ import com.android.systemui.statusbar.notification.collection.provider.OnReorder import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.util.concurrency.DelayableExecutor +import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.capture import com.android.systemui.util.mockito.eq import com.android.systemui.util.time.FakeSystemClock @@ -77,6 +80,8 @@ import org.mockito.MockitoAnnotations private val DATA = MediaTestUtils.emptyMediaData private val SMARTSPACE_KEY = "smartspace" +private const val PAUSED_LOCAL = "paused local" +private const val PLAYING_LOCAL = "playing local" @SmallTest @TestableLooper.RunWithLooper(setAsMainLooper = true) @@ -157,7 +162,7 @@ class MediaCarouselControllerTest : SysuiTestCase() { // Test values: key, data, last active time val playingLocal = Triple( - "playing local", + PLAYING_LOCAL, DATA.copy( active = true, isPlaying = true, @@ -181,7 +186,7 @@ class MediaCarouselControllerTest : SysuiTestCase() { val pausedLocal = Triple( - "paused local", + PAUSED_LOCAL, DATA.copy( active = true, isPlaying = false, @@ -384,8 +389,8 @@ class MediaCarouselControllerTest : SysuiTestCase() { testPlayerOrdering() // playing paused player listener.value.onMediaDataLoaded( - "paused local", - "paused local", + PAUSED_LOCAL, + PAUSED_LOCAL, DATA.copy( active = true, isPlaying = true, @@ -394,8 +399,8 @@ class MediaCarouselControllerTest : SysuiTestCase() { ) ) listener.value.onMediaDataLoaded( - "playing local", - "playing local", + PLAYING_LOCAL, + PLAYING_LOCAL, DATA.copy( active = true, isPlaying = false, @@ -405,7 +410,7 @@ class MediaCarouselControllerTest : SysuiTestCase() { ) assertEquals( - MediaPlayerData.getMediaPlayerIndex("paused local"), + MediaPlayerData.getMediaPlayerIndex(PAUSED_LOCAL), mediaCarouselController.mediaCarouselScrollHandler.visibleMediaIndex ) // paused player order should stays the same in visibleMediaPLayer map. @@ -486,7 +491,7 @@ class MediaCarouselControllerTest : SysuiTestCase() { @Test fun testMediaLoaded_ScrollToActivePlayer() { listener.value.onMediaDataLoaded( - "playing local", + PLAYING_LOCAL, null, DATA.copy( active = true, @@ -496,7 +501,7 @@ class MediaCarouselControllerTest : SysuiTestCase() { ) ) listener.value.onMediaDataLoaded( - "paused local", + PAUSED_LOCAL, null, DATA.copy( active = true, @@ -514,8 +519,8 @@ class MediaCarouselControllerTest : SysuiTestCase() { mediaCarouselController.shouldScrollToKey = true // switching between media players. listener.value.onMediaDataLoaded( - "playing local", - "playing local", + PLAYING_LOCAL, + PLAYING_LOCAL, DATA.copy( active = true, isPlaying = false, @@ -524,8 +529,8 @@ class MediaCarouselControllerTest : SysuiTestCase() { ) ) listener.value.onMediaDataLoaded( - "paused local", - "paused local", + PAUSED_LOCAL, + PAUSED_LOCAL, DATA.copy( active = true, isPlaying = true, @@ -535,7 +540,7 @@ class MediaCarouselControllerTest : SysuiTestCase() { ) assertEquals( - MediaPlayerData.getMediaPlayerIndex("paused local"), + MediaPlayerData.getMediaPlayerIndex(PAUSED_LOCAL), mediaCarouselController.mediaCarouselScrollHandler.visibleMediaIndex ) } @@ -548,7 +553,7 @@ class MediaCarouselControllerTest : SysuiTestCase() { false ) listener.value.onMediaDataLoaded( - "playing local", + PLAYING_LOCAL, null, DATA.copy( active = true, @@ -558,7 +563,7 @@ class MediaCarouselControllerTest : SysuiTestCase() { ) ) - var playerIndex = MediaPlayerData.getMediaPlayerIndex("playing local") + var playerIndex = MediaPlayerData.getMediaPlayerIndex(PLAYING_LOCAL) assertEquals( playerIndex, mediaCarouselController.mediaCarouselScrollHandler.visibleMediaIndex @@ -569,7 +574,7 @@ class MediaCarouselControllerTest : SysuiTestCase() { // And check that the card stays in its position. mediaCarouselController.shouldScrollToKey = true listener.value.onMediaDataLoaded( - "playing local", + PLAYING_LOCAL, null, DATA.copy( active = true, @@ -579,7 +584,7 @@ class MediaCarouselControllerTest : SysuiTestCase() { packageName = "PACKAGE_NAME" ) ) - playerIndex = MediaPlayerData.getMediaPlayerIndex("playing local") + playerIndex = MediaPlayerData.getMediaPlayerIndex(PLAYING_LOCAL) assertEquals(playerIndex, 0) } @@ -676,36 +681,35 @@ class MediaCarouselControllerTest : SysuiTestCase() { @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 - ) - ) + testConfigurationChange { configListener.value.onConfigChanged(Configuration()) } + } - val playersSize = MediaPlayerData.players().size + @Test + fun testOnUiModeChanged_playersAreAddedBack() { + testConfigurationChange(configListener.value::onUiModeChanged) - configListener.value.onConfigChanged(Configuration()) + verify(pageIndicator).tintList = + ColorStateList.valueOf(context.getColor(R.color.media_paging_indicator)) + verify(pageIndicator, times(2)).setNumPages(any()) + } - assertEquals(playersSize, MediaPlayerData.players().size) - assertEquals( - MediaPlayerData.getMediaPlayerIndex("playing local"), - mediaCarouselController.mediaCarouselScrollHandler.visibleMediaIndex - ) + @Test + fun testOnDensityOrFontScaleChanged_playersAreAddedBack() { + testConfigurationChange(configListener.value::onDensityOrFontScaleChanged) + + verify(pageIndicator).tintList = + ColorStateList.valueOf(context.getColor(R.color.media_paging_indicator)) + // when recreateMedia is set to true, page indicator is updated on removal and addition. + verify(pageIndicator, times(4)).setNumPages(any()) + } + + @Test + fun testOnThemeChanged_playersAreAddedBack() { + testConfigurationChange(configListener.value::onThemeChanged) + + verify(pageIndicator).tintList = + ColorStateList.valueOf(context.getColor(R.color.media_paging_indicator)) + verify(pageIndicator, times(2)).setNumPages(any()) } @Test @@ -846,4 +850,43 @@ class MediaCarouselControllerTest : SysuiTestCase() { // Then the carousel visibility is updated assertTrue(stateUpdated) } + + /** + * Helper method when a configuration change occurs. + * + * @param function called when a certain configuration change occurs. + */ + private fun testConfigurationChange(function: () -> Unit) { + mediaCarouselController.pageIndicator = pageIndicator + 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 + reset(pageIndicator) + function() + + assertEquals(playersSize, MediaPlayerData.players().size) + assertEquals( + MediaPlayerData.getMediaPlayerIndex(PLAYING_LOCAL), + mediaCarouselController.mediaCarouselScrollHandler.visibleMediaIndex + ) + } }