Loading packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/pipeline/Media3ActionFactoryTest.kt +2 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import com.android.systemui.media.controls.util.fakeMediaControllerFactory import com.android.systemui.media.controls.util.fakeSessionTokenFactory import com.android.systemui.res.R import com.android.systemui.testKosmos import com.android.systemui.util.concurrency.execution import com.google.common.collect.ImmutableList import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.runCurrent Loading Loading @@ -105,6 +106,7 @@ class Media3ActionFactoryTest : SysuiTestCase() { kosmos.looper, handler, kosmos.testScope, kosmos.execution, ) controllerFactory.setMedia3Controller(media3Controller) Loading packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/Media3ActionFactory.kt +3 −2 Original line number Diff line number Diff line Loading @@ -42,7 +42,7 @@ import com.android.systemui.media.controls.shared.model.MediaButton import com.android.systemui.media.controls.util.MediaControllerFactory import com.android.systemui.media.controls.util.SessionTokenFactory import com.android.systemui.res.R import com.android.systemui.util.Assert import com.android.systemui.util.concurrency.Execution import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch Loading @@ -63,6 +63,7 @@ constructor( @Background private val looper: Looper, @Background private val handler: Handler, @Background private val bgScope: CoroutineScope, private val execution: Execution, ) { /** Loading Loading @@ -108,7 +109,7 @@ constructor( m3controller: Media3Controller, token: SessionToken, ): MediaButton? { Assert.isNotMainThread() require(!execution.isMainThread()) // First, get standard actions val playOrPause = Loading packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/LegacyMediaDataManagerImplTest.kt +13 −0 Original line number Diff line number Diff line Loading @@ -289,6 +289,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa } verify(smartspaceManager).createSmartspaceSession(capture(smartSpaceConfigBuilderCaptor)) mediaControllerFactory.setControllerForToken(session.sessionToken, controller) whenever(controller.sessionToken).thenReturn(session.sessionToken) whenever(controller.transportControls).thenReturn(transportControls) whenever(controller.playbackInfo).thenReturn(playbackInfo) whenever(controller.metadata).thenReturn(metadataBuilder.build()) Loading Loading @@ -1599,6 +1600,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa verify(logger, never()).logResumeMediaAdded(anyInt(), eq(PACKAGE_NAME), any()) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testTooManyCompactActions_isTruncated() { // GIVEN a notification where too many compact actions were specified Loading Loading @@ -1635,6 +1637,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa .isEqualTo(LegacyMediaDataManagerImpl.MAX_COMPACT_ACTIONS) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testTooManyNotificationActions_isTruncated() { // GIVEN a notification where too many notification actions are added Loading Loading @@ -1670,6 +1673,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa .isEqualTo(LegacyMediaDataManagerImpl.MAX_NOTIFICATION_ACTIONS) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_noState_usesNotification() { val desc = "Notification Action" Loading Loading @@ -1703,6 +1707,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa assertThat(mediaDataCaptor.value!!.actions[0]!!.contentDescription).isEqualTo(desc) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_hasPrevNext() { val customDesc = arrayOf("custom 1", "custom 2", "custom 3", "custom 4") Loading Loading @@ -1746,6 +1751,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa assertThat(actions.custom1!!.contentDescription).isEqualTo(customDesc[1]) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_noPrevNext_usesCustom() { val customDesc = arrayOf("custom 1", "custom 2", "custom 3", "custom 4", "custom 5") Loading Loading @@ -1778,6 +1784,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa assertThat(actions.custom1!!.contentDescription).isEqualTo(customDesc[3]) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_connecting() { val stateActions = PlaybackState.ACTION_PLAY Loading @@ -1797,6 +1804,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa .isEqualTo(context.getString(R.string.controls_media_button_connecting)) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_reservedSpace() { val customDesc = arrayOf("custom 1", "custom 2", "custom 3", "custom 4") Loading Loading @@ -1835,6 +1843,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa assertThat(actions.reservePrev).isTrue() } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_playPause_hasButton() { val stateActions = PlaybackState.ACTION_PLAY_PAUSE Loading Loading @@ -1998,6 +2007,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa assertThat(mediaDataCaptor.value.semanticActions).isNotNull() } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackStateNull_Pause_keyExists_callsListener() { whenever(controller.playbackState).thenReturn(null) Loading Loading @@ -2056,6 +2066,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa assertThat(mediaDataCaptor.value.isClearable).isFalse() } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testRetain_notifPlayer_notifRemoved_setToResume() { fakeFeatureFlags.set(MEDIA_RETAIN_SESSIONS, true) Loading Loading @@ -2086,6 +2097,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa ) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testRetain_notifPlayer_sessionDestroyed_doesNotChange() { fakeFeatureFlags.set(MEDIA_RETAIN_SESSIONS, true) Loading @@ -2104,6 +2116,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa .onMediaDataLoaded(eq(PACKAGE_NAME), any(), any(), anyBoolean(), anyInt(), anyBoolean()) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testRetain_notifPlayer_removeWhileActive_fullyRemoved() { fakeFeatureFlags.set(MEDIA_RETAIN_SESSIONS, true) Loading packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataProcessorTest.kt +17 −4 Original line number Diff line number Diff line Loading @@ -103,7 +103,6 @@ import org.mockito.ArgumentMatchers.anyInt import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito.mock import org.mockito.Mockito.never import org.mockito.Mockito.reset import org.mockito.Mockito.verify Loading @@ -113,6 +112,7 @@ import org.mockito.junit.MockitoJUnit import org.mockito.kotlin.any import org.mockito.kotlin.capture import org.mockito.kotlin.eq import org.mockito.kotlin.mock import org.mockito.kotlin.whenever import org.mockito.quality.Strictness import platform.test.runner.parameterized.ParameterizedAndroidJunit4 Loading Loading @@ -312,6 +312,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { } verify(smartspaceManager).createSmartspaceSession(capture(smartSpaceConfigBuilderCaptor)) mediaControllerFactory.setControllerForToken(session.sessionToken, controller) whenever(controller.sessionToken).thenReturn(session.sessionToken) whenever(controller.transportControls).thenReturn(transportControls) whenever(controller.playbackInfo).thenReturn(playbackInfo) whenever(controller.metadata).thenReturn(metadataBuilder.build()) Loading Loading @@ -596,7 +597,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { fun testOnNotificationAdded_emptyTitle_hasPlaceholder() { // When the manager has a notification with an empty title, and the app is not // required to include a non-empty title val mockPackageManager = mock(PackageManager::class.java) val mockPackageManager = mock<PackageManager>() context.setMockPackageManager(mockPackageManager) whenever(mockPackageManager.getApplicationLabel(any())).thenReturn(APP_NAME) whenever(controller.metadata) Loading Loading @@ -626,7 +627,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { fun testOnNotificationAdded_blankTitle_hasPlaceholder() { // GIVEN that the manager has a notification with a blank title, and the app is not // required to include a non-empty title val mockPackageManager = mock(PackageManager::class.java) val mockPackageManager = mock<PackageManager>() context.setMockPackageManager(mockPackageManager) whenever(mockPackageManager.getApplicationLabel(any())).thenReturn(APP_NAME) whenever(controller.metadata) Loading Loading @@ -656,7 +657,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { fun testOnNotificationAdded_emptyMetadata_usesNotificationTitle() { // When the app sets the metadata title fields to empty strings, but does include a // non-blank notification title val mockPackageManager = mock(PackageManager::class.java) val mockPackageManager = mock<PackageManager>() context.setMockPackageManager(mockPackageManager) whenever(mockPackageManager.getApplicationLabel(any())).thenReturn(APP_NAME) whenever(controller.metadata) Loading Loading @@ -1610,6 +1611,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { verify(logger, never()).logResumeMediaAdded(anyInt(), eq(PACKAGE_NAME), any()) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testTooManyCompactActions_isTruncated() { // GIVEN a notification where too many compact actions were specified Loading Loading @@ -1646,6 +1648,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { .isEqualTo(MediaDataProcessor.MAX_COMPACT_ACTIONS) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testTooManyNotificationActions_isTruncated() { // GIVEN a notification where too many notification actions are added Loading Loading @@ -1681,6 +1684,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { .isEqualTo(MediaDataProcessor.MAX_NOTIFICATION_ACTIONS) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_noState_usesNotification() { val desc = "Notification Action" Loading Loading @@ -1714,6 +1718,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat(mediaDataCaptor.value!!.actions[0]!!.contentDescription).isEqualTo(desc) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_hasPrevNext() { val customDesc = arrayOf("custom 1", "custom 2", "custom 3", "custom 4") Loading Loading @@ -1757,6 +1762,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat(actions.custom1!!.contentDescription).isEqualTo(customDesc[1]) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_noPrevNext_usesCustom() { val customDesc = arrayOf("custom 1", "custom 2", "custom 3", "custom 4", "custom 5") Loading Loading @@ -1789,6 +1795,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat(actions.custom1!!.contentDescription).isEqualTo(customDesc[3]) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_connecting() { val stateActions = PlaybackState.ACTION_PLAY Loading Loading @@ -1874,6 +1881,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { .isNotEqualTo(firstSemanticActions.prevOrCustom?.icon) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_reservedSpace() { val customDesc = arrayOf("custom 1", "custom 2", "custom 3", "custom 4") Loading Loading @@ -1912,6 +1920,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat(actions.reservePrev).isTrue() } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_playPause_hasButton() { val stateActions = PlaybackState.ACTION_PLAY_PAUSE Loading Loading @@ -2074,6 +2083,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat(mediaDataCaptor.value.semanticActions).isNotNull() } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackStateNull_Pause_keyExists_callsListener() { whenever(controller.playbackState).thenReturn(null) Loading Loading @@ -2132,6 +2142,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat(mediaDataCaptor.value.isClearable).isFalse() } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testRetain_notifPlayer_notifRemoved_setToResume() { fakeFeatureFlags.set(MEDIA_RETAIN_SESSIONS, true) Loading Loading @@ -2162,6 +2173,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { ) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testRetain_notifPlayer_sessionDestroyed_doesNotChange() { fakeFeatureFlags.set(MEDIA_RETAIN_SESSIONS, true) Loading @@ -2180,6 +2192,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { .onMediaDataLoaded(eq(PACKAGE_NAME), any(), any(), anyBoolean(), anyInt(), anyBoolean()) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testRetain_notifPlayer_removeWhileActive_fullyRemoved() { fakeFeatureFlags.set(MEDIA_RETAIN_SESSIONS, true) Loading packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/Media3ActionFactoryKosmos.kt +19 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.os.Handler import android.os.looper import androidx.media3.session.CommandButton import androidx.media3.session.MediaController import androidx.media3.session.SessionCommand import androidx.media3.session.SessionToken import com.android.systemui.Flags import com.android.systemui.graphics.imageLoader Loading @@ -30,7 +31,11 @@ import com.android.systemui.kosmos.testScope import com.android.systemui.media.controls.shared.mediaLogger import com.android.systemui.media.controls.util.fakeMediaControllerFactory import com.android.systemui.media.controls.util.fakeSessionTokenFactory import com.android.systemui.util.concurrency.execution import com.google.common.collect.ImmutableList import org.mockito.kotlin.any import org.mockito.kotlin.argumentCaptor import org.mockito.kotlin.doAnswer import org.mockito.kotlin.mock import org.mockito.kotlin.whenever Loading @@ -46,10 +51,22 @@ var Kosmos.media3ActionFactory: Media3ActionFactory by mock<MediaController>().also { whenever(it.customLayout).thenReturn(customLayout) whenever(it.sessionExtras).thenReturn(Bundle()) whenever(it.isCommandAvailable(any())).thenReturn(true) whenever(it.isSessionCommandAvailable(any<SessionCommand>())).thenReturn(true) } fakeMediaControllerFactory.setMedia3Controller(media3Controller) fakeSessionTokenFactory.setMedia3SessionToken(mock<SessionToken>()) } val runnableCaptor = argumentCaptor<Runnable>() val handler = mock<Handler> { on { post(runnableCaptor.capture()) } doAnswer { runnableCaptor.lastValue.run() true } } Media3ActionFactory( context = applicationContext, imageLoader = imageLoader, Loading @@ -57,7 +74,8 @@ var Kosmos.media3ActionFactory: Media3ActionFactory by tokenFactory = fakeSessionTokenFactory, logger = mediaLogger, looper = looper, handler = Handler(looper), handler = handler, bgScope = testScope, execution = execution, ) } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/pipeline/Media3ActionFactoryTest.kt +2 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import com.android.systemui.media.controls.util.fakeMediaControllerFactory import com.android.systemui.media.controls.util.fakeSessionTokenFactory import com.android.systemui.res.R import com.android.systemui.testKosmos import com.android.systemui.util.concurrency.execution import com.google.common.collect.ImmutableList import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.runCurrent Loading Loading @@ -105,6 +106,7 @@ class Media3ActionFactoryTest : SysuiTestCase() { kosmos.looper, handler, kosmos.testScope, kosmos.execution, ) controllerFactory.setMedia3Controller(media3Controller) Loading
packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/Media3ActionFactory.kt +3 −2 Original line number Diff line number Diff line Loading @@ -42,7 +42,7 @@ import com.android.systemui.media.controls.shared.model.MediaButton import com.android.systemui.media.controls.util.MediaControllerFactory import com.android.systemui.media.controls.util.SessionTokenFactory import com.android.systemui.res.R import com.android.systemui.util.Assert import com.android.systemui.util.concurrency.Execution import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch Loading @@ -63,6 +63,7 @@ constructor( @Background private val looper: Looper, @Background private val handler: Handler, @Background private val bgScope: CoroutineScope, private val execution: Execution, ) { /** Loading Loading @@ -108,7 +109,7 @@ constructor( m3controller: Media3Controller, token: SessionToken, ): MediaButton? { Assert.isNotMainThread() require(!execution.isMainThread()) // First, get standard actions val playOrPause = Loading
packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/LegacyMediaDataManagerImplTest.kt +13 −0 Original line number Diff line number Diff line Loading @@ -289,6 +289,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa } verify(smartspaceManager).createSmartspaceSession(capture(smartSpaceConfigBuilderCaptor)) mediaControllerFactory.setControllerForToken(session.sessionToken, controller) whenever(controller.sessionToken).thenReturn(session.sessionToken) whenever(controller.transportControls).thenReturn(transportControls) whenever(controller.playbackInfo).thenReturn(playbackInfo) whenever(controller.metadata).thenReturn(metadataBuilder.build()) Loading Loading @@ -1599,6 +1600,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa verify(logger, never()).logResumeMediaAdded(anyInt(), eq(PACKAGE_NAME), any()) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testTooManyCompactActions_isTruncated() { // GIVEN a notification where too many compact actions were specified Loading Loading @@ -1635,6 +1637,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa .isEqualTo(LegacyMediaDataManagerImpl.MAX_COMPACT_ACTIONS) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testTooManyNotificationActions_isTruncated() { // GIVEN a notification where too many notification actions are added Loading Loading @@ -1670,6 +1673,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa .isEqualTo(LegacyMediaDataManagerImpl.MAX_NOTIFICATION_ACTIONS) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_noState_usesNotification() { val desc = "Notification Action" Loading Loading @@ -1703,6 +1707,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa assertThat(mediaDataCaptor.value!!.actions[0]!!.contentDescription).isEqualTo(desc) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_hasPrevNext() { val customDesc = arrayOf("custom 1", "custom 2", "custom 3", "custom 4") Loading Loading @@ -1746,6 +1751,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa assertThat(actions.custom1!!.contentDescription).isEqualTo(customDesc[1]) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_noPrevNext_usesCustom() { val customDesc = arrayOf("custom 1", "custom 2", "custom 3", "custom 4", "custom 5") Loading Loading @@ -1778,6 +1784,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa assertThat(actions.custom1!!.contentDescription).isEqualTo(customDesc[3]) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_connecting() { val stateActions = PlaybackState.ACTION_PLAY Loading @@ -1797,6 +1804,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa .isEqualTo(context.getString(R.string.controls_media_button_connecting)) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_reservedSpace() { val customDesc = arrayOf("custom 1", "custom 2", "custom 3", "custom 4") Loading Loading @@ -1835,6 +1843,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa assertThat(actions.reservePrev).isTrue() } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_playPause_hasButton() { val stateActions = PlaybackState.ACTION_PLAY_PAUSE Loading Loading @@ -1998,6 +2007,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa assertThat(mediaDataCaptor.value.semanticActions).isNotNull() } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackStateNull_Pause_keyExists_callsListener() { whenever(controller.playbackState).thenReturn(null) Loading Loading @@ -2056,6 +2066,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa assertThat(mediaDataCaptor.value.isClearable).isFalse() } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testRetain_notifPlayer_notifRemoved_setToResume() { fakeFeatureFlags.set(MEDIA_RETAIN_SESSIONS, true) Loading Loading @@ -2086,6 +2097,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa ) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testRetain_notifPlayer_sessionDestroyed_doesNotChange() { fakeFeatureFlags.set(MEDIA_RETAIN_SESSIONS, true) Loading @@ -2104,6 +2116,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa .onMediaDataLoaded(eq(PACKAGE_NAME), any(), any(), anyBoolean(), anyInt(), anyBoolean()) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testRetain_notifPlayer_removeWhileActive_fullyRemoved() { fakeFeatureFlags.set(MEDIA_RETAIN_SESSIONS, true) Loading
packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataProcessorTest.kt +17 −4 Original line number Diff line number Diff line Loading @@ -103,7 +103,6 @@ import org.mockito.ArgumentMatchers.anyInt import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito.mock import org.mockito.Mockito.never import org.mockito.Mockito.reset import org.mockito.Mockito.verify Loading @@ -113,6 +112,7 @@ import org.mockito.junit.MockitoJUnit import org.mockito.kotlin.any import org.mockito.kotlin.capture import org.mockito.kotlin.eq import org.mockito.kotlin.mock import org.mockito.kotlin.whenever import org.mockito.quality.Strictness import platform.test.runner.parameterized.ParameterizedAndroidJunit4 Loading Loading @@ -312,6 +312,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { } verify(smartspaceManager).createSmartspaceSession(capture(smartSpaceConfigBuilderCaptor)) mediaControllerFactory.setControllerForToken(session.sessionToken, controller) whenever(controller.sessionToken).thenReturn(session.sessionToken) whenever(controller.transportControls).thenReturn(transportControls) whenever(controller.playbackInfo).thenReturn(playbackInfo) whenever(controller.metadata).thenReturn(metadataBuilder.build()) Loading Loading @@ -596,7 +597,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { fun testOnNotificationAdded_emptyTitle_hasPlaceholder() { // When the manager has a notification with an empty title, and the app is not // required to include a non-empty title val mockPackageManager = mock(PackageManager::class.java) val mockPackageManager = mock<PackageManager>() context.setMockPackageManager(mockPackageManager) whenever(mockPackageManager.getApplicationLabel(any())).thenReturn(APP_NAME) whenever(controller.metadata) Loading Loading @@ -626,7 +627,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { fun testOnNotificationAdded_blankTitle_hasPlaceholder() { // GIVEN that the manager has a notification with a blank title, and the app is not // required to include a non-empty title val mockPackageManager = mock(PackageManager::class.java) val mockPackageManager = mock<PackageManager>() context.setMockPackageManager(mockPackageManager) whenever(mockPackageManager.getApplicationLabel(any())).thenReturn(APP_NAME) whenever(controller.metadata) Loading Loading @@ -656,7 +657,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { fun testOnNotificationAdded_emptyMetadata_usesNotificationTitle() { // When the app sets the metadata title fields to empty strings, but does include a // non-blank notification title val mockPackageManager = mock(PackageManager::class.java) val mockPackageManager = mock<PackageManager>() context.setMockPackageManager(mockPackageManager) whenever(mockPackageManager.getApplicationLabel(any())).thenReturn(APP_NAME) whenever(controller.metadata) Loading Loading @@ -1610,6 +1611,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { verify(logger, never()).logResumeMediaAdded(anyInt(), eq(PACKAGE_NAME), any()) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testTooManyCompactActions_isTruncated() { // GIVEN a notification where too many compact actions were specified Loading Loading @@ -1646,6 +1648,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { .isEqualTo(MediaDataProcessor.MAX_COMPACT_ACTIONS) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testTooManyNotificationActions_isTruncated() { // GIVEN a notification where too many notification actions are added Loading Loading @@ -1681,6 +1684,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { .isEqualTo(MediaDataProcessor.MAX_NOTIFICATION_ACTIONS) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_noState_usesNotification() { val desc = "Notification Action" Loading Loading @@ -1714,6 +1718,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat(mediaDataCaptor.value!!.actions[0]!!.contentDescription).isEqualTo(desc) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_hasPrevNext() { val customDesc = arrayOf("custom 1", "custom 2", "custom 3", "custom 4") Loading Loading @@ -1757,6 +1762,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat(actions.custom1!!.contentDescription).isEqualTo(customDesc[1]) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_noPrevNext_usesCustom() { val customDesc = arrayOf("custom 1", "custom 2", "custom 3", "custom 4", "custom 5") Loading Loading @@ -1789,6 +1795,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat(actions.custom1!!.contentDescription).isEqualTo(customDesc[3]) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_connecting() { val stateActions = PlaybackState.ACTION_PLAY Loading Loading @@ -1874,6 +1881,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { .isNotEqualTo(firstSemanticActions.prevOrCustom?.icon) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_reservedSpace() { val customDesc = arrayOf("custom 1", "custom 2", "custom 3", "custom 4") Loading Loading @@ -1912,6 +1920,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat(actions.reservePrev).isTrue() } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackActions_playPause_hasButton() { val stateActions = PlaybackState.ACTION_PLAY_PAUSE Loading Loading @@ -2074,6 +2083,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat(mediaDataCaptor.value.semanticActions).isNotNull() } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testPlaybackStateNull_Pause_keyExists_callsListener() { whenever(controller.playbackState).thenReturn(null) Loading Loading @@ -2132,6 +2142,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat(mediaDataCaptor.value.isClearable).isFalse() } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testRetain_notifPlayer_notifRemoved_setToResume() { fakeFeatureFlags.set(MEDIA_RETAIN_SESSIONS, true) Loading Loading @@ -2162,6 +2173,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { ) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testRetain_notifPlayer_sessionDestroyed_doesNotChange() { fakeFeatureFlags.set(MEDIA_RETAIN_SESSIONS, true) Loading @@ -2180,6 +2192,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { .onMediaDataLoaded(eq(PACKAGE_NAME), any(), any(), anyBoolean(), anyInt(), anyBoolean()) } @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_BUTTON_MEDIA3) @Test fun testRetain_notifPlayer_removeWhileActive_fullyRemoved() { fakeFeatureFlags.set(MEDIA_RETAIN_SESSIONS, true) Loading
packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/Media3ActionFactoryKosmos.kt +19 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.os.Handler import android.os.looper import androidx.media3.session.CommandButton import androidx.media3.session.MediaController import androidx.media3.session.SessionCommand import androidx.media3.session.SessionToken import com.android.systemui.Flags import com.android.systemui.graphics.imageLoader Loading @@ -30,7 +31,11 @@ import com.android.systemui.kosmos.testScope import com.android.systemui.media.controls.shared.mediaLogger import com.android.systemui.media.controls.util.fakeMediaControllerFactory import com.android.systemui.media.controls.util.fakeSessionTokenFactory import com.android.systemui.util.concurrency.execution import com.google.common.collect.ImmutableList import org.mockito.kotlin.any import org.mockito.kotlin.argumentCaptor import org.mockito.kotlin.doAnswer import org.mockito.kotlin.mock import org.mockito.kotlin.whenever Loading @@ -46,10 +51,22 @@ var Kosmos.media3ActionFactory: Media3ActionFactory by mock<MediaController>().also { whenever(it.customLayout).thenReturn(customLayout) whenever(it.sessionExtras).thenReturn(Bundle()) whenever(it.isCommandAvailable(any())).thenReturn(true) whenever(it.isSessionCommandAvailable(any<SessionCommand>())).thenReturn(true) } fakeMediaControllerFactory.setMedia3Controller(media3Controller) fakeSessionTokenFactory.setMedia3SessionToken(mock<SessionToken>()) } val runnableCaptor = argumentCaptor<Runnable>() val handler = mock<Handler> { on { post(runnableCaptor.capture()) } doAnswer { runnableCaptor.lastValue.run() true } } Media3ActionFactory( context = applicationContext, imageLoader = imageLoader, Loading @@ -57,7 +74,8 @@ var Kosmos.media3ActionFactory: Media3ActionFactory by tokenFactory = fakeSessionTokenFactory, logger = mediaLogger, looper = looper, handler = Handler(looper), handler = handler, bgScope = testScope, execution = execution, ) }