From 5dd9ef0086dfbd29d789978b23ebd47b855e3367 Mon Sep 17 00:00:00 2001 From: bachinger Date: Tue, 26 Jun 2018 09:00:12 -0700 Subject: [PATCH] add invalidate methods for playback state, metadata and queue of the media session ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=202136530 --- .../mediasession/MediaSessionConnector.java | 53 +++++++++++++------ 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java b/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java index dd74da6766..87b5859966 100644 --- a/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java +++ b/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java @@ -429,8 +429,8 @@ public final class MediaSessionConnector { mediaSession.setCallback(mediaSessionCallback, handler); player.addListener(exoPlayerEventListener); } - updateMediaSessionPlaybackState(); - updateMediaSessionMetadata(); + invalidateMediaSessionPlaybackState(); + invalidateMediaSessionMetadata(); } /** @@ -442,7 +442,7 @@ public final class MediaSessionConnector { @Nullable ErrorMessageProvider errorMessageProvider) { if (this.errorMessageProvider != errorMessageProvider) { this.errorMessageProvider = errorMessageProvider; - updateMediaSessionPlaybackState(); + invalidateMediaSessionPlaybackState(); } } @@ -494,13 +494,19 @@ public final class MediaSessionConnector { *

Apps normally only need to call this method when the backing data for a given media item has * changed and the metadata should be updated immediately. */ - public final void updateMediaSessionMetadata() { - if (mediaMetadataProvider != null) { + public final void invalidateMediaSessionMetadata() { + if (mediaMetadataProvider != null && player != null) { mediaSession.setMetadata(mediaMetadataProvider.getMetadata(player)); } } - private void updateMediaSessionPlaybackState() { + /** + * Updates the playback state of the media session. + * + *

Apps normally only need to call this method when the custom actions provided by a {@link + * CustomActionProvider} changed and the playback state needs to be updated immediately. + */ + public final void invalidateMediaSessionPlaybackState() { PlaybackStateCompat.Builder builder = new PlaybackStateCompat.Builder(); if (player == null) { builder.setActions(buildPlaybackActions()).setState(PlaybackStateCompat.STATE_NONE, 0, 0, 0); @@ -548,6 +554,19 @@ public final class MediaSessionConnector { mediaSession.setPlaybackState(builder.build()); } + /** + * Updates the queue of the media session by calling {@link + * QueueNavigator#onTimelineChanged(Player)}. + * + *

Apps normally only need to call this method when the backing data for a given queue item has + * changed and the queue should be updated immediately. + */ + public final void invalidateMediaSessionQueue() { + if (queueNavigator != null && player != null) { + queueNavigator.onTimelineChanged(player); + } + } + private void registerCommandReceiver(CommandReceiver commandReceiver) { if (commandReceiver != null && commandReceiver.getCommands() != null) { for (String command : commandReceiver.getCommands()) { @@ -728,19 +747,19 @@ public final class MediaSessionConnector { int windowIndex = player.getCurrentWindowIndex(); if (queueNavigator != null) { queueNavigator.onTimelineChanged(player); - updateMediaSessionPlaybackState(); + invalidateMediaSessionPlaybackState(); } else if (currentWindowCount != windowCount || currentWindowIndex != windowIndex) { // active queue item and queue navigation actions may need to be updated - updateMediaSessionPlaybackState(); + invalidateMediaSessionPlaybackState(); } currentWindowCount = windowCount; currentWindowIndex = windowIndex; - updateMediaSessionMetadata(); + invalidateMediaSessionMetadata(); } @Override public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { - updateMediaSessionPlaybackState(); + invalidateMediaSessionPlaybackState(); } @Override @@ -751,7 +770,7 @@ public final class MediaSessionConnector { : repeatMode == Player.REPEAT_MODE_ALL ? PlaybackStateCompat.REPEAT_MODE_ALL : PlaybackStateCompat.REPEAT_MODE_NONE); - updateMediaSessionPlaybackState(); + invalidateMediaSessionPlaybackState(); } @Override @@ -760,7 +779,7 @@ public final class MediaSessionConnector { shuffleModeEnabled ? PlaybackStateCompat.SHUFFLE_MODE_ALL : PlaybackStateCompat.SHUFFLE_MODE_NONE); - updateMediaSessionPlaybackState(); + invalidateMediaSessionPlaybackState(); } @Override @@ -772,16 +791,16 @@ public final class MediaSessionConnector { currentWindowIndex = player.getCurrentWindowIndex(); // Update playback state after queueNavigator.onCurrentWindowIndexChanged has been called // and before updating metadata. - updateMediaSessionPlaybackState(); - updateMediaSessionMetadata(); + invalidateMediaSessionPlaybackState(); + invalidateMediaSessionMetadata(); return; } - updateMediaSessionPlaybackState(); + invalidateMediaSessionPlaybackState(); } @Override public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) { - updateMediaSessionPlaybackState(); + invalidateMediaSessionPlaybackState(); } } @@ -869,7 +888,7 @@ public final class MediaSessionConnector { Map actionMap = customActionMap; if (actionMap.containsKey(action)) { actionMap.get(action).onCustomAction(action, extras); - updateMediaSessionPlaybackState(); + invalidateMediaSessionPlaybackState(); } }