Merge changes from topic "session2-pi-listcallback" into pi-dev
am: ccf41b87a9
Change-Id: Icd9cf2075c57384300ab88f6c3170705caa6eb90
This commit is contained in:
100
api/current.txt
100
api/current.txt
@@ -23363,10 +23363,12 @@ package android.media {
|
||||
method public float getPlaybackSpeed();
|
||||
method public int getPlayerState();
|
||||
method public java.util.List<android.media.MediaItem2> getPlaylist();
|
||||
method public android.media.MediaSession2.PlaylistParams getPlaylistParams();
|
||||
method public android.media.MediaMetadata2 getPlaylistMetadata();
|
||||
method public long getPosition();
|
||||
method public int getRepeatMode();
|
||||
method public android.app.PendingIntent getSessionActivity();
|
||||
method public android.media.SessionToken2 getSessionToken();
|
||||
method public int getShuffleMode();
|
||||
method public boolean isConnected();
|
||||
method public void pause();
|
||||
method public void play();
|
||||
@@ -23377,19 +23379,24 @@ package android.media {
|
||||
method public void prepareFromMediaId(java.lang.String, android.os.Bundle);
|
||||
method public void prepareFromSearch(java.lang.String, android.os.Bundle);
|
||||
method public void prepareFromUri(android.net.Uri, android.os.Bundle);
|
||||
method public void registerPlaylistControllerCallback(java.util.concurrent.Executor, android.media.MediaPlaylistController.PlaylistEventCallback);
|
||||
method public void removePlaylistItem(android.media.MediaItem2);
|
||||
method public void replacePlaylistItem(int, android.media.MediaItem2);
|
||||
method public void rewind();
|
||||
method public void seekTo(long);
|
||||
method public void sendCustomCommand(android.media.MediaSession2.Command, android.os.Bundle, android.os.ResultReceiver);
|
||||
method public void setPlaybackSpeed(float);
|
||||
method public void setPlaylistParams(android.media.MediaSession2.PlaylistParams);
|
||||
method public void setPlaylist(java.util.List<android.media.MediaItem2>, android.media.MediaMetadata2);
|
||||
method public void setRating(java.lang.String, android.media.Rating2);
|
||||
method public void setRepeatMode(int);
|
||||
method public void setShuffleMode(int);
|
||||
method public void setVolumeTo(int, int);
|
||||
method public void skipToNext();
|
||||
method public void skipToPlaylistItem(android.media.MediaItem2);
|
||||
method public void skipToPrevious();
|
||||
method public void stop();
|
||||
method public void unregisterPlaylistControllerCallback(android.media.MediaPlaylistController.PlaylistEventCallback);
|
||||
method public void updatePlaylistMetadata(android.media.MediaMetadata2);
|
||||
}
|
||||
|
||||
public static abstract class MediaController2.ControllerCallback {
|
||||
@@ -23405,8 +23412,6 @@ package android.media {
|
||||
method public void onPlaybackInfoChanged(android.media.MediaController2, android.media.MediaController2.PlaybackInfo);
|
||||
method public void onPlaybackSpeedChanged(android.media.MediaController2, float);
|
||||
method public void onPlayerStateChanged(android.media.MediaController2, int);
|
||||
method public void onPlaylistChanged(android.media.MediaController2, java.util.List<android.media.MediaItem2>);
|
||||
method public void onPlaylistParamsChanged(android.media.MediaController2, android.media.MediaSession2.PlaylistParams);
|
||||
method public void onPositionChanged(android.media.MediaController2, long, long);
|
||||
}
|
||||
|
||||
@@ -24541,9 +24546,33 @@ package android.media {
|
||||
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();
|
||||
method public abstract int getShuffleMode();
|
||||
method public abstract void registerPlaylistControllerCallback(java.util.concurrent.Executor, android.media.MediaPlaylistController.PlaylistEventCallback);
|
||||
method public abstract void removePlaylistItem(android.media.MediaItem2);
|
||||
method public abstract void replacePlaylistItem(int, android.media.MediaItem2);
|
||||
method public abstract void setPlaylist(java.util.List<android.media.MediaItem2>, android.media.MediaMetadata2);
|
||||
method public abstract void setRepeatMode(int);
|
||||
method public abstract void setShuffleMode(int);
|
||||
method public abstract void skipToPlaylistItem(android.media.MediaItem2);
|
||||
method public abstract void unregisterPlaylistControllerCallback(android.media.MediaPlaylistController.PlaylistEventCallback);
|
||||
method public abstract void updatePlaylistMetadata(android.media.MediaMetadata2);
|
||||
field public static final int REPEAT_MODE_ALL = 2; // 0x2
|
||||
field public static final int REPEAT_MODE_GROUP = 3; // 0x3
|
||||
field public static final int REPEAT_MODE_NONE = 0; // 0x0
|
||||
field public static final int REPEAT_MODE_ONE = 1; // 0x1
|
||||
field public static final int SHUFFLE_MODE_ALL = 1; // 0x1
|
||||
field public static final int SHUFFLE_MODE_GROUP = 2; // 0x2
|
||||
field public static final int SHUFFLE_MODE_NONE = 0; // 0x0
|
||||
}
|
||||
|
||||
public static abstract class MediaPlaylistController.PlaylistEventCallback {
|
||||
ctor public MediaPlaylistController.PlaylistEventCallback();
|
||||
method public void onPlaylistChanged(android.media.MediaPlaylistController, java.util.List<android.media.MediaItem2>, android.media.MediaMetadata2);
|
||||
method public void onPlaylistMetadataChanged(android.media.MediaPlaylistController, android.media.MediaMetadata2);
|
||||
method public void onRepeatModeChanged(android.media.MediaPlaylistController, int);
|
||||
method public void onShuffleModeChanged(android.media.MediaPlaylistController, int);
|
||||
}
|
||||
|
||||
public class MediaRecorder implements android.media.AudioRouting {
|
||||
@@ -24832,13 +24861,16 @@ package android.media {
|
||||
method public float getPlaybackSpeed();
|
||||
method public android.media.MediaPlayerBase getPlayer();
|
||||
method public java.util.List<android.media.MediaItem2> getPlaylist();
|
||||
method public android.media.MediaSession2.PlaylistParams getPlaylistParams();
|
||||
method public android.media.MediaMetadata2 getPlaylistMetadata();
|
||||
method public int getRepeatMode();
|
||||
method public int getShuffleMode();
|
||||
method public android.media.SessionToken2 getToken();
|
||||
method public android.media.VolumeProvider2 getVolumeProvider();
|
||||
method public void notifyError(int, android.os.Bundle);
|
||||
method public void pause();
|
||||
method public void play();
|
||||
method public void prepare();
|
||||
method public void registerPlaylistControllerCallback(java.util.concurrent.Executor, android.media.MediaPlaylistController.PlaylistEventCallback);
|
||||
method public void removePlaylistItem(android.media.MediaItem2);
|
||||
method public void replacePlaylistItem(int, android.media.MediaItem2);
|
||||
method public void rewind();
|
||||
@@ -24849,36 +24881,45 @@ package android.media {
|
||||
method public void setAudioFocusRequest(android.media.AudioFocusRequest);
|
||||
method public void setCustomLayout(android.media.MediaSession2.ControllerInfo, java.util.List<android.media.MediaSession2.CommandButton>);
|
||||
method public void setPlaybackSpeed(float);
|
||||
method public void setPlaylist(java.util.List<android.media.MediaItem2>);
|
||||
method public void setPlaylistParams(android.media.MediaSession2.PlaylistParams);
|
||||
method public void setPlaylist(java.util.List<android.media.MediaItem2>, android.media.MediaMetadata2);
|
||||
method public void setRepeatMode(int);
|
||||
method public void setShuffleMode(int);
|
||||
method public void skipToNext();
|
||||
method public void skipToPlaylistItem(android.media.MediaItem2);
|
||||
method public void skipToPrevious();
|
||||
method public void stop();
|
||||
method public void unregisterPlaylistControllerCallback(android.media.MediaPlaylistController.PlaylistEventCallback);
|
||||
method public void updatePlayer(android.media.MediaPlayerBase, android.media.MediaPlaylistController, android.media.VolumeProvider2);
|
||||
field public static final int COMMAND_CODE_BROWSER = 22; // 0x16
|
||||
method public void updatePlaylistMetadata(android.media.MediaMetadata2);
|
||||
field public static final int COMMAND_CODE_BROWSER = 28; // 0x1c
|
||||
field public static final int COMMAND_CODE_CUSTOM = 0; // 0x0
|
||||
field public static final int COMMAND_CODE_PLAYBACK_ADJUST_VOLUME = 11; // 0xb
|
||||
field public static final int COMMAND_CODE_PLAYBACK_FAST_FORWARD = 7; // 0x7
|
||||
field public static final int COMMAND_CODE_PLAYBACK_PAUSE = 2; // 0x2
|
||||
field public static final int COMMAND_CODE_PLAYBACK_PLAY = 1; // 0x1
|
||||
field public static final int COMMAND_CODE_PLAYBACK_PREPARE = 6; // 0x6
|
||||
field public static final int COMMAND_CODE_PLAYBACK_REWIND = 8; // 0x8
|
||||
field public static final int COMMAND_CODE_PLAYBACK_SEEK_TO = 9; // 0x9
|
||||
field public static final int COMMAND_CODE_PLAYBACK_SET_PLAYLIST_PARAMS = 11; // 0xb
|
||||
field public static final int COMMAND_CODE_PLAYBACK_SET_VOLUME = 10; // 0xa
|
||||
field public static final int COMMAND_CODE_PLAYBACK_SKIP_NEXT_ITEM = 4; // 0x4
|
||||
field public static final int COMMAND_CODE_PLAYBACK_SKIP_PREV_ITEM = 5; // 0x5
|
||||
field public static final int COMMAND_CODE_PLAYBACK_SKIP_TO_PLAYLIST_ITEM = 10; // 0xa
|
||||
field public static final int COMMAND_CODE_PLAYBACK_STOP = 3; // 0x3
|
||||
field public static final int COMMAND_CODE_PLAYLIST_ADD = 12; // 0xc
|
||||
field public static final int COMMAND_CODE_PLAYLIST_GET = 14; // 0xe
|
||||
field public static final int COMMAND_CODE_PLAYLIST_REMOVE = 13; // 0xd
|
||||
field public static final int COMMAND_CODE_PLAY_FROM_MEDIA_ID = 16; // 0x10
|
||||
field public static final int COMMAND_CODE_PLAY_FROM_SEARCH = 18; // 0x12
|
||||
field public static final int COMMAND_CODE_PLAY_FROM_URI = 17; // 0x11
|
||||
field public static final int COMMAND_CODE_PREPARE_FROM_MEDIA_ID = 19; // 0x13
|
||||
field public static final int COMMAND_CODE_PREPARE_FROM_SEARCH = 21; // 0x15
|
||||
field public static final int COMMAND_CODE_PREPARE_FROM_URI = 20; // 0x14
|
||||
field public static final int COMMAND_CODE_SET_VOLUME = 15; // 0xf
|
||||
field public static final int COMMAND_CODE_PLAYLIST_ADD_ITEM = 15; // 0xf
|
||||
field public static final int COMMAND_CODE_PLAYLIST_GET_LIST = 18; // 0x12
|
||||
field public static final int COMMAND_CODE_PLAYLIST_GET_LIST_METADATA = 20; // 0x14
|
||||
field public static final int COMMAND_CODE_PLAYLIST_REMOVE_ITEM = 16; // 0x10
|
||||
field public static final int COMMAND_CODE_PLAYLIST_REPLACE_ITEM = 17; // 0x11
|
||||
field public static final int COMMAND_CODE_PLAYLIST_SET_LIST = 19; // 0x13
|
||||
field public static final int COMMAND_CODE_PLAYLIST_SET_LIST_METADATA = 21; // 0x15
|
||||
field public static final int COMMAND_CODE_PLAYLIST_SET_REPEAT_MODE = 14; // 0xe
|
||||
field public static final int COMMAND_CODE_PLAYLIST_SET_SHUFFLE_MODE = 13; // 0xd
|
||||
field public static final int COMMAND_CODE_PLAYLIST_SKIP_TO_PLAYLIST_ITEM = 12; // 0xc
|
||||
field public static final int COMMAND_CODE_PLAY_FROM_MEDIA_ID = 22; // 0x16
|
||||
field public static final int COMMAND_CODE_PLAY_FROM_SEARCH = 24; // 0x18
|
||||
field public static final int COMMAND_CODE_PLAY_FROM_URI = 23; // 0x17
|
||||
field public static final int COMMAND_CODE_PREPARE_FROM_MEDIA_ID = 25; // 0x19
|
||||
field public static final int COMMAND_CODE_PREPARE_FROM_SEARCH = 27; // 0x1b
|
||||
field public static final int COMMAND_CODE_PREPARE_FROM_URI = 26; // 0x1a
|
||||
field public static final int ERROR_CODE_ACTION_ABORTED = 10; // 0xa
|
||||
field public static final int ERROR_CODE_APP_ERROR = 1; // 0x1
|
||||
field public static final int ERROR_CODE_AUTHENTICATION_EXPIRED = 3; // 0x3
|
||||
@@ -24948,31 +24989,18 @@ package android.media {
|
||||
method public boolean isTrusted();
|
||||
}
|
||||
|
||||
public static final class MediaSession2.PlaylistParams {
|
||||
ctor public MediaSession2.PlaylistParams(android.content.Context, int, int, android.media.MediaMetadata2);
|
||||
method public static android.media.MediaSession2.PlaylistParams fromBundle(android.content.Context, android.os.Bundle);
|
||||
method public android.media.MediaMetadata2 getPlaylistMetadata();
|
||||
method public int getRepeatMode();
|
||||
method public int getShuffleMode();
|
||||
method public android.os.Bundle toBundle();
|
||||
field public static final int REPEAT_MODE_ALL = 2; // 0x2
|
||||
field public static final int REPEAT_MODE_GROUP = 3; // 0x3
|
||||
field public static final int REPEAT_MODE_NONE = 0; // 0x0
|
||||
field public static final int REPEAT_MODE_ONE = 1; // 0x1
|
||||
field public static final int SHUFFLE_MODE_ALL = 1; // 0x1
|
||||
field public static final int SHUFFLE_MODE_GROUP = 2; // 0x2
|
||||
field public static final int SHUFFLE_MODE_NONE = 0; // 0x0
|
||||
}
|
||||
|
||||
public static abstract class MediaSession2.SessionCallback {
|
||||
ctor public MediaSession2.SessionCallback(android.content.Context);
|
||||
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 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);
|
||||
method public void onPlayFromMediaId(android.media.MediaSession2, android.media.MediaSession2.ControllerInfo, java.lang.String, android.os.Bundle);
|
||||
method public void onPlayFromSearch(android.media.MediaSession2, android.media.MediaSession2.ControllerInfo, java.lang.String, android.os.Bundle);
|
||||
method public void onPlayFromUri(android.media.MediaSession2, android.media.MediaSession2.ControllerInfo, android.net.Uri, android.os.Bundle);
|
||||
method public void onPlayerStateChanged(android.media.MediaSession2, android.media.MediaPlayerBase, int);
|
||||
method public void onPrepareFromMediaId(android.media.MediaSession2, android.media.MediaSession2.ControllerInfo, java.lang.String, android.os.Bundle);
|
||||
method public void onPrepareFromSearch(android.media.MediaSession2, android.media.MediaSession2.ControllerInfo, java.lang.String, android.os.Bundle);
|
||||
method public void onPrepareFromUri(android.media.MediaSession2, android.media.MediaSession2.ControllerInfo, android.net.Uri, android.os.Bundle);
|
||||
|
||||
@@ -147,7 +147,9 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController
|
||||
* @see #onPositionChanged(MediaController2, long, long)
|
||||
* @see #onBufferedPositionChanged(MediaController2, long)
|
||||
* @see #onCurrentPlaylistItemChanged(MediaController2, MediaItem2)
|
||||
* @hide
|
||||
*/
|
||||
// TODO(jaewan): Remove (b/74174728)
|
||||
public void onPlaylistChanged(@NonNull MediaController2 controller,
|
||||
@NonNull List<MediaItem2> playlist) { }
|
||||
|
||||
@@ -228,7 +230,9 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController
|
||||
*
|
||||
* @param controller the controller for this event
|
||||
* @param params The new play list parameters.
|
||||
* @hide
|
||||
*/
|
||||
// TODO(jaewan): Remove (b/74116823)
|
||||
public void onPlaylistParamsChanged(@NonNull MediaController2 controller,
|
||||
@NonNull PlaylistParams params) { }
|
||||
}
|
||||
@@ -439,25 +443,15 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController
|
||||
mProvider.seekTo_impl(pos);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the index of current DataSourceDesc in the play list to be played.
|
||||
*
|
||||
* @param item the index of DataSourceDesc in the play list you want to play
|
||||
* @throws IllegalArgumentException if the play list is null
|
||||
* @throws NullPointerException if index is outside play list range
|
||||
*/
|
||||
@Override
|
||||
public void skipToPlaylistItem(@NonNull MediaItem2 item) {
|
||||
mProvider.skipToPlaylistItem_impl(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the {@link PlaylistParams} for the current play list. Repeat/shuffle mode and metadata
|
||||
* for the list can be set by calling this method.
|
||||
*
|
||||
* @param params A {@link PlaylistParams} object to set.
|
||||
* @throws IllegalArgumentException if given {@param param} is null.
|
||||
* @hide
|
||||
*/
|
||||
// TODO(jaewan): Remove (b/74116823)
|
||||
public void setPlaylistParams(@NonNull PlaylistParams params) {
|
||||
mProvider.setPlaylistParams_impl(params);
|
||||
}
|
||||
@@ -671,17 +665,6 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController
|
||||
return mProvider.getBufferedPosition_impl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the lastly cached current item from
|
||||
* {@link ControllerCallback#onCurrentPlaylistItemChanged(MediaController2, MediaItem2)}.
|
||||
*
|
||||
* @return index of the current item
|
||||
*/
|
||||
@Override
|
||||
public MediaItem2 getCurrentPlaylistItem() {
|
||||
return mProvider.getCurrentPlaylistItem_impl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current playback info for this session.
|
||||
*
|
||||
@@ -719,6 +702,35 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController
|
||||
mProvider.sendCustomCommand_impl(command, args, cb);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register {@link MediaPlaylistController.PlaylistEventCallback} to listen changes in the
|
||||
* underlying {@link MediaPlaylistController}, regardless of the change in the controller.
|
||||
* <p>
|
||||
* Registered callbacks will be also called when the controller is changed.
|
||||
*
|
||||
* @param executor a callback Executor
|
||||
* @param callback a PlaylistEventCallback
|
||||
* @throws IllegalArgumentException if executor or callback is {@code null}.
|
||||
*/
|
||||
@Override
|
||||
public void registerPlaylistControllerCallback(@NonNull @CallbackExecutor Executor executor,
|
||||
@NonNull PlaylistEventCallback callback) {
|
||||
// TODO(jaewan): Implement (b/74169681)
|
||||
//mProvider.registerPlaylistControllerCallback_impl(executor, callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregister the previously registered {@link MediaPlaylistController.PlaylistEventCallback}.
|
||||
*
|
||||
* @param callback the callback to be removed
|
||||
* @throws IllegalArgumentException if the callback is {@code null}.
|
||||
*/
|
||||
@Override
|
||||
public void unregisterPlaylistControllerCallback(@NonNull PlaylistEventCallback callback) {
|
||||
// TODO(jaewan): Implement (b/74169681)
|
||||
//mProvider.unregisterPlaylistControllerCallback_impl(callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return playlist from the session.
|
||||
*
|
||||
@@ -729,15 +741,50 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController
|
||||
return mProvider.getPlaylist_impl();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setPlaylist(@NonNull List<MediaItem2> list, @Nullable MediaMetadata2 metadata) {
|
||||
// TODO(jaewan): Implement (b/74174649)
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePlaylistMetadata(@Nullable MediaMetadata2 metadata) {
|
||||
// TODO(jaewan): Implement (b/74174649)
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable MediaMetadata2 getPlaylistMetadata() {
|
||||
// TODO(jaewan): Implement (b/74174649)
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the {@link PlaylistParams} for the current play list.
|
||||
* Can return {@code null} if the controller doesn't have enough permission, or if the session
|
||||
* has not set the parameters.
|
||||
* @hide
|
||||
*/
|
||||
// TODO(jaewan): Remove (b/74116823)
|
||||
public @Nullable PlaylistParams getPlaylistParams() {
|
||||
return mProvider.getPlaylistParams_impl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts the media item to the play list at position index.
|
||||
* <p>
|
||||
* This will not change the currently playing media item.
|
||||
* If index is less than or equal to the current index of the play list,
|
||||
* the current index of the play list will be incremented correspondingly.
|
||||
*
|
||||
* @param index the index you want to add
|
||||
* @param item the media item you want to add
|
||||
* @throws IndexOutOfBoundsException if index is outside play list range
|
||||
*/
|
||||
@Override
|
||||
public void addPlaylistItem(int index, @NonNull MediaItem2 item) {
|
||||
mProvider.addPlaylistItem_impl(index, item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the media item at index in the playlist.
|
||||
*<p>
|
||||
@@ -760,18 +807,47 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts the media item to the play list at position index.
|
||||
* <p>
|
||||
* This will not change the currently playing media item.
|
||||
* If index is less than or equal to the current index of the play list,
|
||||
* the current index of the play list will be incremented correspondingly.
|
||||
* Get the lastly cached current item from
|
||||
* {@link ControllerCallback#onCurrentPlaylistItemChanged(MediaController2, MediaItem2)}.
|
||||
*
|
||||
* @param index the index you want to add
|
||||
* @param item the media item you want to add
|
||||
* @throws IndexOutOfBoundsException if index is outside play list range
|
||||
* @return index of the current item
|
||||
*/
|
||||
@Override
|
||||
public void addPlaylistItem(int index, @NonNull MediaItem2 item) {
|
||||
mProvider.addPlaylistItem_impl(index, item);
|
||||
public MediaItem2 getCurrentPlaylistItem() {
|
||||
return mProvider.getCurrentPlaylistItem_impl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the index of current DataSourceDesc in the play list to be played.
|
||||
*
|
||||
* @param item the index of DataSourceDesc in the play list you want to play
|
||||
* @throws IllegalArgumentException if the play list is null
|
||||
* @throws NullPointerException if index is outside play list range
|
||||
*/
|
||||
@Override
|
||||
public void skipToPlaylistItem(@NonNull MediaItem2 item) {
|
||||
mProvider.skipToPlaylistItem_impl(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @RepeatMode int getRepeatMode() {
|
||||
// TODO(jaewan): Implement (b/74118768)
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRepeatMode(int repeatMode) {
|
||||
// TODO(jaewan): Implement (b/74118768)
|
||||
}
|
||||
|
||||
@Override
|
||||
public @ShuffleMode int getShuffleMode() {
|
||||
// TODO(jaewan): Implement (b/74118768)
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setShuffleMode(int shuffleMode) {
|
||||
// TODO(jaewan): Implement (b/74118768)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -278,7 +278,7 @@ public abstract class MediaPlayerBase implements AutoCloseable {
|
||||
*/
|
||||
public static abstract class PlayerEventCallback {
|
||||
/**
|
||||
* Called when the player's curretn data source has changed.
|
||||
* Called when the player's current data source has changed.
|
||||
* @param mpb the player whose data source changed.
|
||||
* @param dsd the new current data source.
|
||||
*/
|
||||
|
||||
@@ -16,9 +16,18 @@
|
||||
|
||||
package android.media;
|
||||
|
||||
import android.annotation.CallbackExecutor;
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.media.MediaSession2.PlaylistParams;
|
||||
import android.media.MediaSession2.PlaylistParams.RepeatMode;
|
||||
import android.media.MediaSession2.PlaylistParams.ShuffleMode;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
/**
|
||||
* Controller interface for playlist management.
|
||||
@@ -30,10 +39,231 @@ import java.util.List;
|
||||
// Note that setPlaylist() isn't added on purpose because it's considered session-specific.
|
||||
|
||||
public interface MediaPlaylistController {
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@IntDef({REPEAT_MODE_NONE, REPEAT_MODE_ONE, REPEAT_MODE_ALL,
|
||||
REPEAT_MODE_GROUP})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@interface RepeatMode {}
|
||||
|
||||
/**
|
||||
* Playback will be stopped at the end of the playing media list.
|
||||
*/
|
||||
int REPEAT_MODE_NONE = 0;
|
||||
|
||||
/**
|
||||
* Playback of the current playing media item will be repeated.
|
||||
*/
|
||||
int REPEAT_MODE_ONE = 1;
|
||||
|
||||
/**
|
||||
* Playing media list will be repeated.
|
||||
*/
|
||||
int REPEAT_MODE_ALL = 2;
|
||||
|
||||
/**
|
||||
* Playback of the playing media group will be repeated.
|
||||
* A group is a logical block of media items which is specified in the section 5.7 of the
|
||||
* Bluetooth AVRCP 1.6. An example of a group is the playlist.
|
||||
*/
|
||||
int REPEAT_MODE_GROUP = 3;
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@IntDef({SHUFFLE_MODE_NONE, SHUFFLE_MODE_ALL, SHUFFLE_MODE_GROUP})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@interface ShuffleMode {}
|
||||
|
||||
/**
|
||||
* Media list will be played in order.
|
||||
*/
|
||||
int SHUFFLE_MODE_NONE = 0;
|
||||
|
||||
/**
|
||||
* Media list will be played in shuffled order.
|
||||
*/
|
||||
int SHUFFLE_MODE_ALL = 1;
|
||||
|
||||
/**
|
||||
* Media group will be played in shuffled order.
|
||||
* A group is a logical block of media items which is specified in the section 5.7 of the
|
||||
* Bluetooth AVRCP 1.6. An example of a group is the playlist.
|
||||
*/
|
||||
int SHUFFLE_MODE_GROUP = 2;
|
||||
|
||||
abstract class PlaylistEventCallback {
|
||||
/**
|
||||
* Called when a playlist is changed.
|
||||
*
|
||||
* @param mplc playlist controller for this event
|
||||
* @param list new playlist
|
||||
* @param metadata new metadata
|
||||
*/
|
||||
public void onPlaylistChanged(@NonNull MediaPlaylistController mplc,
|
||||
@NonNull List<MediaItem2> list, @Nullable MediaMetadata2 metadata) { }
|
||||
|
||||
/**
|
||||
* Called when a playlist is changed.
|
||||
*
|
||||
* @param mplc playlist controller for this event
|
||||
* @param metadata new metadata
|
||||
*/
|
||||
public void onPlaylistMetadataChanged(@NonNull MediaPlaylistController mplc,
|
||||
@Nullable MediaMetadata2 metadata) { }
|
||||
|
||||
/**
|
||||
* Called when a playlist is changed.
|
||||
*
|
||||
* @param mplc playlist controller for this event
|
||||
* @param shuffleMode repeat mode
|
||||
* @see #SHUFFLE_MODE_NONE
|
||||
* @see #SHUFFLE_MODE_ALL
|
||||
* @see #SHUFFLE_MODE_GROUP
|
||||
*/
|
||||
public void onShuffleModeChanged(@NonNull MediaPlaylistController mplc,
|
||||
@ShuffleMode int shuffleMode) { }
|
||||
|
||||
/**
|
||||
* Called when a playlist is changed.
|
||||
*
|
||||
* @param mplc playlist controller for this event
|
||||
* @param repeatMode repeat mode
|
||||
* @see #REPEAT_MODE_NONE
|
||||
* @see #REPEAT_MODE_ONE
|
||||
* @see #REPEAT_MODE_ALL
|
||||
* @see #REPEAT_MODE_GROUP
|
||||
*/
|
||||
public void onRepeatModeChanged(@NonNull MediaPlaylistController mplc,
|
||||
@RepeatMode int repeatMode) { }
|
||||
}
|
||||
|
||||
/**
|
||||
* Register {@link PlaylistEventCallback} to listen changes in the underlying
|
||||
* {@link MediaPlaylistController}, regardless of the change in the controller.
|
||||
*
|
||||
* @param executor a callback Executor
|
||||
* @param callback a PlaylistEventCallback
|
||||
* @throws IllegalArgumentException if executor or callback is {@code null}.
|
||||
*/
|
||||
void registerPlaylistControllerCallback(@NonNull @CallbackExecutor Executor executor,
|
||||
@NonNull PlaylistEventCallback callback);
|
||||
|
||||
/**
|
||||
* Unregister the previously registered {@link PlaylistEventCallback}.
|
||||
*
|
||||
* @param callback the callback to be removed
|
||||
* @throws IllegalArgumentException if the callback is {@code null}.
|
||||
*/
|
||||
void unregisterPlaylistControllerCallback(@NonNull PlaylistEventCallback callback);
|
||||
|
||||
/**
|
||||
* Returns the playlist
|
||||
*
|
||||
* @return playlist, or null if none is set.
|
||||
*/
|
||||
@Nullable List<MediaItem2> getPlaylist();
|
||||
|
||||
/**
|
||||
* Sets the playlist.
|
||||
*
|
||||
* @param list playlist
|
||||
* @param metadata metadata of the playlist
|
||||
*/
|
||||
void setPlaylist(@NonNull List<MediaItem2> list, @Nullable MediaMetadata2 metadata);
|
||||
|
||||
/**
|
||||
* Returns the playlist metadata
|
||||
*
|
||||
* @return metadata metadata of the playlist, or null if none is set
|
||||
*/
|
||||
@Nullable MediaMetadata2 getPlaylistMetadata();
|
||||
|
||||
/**
|
||||
* Updates the playlist metadata
|
||||
*
|
||||
* @param metadata metadata of the playlist
|
||||
*/
|
||||
void updatePlaylistMetadata(@Nullable MediaMetadata2 metadata);
|
||||
|
||||
/**
|
||||
* Adds the media item to the playlist at the index
|
||||
*
|
||||
* @param index index
|
||||
* @param item media item to add
|
||||
*/
|
||||
void addPlaylistItem(int index, @NonNull MediaItem2 item);
|
||||
|
||||
/**
|
||||
* Removes the media item from the playlist
|
||||
*
|
||||
* @param item media item to remove
|
||||
*/
|
||||
void removePlaylistItem(@NonNull MediaItem2 item);
|
||||
MediaItem2 getCurrentPlaylistItem();
|
||||
void skipToPlaylistItem(@NonNull MediaItem2 item);
|
||||
|
||||
/**
|
||||
* Replaces the media item with the .
|
||||
* <p>
|
||||
* This can be used to update metadata of a MediaItem.
|
||||
*
|
||||
* @param index index
|
||||
* @param item
|
||||
*/
|
||||
void replacePlaylistItem(int index, @NonNull MediaItem2 item);
|
||||
List<MediaItem2> getPlaylist();
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
* @param item media item to start playing from
|
||||
*/
|
||||
void skipToPlaylistItem(@NonNull MediaItem2 item);
|
||||
|
||||
/**
|
||||
* Get repeat mode
|
||||
*
|
||||
* @return repeat mode
|
||||
* @see #REPEAT_MODE_NONE
|
||||
* @see #REPEAT_MODE_ONE
|
||||
* @see #REPEAT_MODE_ALL
|
||||
* @see #REPEAT_MODE_GROUP
|
||||
*/
|
||||
@RepeatMode int getRepeatMode();
|
||||
|
||||
/**
|
||||
* Set repeat mode
|
||||
*
|
||||
* @param repeatMode repeat mode
|
||||
* @see #REPEAT_MODE_NONE
|
||||
* @see #REPEAT_MODE_ONE
|
||||
* @see #REPEAT_MODE_ALL
|
||||
* @see #REPEAT_MODE_GROUP
|
||||
*/
|
||||
void setRepeatMode(@RepeatMode int repeatMode);
|
||||
|
||||
/**
|
||||
* Get shuffle mode
|
||||
*
|
||||
* @return shuffle mode
|
||||
* @see #SHUFFLE_MODE_NONE
|
||||
* @see #SHUFFLE_MODE_ALL
|
||||
* @see #SHUFFLE_MODE_GROUP
|
||||
*/
|
||||
@ShuffleMode int getShuffleMode();
|
||||
|
||||
/**
|
||||
* Set shuffle mode
|
||||
*
|
||||
* @param shuffleMode shuffle mode
|
||||
* @see #SHUFFLE_MODE_NONE
|
||||
* @see #SHUFFLE_MODE_ALL
|
||||
* @see #SHUFFLE_MODE_GROUP
|
||||
*/
|
||||
void setShuffleMode(@ShuffleMode int shuffleMode);
|
||||
}
|
||||
|
||||
@@ -23,7 +23,9 @@ import android.annotation.Nullable;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.media.MediaPlayerBase.BuffState;
|
||||
import android.media.MediaPlayerBase.PlayerEventCallback;
|
||||
import android.media.MediaPlayerBase.PlayerState;
|
||||
import android.media.session.MediaSession;
|
||||
import android.media.session.MediaSession.Callback;
|
||||
import android.media.session.PlaybackState;
|
||||
@@ -81,7 +83,6 @@ import java.util.concurrent.Executor;
|
||||
public class MediaSession2 implements AutoCloseable, MediaPlaylistController {
|
||||
private final MediaSession2Provider mProvider;
|
||||
|
||||
// Next ID: 23
|
||||
/**
|
||||
* Command code for the custom command which can be defined by string action in the
|
||||
* {@link Command}.
|
||||
@@ -160,94 +161,173 @@ public class MediaSession2 implements AutoCloseable, MediaPlaylistController {
|
||||
* through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYBACK_SEEK_TO = 9;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#skipToPlaylistItem(MediaItem2)}.
|
||||
* Command code for both {@link MediaController2#setVolumeTo(int, int)}.
|
||||
* <p>
|
||||
* Command would be sent directly to the player if the session doesn't reject the request
|
||||
* through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
* Command would set the device volume or send to the volume provider directly if the session
|
||||
* doesn't reject the request through the
|
||||
* {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYBACK_SKIP_TO_PLAYLIST_ITEM = 10;
|
||||
public static final int COMMAND_CODE_PLAYBACK_SET_VOLUME = 10;
|
||||
|
||||
/**
|
||||
* Command code for both {@link MediaController2#adjustVolume(int, int)}.
|
||||
* <p>
|
||||
* Command would adjust the device volume or send to the volume provider directly if the session
|
||||
* doesn't reject the request through the
|
||||
* {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYBACK_ADJUST_VOLUME = 11;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#setPlaylistParams(PlaylistParams)}.
|
||||
* <p>
|
||||
* Command would be sent directly to the player if the session doesn't reject the request
|
||||
* through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
* @hide
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYBACK_SET_PLAYLIST_PARAMS = 11;
|
||||
// TODO(jaewan): Remove (b/74116823)
|
||||
public static final int COMMAND_CODE_PLAYBACK_SET_PLAYLIST_PARAMS = 12;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#addPlaylistItem(int, MediaItem2)}.
|
||||
* Command code for {@link MediaController2#skipToPlaylistItem(MediaItem2)}.
|
||||
* <p>
|
||||
* Command would be sent directly to the player if the session doesn't reject the request
|
||||
* through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYLIST_ADD = 12;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#addPlaylistItem(int, MediaItem2)}.
|
||||
* <p>
|
||||
* Command would be sent directly to the player if the session doesn't reject the request
|
||||
* through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYLIST_REMOVE = 13;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#getPlaylist()}.
|
||||
* <p>
|
||||
* Command would be sent directly to the player if the session doesn't reject the request
|
||||
* through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYLIST_GET = 14;
|
||||
|
||||
/**
|
||||
* Command code for both {@link MediaController2#setVolumeTo(int, int)} and
|
||||
* {@link MediaController2#adjustVolume(int, int)}.
|
||||
* <p>
|
||||
* Command would adjust the volume or sent to the volume provider directly if the session
|
||||
* doesn't reject the request through the
|
||||
* Command would be sent directly to the playlist controller if the session doesn't reject the
|
||||
* request through the
|
||||
* {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_SET_VOLUME = 15;
|
||||
public static final int COMMAND_CODE_PLAYLIST_SKIP_TO_PLAYLIST_ITEM = 12;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#setShuffleMode(int)}.
|
||||
* <p>
|
||||
* Command would be sent directly to the playlist controller if the session doesn't reject the
|
||||
* request through the
|
||||
* {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYLIST_SET_SHUFFLE_MODE = 13;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#setRepeatMode(int)}.
|
||||
* <p>
|
||||
* Command would be sent directly to the playlist controller if the session doesn't reject the
|
||||
* request through the
|
||||
* {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYLIST_SET_REPEAT_MODE = 14;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#addPlaylistItem(int, MediaItem2)}.
|
||||
* <p>
|
||||
* Command would be sent directly to the playlist controller if the session doesn't reject the
|
||||
* request through the
|
||||
* {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYLIST_ADD_ITEM = 15;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#addPlaylistItem(int, MediaItem2)}.
|
||||
* <p>
|
||||
* Command would be sent directly to the playlist controller if the session doesn't reject the
|
||||
* request through the
|
||||
* {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYLIST_REMOVE_ITEM = 16;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#replacePlaylistItem(int, MediaItem2)}.
|
||||
* <p>
|
||||
* Command would be sent directly to the playlist controller if the session doesn't reject the
|
||||
* request through the
|
||||
* {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYLIST_REPLACE_ITEM = 17;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#getPlaylist()}. This will expose metadata
|
||||
* information to the controller.
|
||||
* <p>
|
||||
* Command would be sent directly to the playlist controller if the session doesn't reject the
|
||||
* request through the
|
||||
* {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYLIST_GET_LIST = 18;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#setPlaylist(List, MediaMetadata2).
|
||||
* <p>
|
||||
* Command would be sent directly to the playlist controller if the session doesn't reject the
|
||||
* request through the
|
||||
* {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYLIST_SET_LIST = 19;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#getPlaylistMetadata()} ()}. This will expose
|
||||
* metadata information to the controller.
|
||||
* *
|
||||
* Command code for {@link MediaController2#setPlaylist(List, MediaMetadata2)} and
|
||||
* {@link MediaController2#updatePlaylistMetadata(MediaMetadata2)}.
|
||||
* <p>
|
||||
* Command would be sent directly to the playlist controller if the session doesn't reject the
|
||||
* request through the
|
||||
* {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYLIST_GET_LIST_METADATA = 20;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#updatePlaylistMetadata(MediaMetadata2)}.
|
||||
* <p>
|
||||
* Command would be sent directly to the playlist controller if the session doesn't reject the
|
||||
* request through the
|
||||
* {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAYLIST_SET_LIST_METADATA = 21;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#playFromMediaId(String, Bundle)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAY_FROM_MEDIA_ID = 16;
|
||||
public static final int COMMAND_CODE_PLAY_FROM_MEDIA_ID = 22;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#playFromUri(Uri, Bundle)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAY_FROM_URI = 17;
|
||||
public static final int COMMAND_CODE_PLAY_FROM_URI = 23;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#playFromSearch(String, Bundle)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PLAY_FROM_SEARCH = 18;
|
||||
public static final int COMMAND_CODE_PLAY_FROM_SEARCH = 24;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#prepareFromMediaId(String, Bundle)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PREPARE_FROM_MEDIA_ID = 19;
|
||||
public static final int COMMAND_CODE_PREPARE_FROM_MEDIA_ID = 25;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#prepareFromUri(Uri, Bundle)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PREPARE_FROM_URI = 20;
|
||||
public static final int COMMAND_CODE_PREPARE_FROM_URI = 26;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaController2#prepareFromSearch(String, Bundle)}.
|
||||
*/
|
||||
public static final int COMMAND_CODE_PREPARE_FROM_SEARCH = 21;
|
||||
public static final int COMMAND_CODE_PREPARE_FROM_SEARCH = 27;
|
||||
|
||||
/**
|
||||
* Command code for {@link MediaBrowser2} specific functions that allows navigation and search
|
||||
* from the {@link MediaLibraryService2}. This would be ignored if a {@link MediaSession2},
|
||||
* not {@link android.media.MediaLibraryService2.MediaLibrarySession}, specify this.
|
||||
* from the {@link MediaLibraryService2}. This would be ignored for a {@link MediaSession2},
|
||||
* not {@link android.media.MediaLibraryService2.MediaLibrarySession}.
|
||||
*
|
||||
* @see MediaBrowser2
|
||||
*/
|
||||
public static final int COMMAND_CODE_BROWSER = 22;
|
||||
public static final int COMMAND_CODE_BROWSER = 28;
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public static final int COMMAND_CODE_MAX = 28;
|
||||
|
||||
/**
|
||||
* @hide
|
||||
@@ -516,12 +596,12 @@ public class MediaSession2 implements AutoCloseable, MediaPlaylistController {
|
||||
* @see #COMMAND_CODE_PLAYBACK_FAST_FORWARD
|
||||
* @see #COMMAND_CODE_PLAYBACK_REWIND
|
||||
* @see #COMMAND_CODE_PLAYBACK_SEEK_TO
|
||||
* @see #COMMAND_CODE_PLAYBACK_SKIP_TO_PLAYLIST_ITEM
|
||||
* @see #COMMAND_CODE_PLAYLIST_SKIP_TO_PLAYLIST_ITEM
|
||||
* @see #COMMAND_CODE_PLAYBACK_SET_PLAYLIST_PARAMS
|
||||
* @see #COMMAND_CODE_PLAYLIST_ADD
|
||||
* @see #COMMAND_CODE_PLAYLIST_REMOVE
|
||||
* @see #COMMAND_CODE_PLAYLIST_GET
|
||||
* @see #COMMAND_CODE_SET_VOLUME
|
||||
* @see #COMMAND_CODE_PLAYLIST_ADD_ITEM
|
||||
* @see #COMMAND_CODE_PLAYLIST_REMOVE_ITEM
|
||||
* @see #COMMAND_CODE_PLAYLIST_GET_LIST
|
||||
* @see #COMMAND_CODE_PLAYBACK_SET_VOLUME
|
||||
*/
|
||||
public boolean onCommandRequest(@NonNull MediaSession2 session,
|
||||
@NonNull ControllerInfo controller, @NonNull Command command) {
|
||||
@@ -674,6 +754,36 @@ 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 is <i>prepared</i>, i.e. it is ready to play the content
|
||||
* referenced by the given data source.
|
||||
* @param session the session for this event
|
||||
* @param mpb the player for this event
|
||||
* @param item the media item for which buffering is happening
|
||||
*/
|
||||
public void onMediaPrepared(@NonNull MediaSession2 session, @NonNull MediaPlayerBase mpb,
|
||||
@NonNull MediaItem2 item) { }
|
||||
|
||||
/**
|
||||
* Called to indicate that the state of the player has changed.
|
||||
* See {@link MediaPlayerBase#getPlayerState()} for polling the player state.
|
||||
* @param session the session for this event
|
||||
* @param mpb the player for this event
|
||||
* @param state the new state of the player.
|
||||
*/
|
||||
public void onPlayerStateChanged(@NonNull MediaSession2 session,
|
||||
@NonNull MediaPlayerBase mpb, @PlayerState int state) { }
|
||||
|
||||
/**
|
||||
* Called to report buffering events for a data source.
|
||||
* @param session the session for this event
|
||||
* @param mpb the player for this event
|
||||
* @param item the media item for which buffering is happening.
|
||||
* @param state the new buffering state.
|
||||
*/
|
||||
public void onBufferingStateChanged(@NonNull MediaSession2 session,
|
||||
@NonNull MediaPlayerBase mpb, @NonNull MediaItem2 item, @BuffState int state) { }
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1012,7 +1122,9 @@ public class MediaSession2 implements AutoCloseable, MediaPlaylistController {
|
||||
|
||||
/**
|
||||
* Parameter for the playlist.
|
||||
* @hide
|
||||
*/
|
||||
// TODO(jaewan): Remove (b/74116823)
|
||||
public final static class PlaylistParams {
|
||||
/**
|
||||
* @hide
|
||||
@@ -1307,16 +1419,10 @@ public class MediaSession2 implements AutoCloseable, MediaPlaylistController {
|
||||
mProvider.stop_impl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Rewind playback
|
||||
*/
|
||||
public void skipToPrevious() {
|
||||
mProvider.skipToPrevious_impl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Rewind playback
|
||||
*/
|
||||
public void skipToNext() {
|
||||
mProvider.skipToNext_impl();
|
||||
}
|
||||
@@ -1355,17 +1461,6 @@ public class MediaSession2 implements AutoCloseable, MediaPlaylistController {
|
||||
mProvider.seekTo_impl(pos);
|
||||
}
|
||||
|
||||
/**
|
||||
* Skip to the item in the play list.
|
||||
*
|
||||
* @param item item in the play list you want to play
|
||||
* @throws IllegalArgumentException if the play list is null
|
||||
* @throws NullPointerException if index is outside play list range
|
||||
*/
|
||||
public void skipToPlaylistItem(MediaItem2 item) {
|
||||
mProvider.skipToPlaylistItem_impl(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@@ -1380,81 +1475,15 @@ public class MediaSession2 implements AutoCloseable, MediaPlaylistController {
|
||||
// To match with KEYCODE_MEDIA_SKIP_BACKWARD
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a list of {@link MediaItem2} as the current play list.
|
||||
*
|
||||
* @param playlist A list of {@link MediaItem2} objects to set as a play list.
|
||||
* @throws IllegalArgumentException if given {@param playlist} is null.
|
||||
*/
|
||||
public void setPlaylist(@NonNull List<MediaItem2> playlist) {
|
||||
mProvider.setPlaylist_impl(playlist);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the media item in the play list.
|
||||
* <p>
|
||||
* If the item is the currently playing item of the playlist, current playback
|
||||
* will be stopped and playback moves to next source in the list.
|
||||
*
|
||||
* @throws IllegalArgumentException if the play list is null
|
||||
*/
|
||||
public void removePlaylistItem(MediaItem2 item) {
|
||||
mProvider.removePlaylistItem_impl(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the media item to the play list at position index.
|
||||
* <p>
|
||||
* This will not change the currently playing media item.
|
||||
* If index is less than or equal to the current index of the play list,
|
||||
* the current index of the play list will be incremented correspondingly.
|
||||
*
|
||||
* @param index the index you want to add
|
||||
* @param item the media item you want to add
|
||||
* @throws IndexOutOfBoundsException if index is outside play list range
|
||||
*/
|
||||
@Override
|
||||
public void addPlaylistItem(int index, @NonNull MediaItem2 item) {
|
||||
mProvider.addPlaylistItem_impl(index, item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace the media item at index in the playlist.
|
||||
* @param index the index of the item to replace
|
||||
* @param item the new item
|
||||
*/
|
||||
@Override
|
||||
public void replacePlaylistItem(int index, @NonNull MediaItem2 item) {
|
||||
mProvider.replacePlaylistItem_impl(index, item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the playlist which is lastly set.
|
||||
*
|
||||
* @return playlist
|
||||
*/
|
||||
@Override
|
||||
public List<MediaItem2> getPlaylist() {
|
||||
return mProvider.getPlaylist_impl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return currently playing media item.
|
||||
*
|
||||
* @return currently playing media item
|
||||
*/
|
||||
@Override
|
||||
public MediaItem2 getCurrentPlaylistItem() {
|
||||
return mProvider.getCurrentPlaylistItem_impl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the {@link PlaylistParams} for the current play list. Repeat/shuffle mode and metadata
|
||||
* for the list can be set by calling this method.
|
||||
*
|
||||
* @param params A {@link PlaylistParams} object to set.
|
||||
* @throws IllegalArgumentException if given {@param param} is null.
|
||||
* @hide
|
||||
*/
|
||||
// TODO(jaewan): Remove (b/74116823)
|
||||
public void setPlaylistParams(PlaylistParams params) {
|
||||
mProvider.setPlaylistParams_impl(params);
|
||||
}
|
||||
@@ -1462,7 +1491,9 @@ public class MediaSession2 implements AutoCloseable, MediaPlaylistController {
|
||||
/**
|
||||
* Returns the {@link PlaylistParams} for the current play list.
|
||||
* Returns {@code null} if not set.
|
||||
* @hide
|
||||
*/
|
||||
// TODO(jaewan): Remove (b/74116823)
|
||||
public PlaylistParams getPlaylistParams() {
|
||||
return mProvider.getPlaylistParams_impl();
|
||||
}
|
||||
@@ -1532,4 +1563,152 @@ public class MediaSession2 implements AutoCloseable, MediaPlaylistController {
|
||||
public void setPlaybackSpeed(float speed) {
|
||||
// TODO(jaewan): implement this (b/74093080)
|
||||
}
|
||||
|
||||
/**
|
||||
* Register {@link MediaPlaylistController.PlaylistEventCallback} to listen changes in the
|
||||
* underlying {@link MediaPlaylistController}, regardless of the change in the controller.
|
||||
* <p>
|
||||
* Registered callbacks will be also called when the controller is changed.
|
||||
*
|
||||
* @param executor a callback Executor
|
||||
* @param callback a PlaylistEventCallback
|
||||
* @throws IllegalArgumentException if executor or callback is {@code null}.
|
||||
*/
|
||||
@Override
|
||||
public void registerPlaylistControllerCallback(@NonNull @CallbackExecutor Executor executor,
|
||||
@NonNull PlaylistEventCallback callback) {
|
||||
// TODO(jaewan): Implement (b/74169681)
|
||||
//mProvider.registerPlaylistControllerCallback_impl(executor, callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregister the previously registered {@link MediaPlaylistController.PlaylistEventCallback}.
|
||||
*
|
||||
* @param callback the callback to be removed
|
||||
* @throws IllegalArgumentException if the callback is {@code null}.
|
||||
*/
|
||||
@Override
|
||||
public void unregisterPlaylistControllerCallback(@NonNull PlaylistEventCallback callback) {
|
||||
// TODO(jaewan): Implement (b/74169681)
|
||||
//mProvider.unregisterPlaylistControllerCallback_impl(callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the playlist which is lastly set.
|
||||
*
|
||||
* @return playlist
|
||||
*/
|
||||
@Override
|
||||
public List<MediaItem2> getPlaylist() {
|
||||
return mProvider.getPlaylist_impl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a list of {@link MediaItem2} as the current play list.
|
||||
*
|
||||
* @param playlist A list of {@link MediaItem2} objects to set as a play list.
|
||||
* @throws IllegalArgumentException if given {@param playlist} is null.
|
||||
* @hide
|
||||
*/
|
||||
// TODO(jaewan): Remove
|
||||
public void setPlaylist(@NonNull List<MediaItem2> playlist) {
|
||||
mProvider.setPlaylist_impl(playlist);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPlaylist(@NonNull List<MediaItem2> list, @Nullable MediaMetadata2 metadata) {
|
||||
// TODO(jaewan): Implement (b/74174649)
|
||||
}
|
||||
|
||||
/**
|
||||
* Skip to the item in the play list.
|
||||
*
|
||||
* @param item item in the play list you want to play
|
||||
* @throws IllegalArgumentException if the play list is null
|
||||
* @throws NullPointerException if index is outside play list range
|
||||
*/
|
||||
public void skipToPlaylistItem(MediaItem2 item) {
|
||||
mProvider.skipToPlaylistItem_impl(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MediaMetadata2 getPlaylistMetadata() {
|
||||
// TODO(jaewan): Implement (b/74174649)
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the media item to the play list at position index.
|
||||
* <p>
|
||||
* This will not change the currently playing media item.
|
||||
* If index is less than or equal to the current index of the play list,
|
||||
* the current index of the play list will be incremented correspondingly.
|
||||
*
|
||||
* @param index the index you want to add
|
||||
* @param item the media item you want to add
|
||||
* @throws IndexOutOfBoundsException if index is outside play list range
|
||||
*/
|
||||
@Override
|
||||
public void addPlaylistItem(int index, @NonNull MediaItem2 item) {
|
||||
mProvider.addPlaylistItem_impl(index, item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the media item in the play list.
|
||||
* <p>
|
||||
* If the item is the currently playing item of the playlist, current playback
|
||||
* will be stopped and playback moves to next source in the list.
|
||||
*
|
||||
* @throws IllegalArgumentException if the play list is null
|
||||
*/
|
||||
public void removePlaylistItem(MediaItem2 item) {
|
||||
mProvider.removePlaylistItem_impl(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace the media item at index in the playlist.
|
||||
* @param index the index of the item to replace
|
||||
* @param item the new item
|
||||
*/
|
||||
@Override
|
||||
public void replacePlaylistItem(int index, @NonNull MediaItem2 item) {
|
||||
mProvider.replacePlaylistItem_impl(index, item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return currently playing media item.
|
||||
*
|
||||
* @return currently playing media item
|
||||
*/
|
||||
@Override
|
||||
public MediaItem2 getCurrentPlaylistItem() {
|
||||
return mProvider.getCurrentPlaylistItem_impl();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePlaylistMetadata(@Nullable MediaMetadata2 metadata) {
|
||||
// TODO(jaewan): Implement (b/74174649)
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRepeatMode() {
|
||||
// TODO(jaewan): Implement (b/74118768)
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRepeatMode(int repeatMode) {
|
||||
// TODO(jaewan): Implement (b/74118768)
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getShuffleMode() {
|
||||
// TODO(jaewan): Implement (b/74118768)
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setShuffleMode(int shuffleMode) {
|
||||
// TODO(jaewan): Implement (b/74118768)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user