File tree Expand file tree Collapse file tree 3 files changed +36
-6
lines changed
main/java/androidx/media3/ui/compose/state
test/java/androidx/media3/ui/compose Expand file tree Collapse file tree 3 files changed +36
-6
lines changed Original file line number Diff line number Diff line change @@ -48,18 +48,27 @@ fun rememberMetadataState(player: Player): MetadataState {
4848 */
4949@UnstableApi
5050class MetadataState (private val player : Player ) {
51- var uri by mutableStateOf(player.getMediaItemUri ())
51+ var uri by mutableStateOf(player.getMediaItemUriWithCommandCheck ())
5252 private set
5353
5454 suspend fun observe (): Nothing {
5555 player.listen { events ->
56- if (events.contains(Player .EVENT_MEDIA_ITEM_TRANSITION )) {
57- uri = getMediaItemUri()
56+ if (
57+ events.containsAny(
58+ Player .EVENT_AVAILABLE_COMMANDS_CHANGED ,
59+ Player .EVENT_MEDIA_ITEM_TRANSITION ,
60+ )
61+ ) {
62+ uri = getMediaItemUriWithCommandCheck()
5863 }
5964 }
6065 }
6166
62- private fun Player.getMediaItemUri (): Uri ? {
63- return currentMediaItem?.localConfiguration?.uri
67+ private fun Player.getMediaItemUriWithCommandCheck (): Uri ? {
68+ return if (isCommandAvailable(Player .COMMAND_GET_CURRENT_MEDIA_ITEM )) {
69+ currentMediaItem?.localConfiguration?.uri
70+ } else {
71+ null
72+ }
6473 }
6574}
Original file line number Diff line number Diff line change @@ -105,4 +105,25 @@ class MetadataStateTest {
105105
106106 assertThat(state.uri).isEqualTo(uri2)
107107 }
108+
109+ @Test
110+ fun uri_getCurrentMediaItemCommandBecomesAvailable_returnsUpdatedUri () {
111+ val uri = " https://storage.googleapis.com/wvmedia/clear/h264/tears/tears.mpd" .toUri()
112+ val player = TestPlayer (
113+ playlist = listOf (
114+ MediaItemData .Builder (" uid_1" ).setMediaItem(MediaItem .fromUri(uri)).build(),
115+ ),
116+ )
117+ player.removeCommands(Player .COMMAND_GET_CURRENT_MEDIA_ITEM )
118+
119+ lateinit var state: MetadataState
120+ composeTestRule.setContent { state = rememberMetadataState(player) }
121+
122+ assertThat(state.uri).isNull()
123+
124+ player.addCommands(Player .COMMAND_GET_CURRENT_MEDIA_ITEM )
125+ composeTestRule.waitForIdle()
126+
127+ assertThat(state.uri).isEqualTo(uri)
128+ }
108129}
Original file line number Diff line number Diff line change @@ -172,7 +172,7 @@ internal class TestPlayer(
172172
173173 fun setDuration (uid : String , durationMs : Long ) {
174174 val index = state.playlist.indexOfFirst { it.uid == uid }
175- require(index > - 1 ) { " Playlist does not contain item with uid: $uid " }
175+ require(index >= 0 ) { " Playlist does not contain item with uid: $uid " }
176176 val modifiedPlaylist = buildList {
177177 addAll(state.playlist)
178178 set(index, state.playlist[index].buildUpon().setDurationUs(msToUs(durationMs)).build())
You can’t perform that action at this time.
0 commit comments