From 87086f59ad7263facde0d17404c70e5311cde29c Mon Sep 17 00:00:00 2001 From: Jaewan Kim Date: Wed, 7 Mar 2018 15:16:55 +0900 Subject: [PATCH] MediaSession2: Add SessionCallback#onCurrentMediaItemChanged() Added callback for session to know the currently playing media item has changed. Note that the callback is called in response to the MediaPlayerBase#PlayerEventCallback#onCurrentDataSourceChanged(mpb, dsd is called. Session will translate dsd to the media item and calls onCurrentMediaItemChanged(). Following changes are also included - Removed MediaPlaylistController#getCurrentPlaylistItem(), because currently playing item is managed by the MediaPlayerBase. - Renamed ControllerCallback#onCurrentPlaylistItemChanged() to the ControllerCallback#onCurrentMediaItemChanged(), to make it more obvious that the event is from MediaPlayerBase, not MediaPlaylistController. - Added SessionCallback#onCurrentMediaItemChanged() Bug: 64098437 Test: Run MediaComponents test Change-Id: I78b124a7da0f968b097b2576507b9a73e36081ec --- api/current.txt | 8 ++++---- media/java/android/media/MediaController2.java | 13 ++++++------- .../android/media/MediaPlaylistController.java | 6 ------ media/java/android/media/MediaSession2.java | 17 +++++++++++++++-- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/api/current.txt b/api/current.txt index e48d0e37bfc9c..9c42a24442b8b 100644 --- a/api/current.txt +++ b/api/current.txt @@ -23357,7 +23357,7 @@ package android.media { method public void close(); method public void fastForward(); method public long getBufferedPosition(); - method public android.media.MediaItem2 getCurrentPlaylistItem(); + method public android.media.MediaItem2 getCurrentMediaItem(); method public android.media.MediaController2.PlaybackInfo getPlaybackInfo(); method public float getPlaybackSpeed(); method public int getPlayerState(); @@ -23403,7 +23403,7 @@ package android.media { method public void onAllowedCommandsChanged(android.media.MediaController2, android.media.MediaSession2.CommandGroup); method public void onBufferedPositionChanged(android.media.MediaController2, long); method public void onConnected(android.media.MediaController2, android.media.MediaSession2.CommandGroup); - method public void onCurrentPlaylistItemChanged(android.media.MediaController2, android.media.MediaItem2); + method public void onCurrentMediaItemChanged(android.media.MediaController2, android.media.MediaItem2); method public void onCustomCommand(android.media.MediaController2, android.media.MediaSession2.Command, android.os.Bundle, android.os.ResultReceiver); method public void onCustomLayoutChanged(android.media.MediaController2, java.util.List); method public void onDisconnected(android.media.MediaController2); @@ -24543,7 +24543,6 @@ package android.media { public abstract interface MediaPlaylistController { method public abstract void addPlaylistItem(int, android.media.MediaItem2); - method public abstract android.media.MediaItem2 getCurrentPlaylistItem(); method public abstract java.util.List getPlaylist(); method public abstract android.media.MediaMetadata2 getPlaylistMetadata(); method public abstract int getRepeatMode(); @@ -24856,7 +24855,7 @@ package android.media { method public void close(); method public void fastForward(); method public java.util.List getConnectedControllers(); - method public android.media.MediaItem2 getCurrentPlaylistItem(); + method public android.media.MediaItem2 getCurrentMediaItem(); method public android.media.MediaPlaylistController getMediaPlaylistController(); method public float getPlaybackSpeed(); method public android.media.MediaPlayerBase getPlayer(); @@ -24999,6 +24998,7 @@ package android.media { method public void onBufferingStateChanged(android.media.MediaSession2, android.media.MediaPlayerBase, android.media.MediaItem2, int); method public boolean onCommandRequest(android.media.MediaSession2, android.media.MediaSession2.ControllerInfo, android.media.MediaSession2.Command); method public android.media.MediaSession2.CommandGroup onConnect(android.media.MediaSession2, android.media.MediaSession2.ControllerInfo); + method public void onCurrentMediaItemChanged(android.media.MediaSession2, android.media.MediaPlayerBase, android.media.MediaItem2); method public void onCustomCommand(android.media.MediaSession2, android.media.MediaSession2.ControllerInfo, android.media.MediaSession2.Command, android.os.Bundle, android.os.ResultReceiver); method public void onDisconnected(android.media.MediaSession2, android.media.MediaSession2.ControllerInfo); method public void onMediaPrepared(android.media.MediaSession2, android.media.MediaPlayerBase, android.media.MediaItem2); diff --git a/media/java/android/media/MediaController2.java b/media/java/android/media/MediaController2.java index 25188fb1ba3c1..f619bb9bbc084 100644 --- a/media/java/android/media/MediaController2.java +++ b/media/java/android/media/MediaController2.java @@ -146,7 +146,7 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController * @param playlist A new playlist set by the session. * @see #onPositionChanged(MediaController2, long, long) * @see #onBufferedPositionChanged(MediaController2, long) - * @see #onCurrentPlaylistItemChanged(MediaController2, MediaItem2) + * @see #onCurrentMediaItemChanged(MediaController2, MediaItem2) * @hide */ // TODO(jaewan): Remove (b/74174728) @@ -211,7 +211,7 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController @Nullable Bundle extras) { } /** - * Called when the player's current playing item is changed + * Called when the player's currently playing item is changed *

* When it's called, you should invalidate previous playback information and wait for later * callbacks. @@ -220,9 +220,8 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController * @param item new item * @see #onPositionChanged(MediaController2, long, long) * @see #onBufferedPositionChanged(MediaController2, long) - * @see #onCurrentPlaylistItemChanged(MediaController2, MediaItem2) */ - public void onCurrentPlaylistItemChanged(@NonNull MediaController2 controller, + public void onCurrentMediaItemChanged(@NonNull MediaController2 controller, @NonNull MediaItem2 item) { } /** @@ -808,12 +807,12 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController /** * Get the lastly cached current item from - * {@link ControllerCallback#onCurrentPlaylistItemChanged(MediaController2, MediaItem2)}. + * {@link ControllerCallback#onCurrentMediaItemChanged(MediaController2, MediaItem2)}. * * @return index of the current item */ - @Override - public MediaItem2 getCurrentPlaylistItem() { + public MediaItem2 getCurrentMediaItem() { + // TODO(jaewan): Rename provider API return mProvider.getCurrentPlaylistItem_impl(); } diff --git a/media/java/android/media/MediaPlaylistController.java b/media/java/android/media/MediaPlaylistController.java index 1ad56178b7573..63276a47e91d2 100644 --- a/media/java/android/media/MediaPlaylistController.java +++ b/media/java/android/media/MediaPlaylistController.java @@ -212,12 +212,6 @@ public interface MediaPlaylistController { */ void replacePlaylistItem(int index, @NonNull MediaItem2 item); - /** - * Returns the current media item. - * @return the current media item, or null if none is set, or none available to play. - */ - MediaItem2 getCurrentPlaylistItem(); - /** * Skips to the the media item, and plays from it. * diff --git a/media/java/android/media/MediaSession2.java b/media/java/android/media/MediaSession2.java index b75785abef76a..4d7f85f00f61c 100644 --- a/media/java/android/media/MediaSession2.java +++ b/media/java/android/media/MediaSession2.java @@ -778,6 +778,19 @@ public class MediaSession2 implements AutoCloseable, MediaPlaylistController { public void onPrepareFromUri(@NonNull MediaSession2 session, @NonNull ControllerInfo controller, @NonNull Uri uri, @Nullable Bundle extras) { } + /** + * Called when the player's current playing item is changed + *

+ * When it's called, you should invalidate previous playback information and wait for later + * callbacks. + * + * @param session the controller for this event + * @param mpb the player for this event + * @param item new item + */ + public void onCurrentMediaItemChanged(@NonNull MediaSession2 session, + @NonNull MediaPlayerBase mpb, @NonNull MediaItem2 item) { } + /** * Called when the player is prepared, i.e. it is ready to play the content * referenced by the given data source. @@ -1753,8 +1766,8 @@ public class MediaSession2 implements AutoCloseable, MediaPlaylistController { * * @return currently playing media item */ - @Override - public MediaItem2 getCurrentPlaylistItem() { + public MediaItem2 getCurrentMediaItem() { + // TODO(jaewan): Rename provider API return mProvider.getCurrentPlaylistItem_impl(); }