From cf6c247bec92a17e2126b8a47be80cefa8f99e87 Mon Sep 17 00:00:00 2001 From: bachinger Date: Wed, 9 Aug 2017 14:35:38 -0700 Subject: [PATCH] set mediaSession flags properly and keep queue in sync when timeline changes ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=164774783 --- .../mediasession/MediaSessionConnector.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 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 33807930a5..329d446506 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 @@ -73,6 +73,10 @@ public final class MediaSessionConnector { } public static final String EXTRAS_PITCH = "EXO_PITCH"; + private static final int BASE_MEDIA_SESSION_FLAGS = MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS + | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS; + private static final int EDITOR_MEDIA_SESSION_FLAGS = BASE_MEDIA_SESSION_FLAGS + | MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS; /** * Interface to which playback preparation actions are delegated. @@ -318,7 +322,6 @@ public final class MediaSessionConnector { private Player player; private CustomActionProvider[] customActionProviders; - private int currentWindowIndex; private Map customActionMap; private ErrorMessageProvider errorMessageProvider; private PlaybackPreparer playbackPreparer; @@ -369,8 +372,7 @@ public final class MediaSessionConnector { this.handler = new Handler(Looper.myLooper() != null ? Looper.myLooper() : Looper.getMainLooper()); this.doMaintainMetadata = doMaintainMetadata; - mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS - | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); + mediaSession.setFlags(BASE_MEDIA_SESSION_FLAGS); mediaController = mediaSession.getController(); mediaSessionCallback = new MediaSessionCallback(); exoPlayerEventListener = new ExoPlayerEventListener(); @@ -433,6 +435,8 @@ public final class MediaSessionConnector { */ public void setQueueEditor(QueueEditor queueEditor) { this.queueEditor = queueEditor; + mediaSession.setFlags(queueEditor == null ? BASE_MEDIA_SESSION_FLAGS + : EDITOR_MEDIA_SESSION_FLAGS); } private void updateMediaSessionPlaybackState() { @@ -583,11 +587,20 @@ public final class MediaSessionConnector { private class ExoPlayerEventListener implements Player.EventListener { + private int currentWindowIndex; + private int currentWindowCount; + @Override public void onTimelineChanged(Timeline timeline, Object manifest) { if (queueNavigator != null) { queueNavigator.onTimelineChanged(player); } + int windowCount = player.getCurrentTimeline().getWindowCount(); + if (currentWindowCount != windowCount) { + // active queue item and queue navigation actions may need to be updated + updateMediaSessionPlaybackState(); + } + currentWindowCount = windowCount; currentWindowIndex = player.getCurrentWindowIndex(); updateMediaSessionMetadata(); }