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
This commit is contained in:
Jaewan Kim
2018-03-07 15:16:55 +09:00
committed by Sungsoo Lim
parent 4d4a8c95ae
commit 87086f59ad
4 changed files with 25 additions and 19 deletions

View File

@@ -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<android.media.MediaSession2.CommandButton>);
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<android.media.MediaItem2> 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<android.media.MediaSession2.ControllerInfo> 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);

View File

@@ -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
* <p>
* 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();
}

View File

@@ -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.
*

View File

@@ -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
* <p>
* 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 <i>prepared</i>, 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();
}