From fd81c904e11c47dcd7694e9b2f610914d4cf2596 Mon Sep 17 00:00:00 2001 From: tonihei Date: Mon, 9 Oct 2023 08:58:37 -0700 Subject: [PATCH] Use more targeted listening in session PlayerActivity The current metadata updates are triggered by item transitions, but depending on the speed of loading the playlist, the first metadata may only be known later via metadata-change callbacks. Slow playlist loading also means the UI stays empty and it's beneficial to show a placeholder to avoid the impressions the UI hangs. Finally, clean-up by removing unused string constants and merging all listeners into onEvents #minor-release PiperOrigin-RevId: 571951529 --- .../media3/demo/session/PlayerActivity.kt | 39 +++++++++++-------- demos/session/src/main/res/values/strings.xml | 5 +-- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/demos/session/src/main/java/androidx/media3/demo/session/PlayerActivity.kt b/demos/session/src/main/java/androidx/media3/demo/session/PlayerActivity.kt index 05be319345..af1f15c7d8 100644 --- a/demos/session/src/main/java/androidx/media3/demo/session/PlayerActivity.kt +++ b/demos/session/src/main/java/androidx/media3/demo/session/PlayerActivity.kt @@ -30,11 +30,11 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.media3.common.C.TRACK_TYPE_TEXT import androidx.media3.common.MediaItem -import androidx.media3.common.MediaMetadata import androidx.media3.common.Player import androidx.media3.common.Player.EVENT_MEDIA_ITEM_TRANSITION +import androidx.media3.common.Player.EVENT_MEDIA_METADATA_CHANGED +import androidx.media3.common.Player.EVENT_TIMELINE_CHANGED import androidx.media3.common.Player.EVENT_TRACKS_CHANGED -import androidx.media3.common.Timeline import androidx.media3.common.util.UnstableApi import androidx.media3.session.MediaController import androidx.media3.session.SessionToken @@ -96,6 +96,7 @@ class PlayerActivity : AppCompatActivity() { SessionToken(this, ComponentName(this, PlaybackService::class.java)) ) .buildAsync() + updateMediaMetadataUI() controllerFuture.addListener({ setController() }, MoreExecutors.directExecutor()) } @@ -110,37 +111,43 @@ class PlayerActivity : AppCompatActivity() { playerView.player = controller updateCurrentPlaylistUI() - updateMediaMetadataUI(controller.mediaMetadata) + updateMediaMetadataUI() playerView.setShowSubtitleButton(controller.currentTracks.isTypeSupported(TRACK_TYPE_TEXT)) controller.addListener( object : Player.Listener { - override fun onTimelineChanged(timeline: Timeline, reason: Int) { - if (reason == Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED) { - updateCurrentPlaylistUI() - } - } - override fun onEvents(player: Player, events: Player.Events) { - if (events.contains(EVENT_MEDIA_ITEM_TRANSITION)) { - updateMediaMetadataUI(player.currentMediaItem?.mediaMetadata ?: MediaMetadata.EMPTY) - } if (events.contains(EVENT_TRACKS_CHANGED)) { playerView.setShowSubtitleButton(player.currentTracks.isTypeSupported(TRACK_TYPE_TEXT)) } + if (events.contains(EVENT_TIMELINE_CHANGED)) { + updateCurrentPlaylistUI() + } + if (events.contains(EVENT_MEDIA_METADATA_CHANGED)) { + updateMediaMetadataUI() + } + if (events.contains(EVENT_MEDIA_ITEM_TRANSITION)) { + // Trigger adapter update to change highlight of current item. + mediaItemListAdapter.notifyDataSetChanged() + } } } ) } - private fun updateMediaMetadataUI(mediaMetadata: MediaMetadata) { + private fun updateMediaMetadataUI() { + val controller = this.controller + if (controller == null || controller.mediaItemCount == 0) { + findViewById(R.id.media_title).text = getString(R.string.waiting_for_metadata) + findViewById(R.id.media_artist).text = "" + return + } + + val mediaMetadata = controller.mediaMetadata val title: CharSequence = mediaMetadata.title ?: "" findViewById(R.id.media_title).text = title findViewById(R.id.media_artist).text = mediaMetadata.artist - - // Trick to update playlist UI - mediaItemListAdapter.notifyDataSetChanged() } private fun updateCurrentPlaylistUI() { diff --git a/demos/session/src/main/res/values/strings.xml b/demos/session/src/main/res/values/strings.xml index 727772e190..632e2ce602 100644 --- a/demos/session/src/main/res/values/strings.xml +++ b/demos/session/src/main/res/values/strings.xml @@ -19,9 +19,6 @@ Click to view your play list Added %1$s to playlist Shuffle - Repeat Play - - "! No media in the play list !\nPlease try to add more from browser" - + Waiting for playlist to load…