Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit df0e8fdf authored by Sungsoo Lim's avatar Sungsoo Lim
Browse files

Remove MediaPlaylistController, add MediaPlaylistAgent

MediaPlaylistAgent is the abstract class an application needs to
derive from to pass an object to a MediaSession2 that will override
default playlist handling behaviors. It contains a set of notify*
methods to signal MediaSession2 that playlist-related state has
changed.

Bug: 64098437
Test: make update-api
Change-Id: Icb3c57ddc14eba276f49d4ba85f11adbeb3e0917
parent 87086f59
Loading
Loading
Loading
Loading
+46 −35
Original line number Diff line number Diff line
@@ -23350,7 +23350,7 @@ package android.media {
    field public static final int REGULAR_CODECS = 0; // 0x0
  }
  public class MediaController2 implements java.lang.AutoCloseable android.media.MediaPlaylistController {
  public class MediaController2 implements java.lang.AutoCloseable {
    ctor public MediaController2(android.content.Context, android.media.SessionToken2, java.util.concurrent.Executor, android.media.MediaController2.ControllerCallback);
    method public void addPlaylistItem(int, android.media.MediaItem2);
    method public void adjustVolume(int, int);
@@ -23378,7 +23378,6 @@ 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();
@@ -23390,11 +23389,10 @@ package android.media {
    method public void setRepeatMode(int);
    method public void setShuffleMode(int);
    method public void setVolumeTo(int, int);
    method public void skipToNext();
    method public void skipToNextItem();
    method public void skipToPlaylistItem(android.media.MediaItem2);
    method public void skipToPrevious();
    method public void skipToPreviousItem();
    method public void stop();
    method public void unregisterPlaylistControllerCallback(android.media.MediaPlaylistController.PlaylistEventCallback);
    method public void updatePlaylistMetadata(android.media.MediaMetadata2);
  }
@@ -23411,7 +23409,11 @@ 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, android.media.MediaPlaylistAgent, java.util.List<android.media.MediaItem2>, android.media.MediaMetadata2);
    method public void onPlaylistMetadataChanged(android.media.MediaController2, android.media.MediaPlaylistAgent, android.media.MediaMetadata2);
    method public void onPositionChanged(android.media.MediaController2, long, long);
    method public void onRepeatModeChanged(android.media.MediaController2, android.media.MediaPlaylistAgent, int);
    method public void onShuffleModeChanged(android.media.MediaController2, android.media.MediaPlaylistAgent, int);
  }
  public static final class MediaController2.PlaybackInfo {
@@ -23872,7 +23874,7 @@ package android.media {
    method public android.media.MediaLibraryService2.MediaLibrarySession build();
    method public android.media.MediaLibraryService2.MediaLibrarySession.Builder setId(java.lang.String);
    method public android.media.MediaLibraryService2.MediaLibrarySession.Builder setPlayer(android.media.MediaPlayerBase);
    method public android.media.MediaLibraryService2.MediaLibrarySession.Builder setPlaylistController(android.media.MediaPlaylistController);
    method public android.media.MediaLibraryService2.MediaLibrarySession.Builder setPlaylistAgent(android.media.MediaPlaylistAgent);
    method public android.media.MediaLibraryService2.MediaLibrarySession.Builder setSessionActivity(android.app.PendingIntent);
    method public android.media.MediaLibraryService2.MediaLibrarySession.Builder setSessionCallback(java.util.concurrent.Executor, android.media.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback);
    method public android.media.MediaLibraryService2.MediaLibrarySession.Builder setVolumeProvider(android.media.VolumeProvider2);
@@ -24541,21 +24543,28 @@ package android.media {
    method public void onPlayerStateChanged(android.media.MediaPlayerBase, int);
  }
  public abstract interface MediaPlaylistController {
    method public abstract void addPlaylistItem(int, android.media.MediaItem2);
    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);
  public abstract class MediaPlaylistAgent {
    ctor public MediaPlaylistAgent(android.content.Context);
    method public void addPlaylistItem(int, android.media.MediaItem2);
    method public java.util.List<android.media.MediaItem2> getPlaylist();
    method public android.media.MediaMetadata2 getPlaylistMetadata();
    method public int getRepeatMode();
    method public int getShuffleMode();
    method public final void notifyPlaylistChanged();
    method public final void notifyPlaylistMetadataChanged();
    method public final void notifyRepeatModeChanged();
    method public final void notifyShuffleModeChanged();
    method public final void registerPlaylistEventCallback(java.util.concurrent.Executor, android.media.MediaPlaylistAgent.PlaylistEventCallback);
    method public void removePlaylistItem(android.media.MediaItem2);
    method public void replacePlaylistItem(int, android.media.MediaItem2);
    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 skipToNextItem();
    method public void skipToPlaylistItem(android.media.MediaItem2);
    method public void skipToPreviousItem();
    method public final void unregisterPlaylistEventCallback(android.media.MediaPlaylistAgent.PlaylistEventCallback);
    method public 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
@@ -24565,12 +24574,12 @@ package android.media {
    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 static abstract class MediaPlaylistAgent.PlaylistEventCallback {
    ctor public MediaPlaylistAgent.PlaylistEventCallback();
    method public void onPlaylistChanged(android.media.MediaPlaylistAgent, java.util.List<android.media.MediaItem2>, android.media.MediaMetadata2);
    method public void onPlaylistMetadataChanged(android.media.MediaPlaylistAgent, android.media.MediaMetadata2);
    method public void onRepeatModeChanged(android.media.MediaPlaylistAgent, int);
    method public void onShuffleModeChanged(android.media.MediaPlaylistAgent, int);
  }
  public class MediaRecorder implements android.media.AudioRouting {
@@ -24849,17 +24858,17 @@ package android.media {
    method public abstract void onScanCompleted(java.lang.String, android.net.Uri);
  }
  public class MediaSession2 implements java.lang.AutoCloseable android.media.MediaPlaylistController {
  public class MediaSession2 implements java.lang.AutoCloseable {
    method public void addPlaylistItem(int, android.media.MediaItem2);
    method public void clearOnDataSourceMissingHelper();
    method public void close();
    method public void fastForward();
    method public java.util.List<android.media.MediaSession2.ControllerInfo> getConnectedControllers();
    method public android.media.MediaItem2 getCurrentMediaItem();
    method public android.media.MediaPlaylistController getMediaPlaylistController();
    method public float getPlaybackSpeed();
    method public android.media.MediaPlayerBase getPlayer();
    method public java.util.List<android.media.MediaItem2> getPlaylist();
    method public android.media.MediaPlaylistAgent getPlaylistAgent();
    method public android.media.MediaMetadata2 getPlaylistMetadata();
    method public int getRepeatMode();
    method public int getShuffleMode();
@@ -24869,7 +24878,6 @@ package android.media {
    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();
@@ -24884,12 +24892,11 @@ package android.media {
    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 skipToNextItem();
    method public void skipToPlaylistItem(android.media.MediaItem2);
    method public void skipToPrevious();
    method public void skipToPreviousItem();
    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);
    method public void updatePlayer(android.media.MediaPlayerBase, android.media.MediaPlaylistAgent, android.media.VolumeProvider2);
    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
@@ -24940,7 +24947,7 @@ package android.media {
    method public android.media.MediaSession2 build();
    method public android.media.MediaSession2.Builder setId(java.lang.String);
    method public android.media.MediaSession2.Builder setPlayer(android.media.MediaPlayerBase);
    method public android.media.MediaSession2.Builder setPlaylistController(android.media.MediaPlaylistController);
    method public android.media.MediaSession2.Builder setPlaylistAgent(android.media.MediaPlaylistAgent);
    method public android.media.MediaSession2.Builder setSessionActivity(android.app.PendingIntent);
    method public android.media.MediaSession2.Builder setSessionCallback(java.util.concurrent.Executor, android.media.MediaSession2.SessionCallback);
    method public android.media.MediaSession2.Builder setVolumeProvider(android.media.VolumeProvider2);
@@ -25006,10 +25013,14 @@ package android.media {
    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 onPlaylistChanged(android.media.MediaSession2, android.media.MediaPlaylistAgent, java.util.List<android.media.MediaItem2>, android.media.MediaMetadata2);
    method public void onPlaylistMetadataChanged(android.media.MediaSession2, android.media.MediaPlaylistAgent, android.media.MediaMetadata2);
    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);
    method public void onRepeatModeChanged(android.media.MediaSession2, android.media.MediaPlaylistAgent, int);
    method public void onSetRating(android.media.MediaSession2, android.media.MediaSession2.ControllerInfo, java.lang.String, android.media.Rating2);
    method public void onShuffleModeChanged(android.media.MediaSession2, android.media.MediaPlaylistAgent, int);
  }
  public abstract class MediaSessionService2 extends android.app.Service {
+82 −53
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.PendingIntent;
import android.content.Context;
import android.media.MediaPlaylistAgent.RepeatMode;
import android.media.MediaPlaylistAgent.ShuffleMode;
import android.media.MediaSession2.Command;
import android.media.MediaSession2.CommandButton;
import android.media.MediaSession2.CommandGroup;
@@ -65,7 +67,7 @@ import java.util.concurrent.Executor;
 * @see MediaSession2
 * @see MediaSessionService2
 */
public class MediaController2 implements AutoCloseable, MediaPlaylistController {
public class MediaController2 implements AutoCloseable {
    /**
     * Interface for listening to change in activeness of the {@link MediaSession2}.  It's
     * active if and only if it has set a player.
@@ -224,6 +226,57 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController
        public void onCurrentMediaItemChanged(@NonNull MediaController2 controller,
                @NonNull MediaItem2 item) { }

        /**
         * Called when a playlist is changed.
         *
         * @param controller the controller for this event
         * @param mplc playlist controller for this event
         * @param list new playlist
         * @param metadata new metadata
         */
        public void onPlaylistChanged(@NonNull MediaController2 controller,
                @NonNull MediaPlaylistAgent mplc, @NonNull List<MediaItem2> list,
                @Nullable MediaMetadata2 metadata) { }

        /**
         * Called when a playlist metadata is changed.
         *
         * @param controller the controller for this event
         * @param mplc playlist controller for this event
         * @param metadata new metadata
         */
        public void onPlaylistMetadataChanged(@NonNull MediaController2 controller,
                @NonNull MediaPlaylistAgent mplc, @Nullable MediaMetadata2 metadata) { }

        /**
         * Called when the shuffle mode is changed.
         *
         * @param controller the controller for this event
         * @param mplc playlist controller for this event
         * @param shuffleMode repeat mode
         * @see MediaPlaylistAgent#SHUFFLE_MODE_NONE
         * @see MediaPlaylistAgent#SHUFFLE_MODE_ALL
         * @see MediaPlaylistAgent#SHUFFLE_MODE_GROUP
         */
        public void onShuffleModeChanged(@NonNull MediaController2 controller,
                @NonNull MediaPlaylistAgent mplc,
                @MediaPlaylistAgent.ShuffleMode int shuffleMode) { }

        /**
         * Called when the repeat mode is changed.
         *
         * @param controller the controller for this event
         * @param mplc playlist controller for this event
         * @param repeatMode repeat mode
         * @see MediaPlaylistAgent#REPEAT_MODE_NONE
         * @see MediaPlaylistAgent#REPEAT_MODE_ONE
         * @see MediaPlaylistAgent#REPEAT_MODE_ALL
         * @see MediaPlaylistAgent#REPEAT_MODE_GROUP
         */
        public void onRepeatModeChanged(@NonNull MediaController2 controller,
                @NonNull MediaPlaylistAgent mplc,
                @MediaPlaylistAgent.RepeatMode int repeatMode) { }

        /**
         * Called when the playlist parameters are changed.
         *
@@ -398,14 +451,6 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController
        mProvider.stop_impl();
    }

    public void skipToPrevious() {
        mProvider.skipToPrevious_impl();
    }

    public void skipToNext() {
        mProvider.skipToNext_impl();
    }

    /**
     * Request that the player prepare its playback. In other words, other sessions can continue
     * to play during the preparation of this session. This method can be used to speed up the
@@ -701,57 +746,39 @@ 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.
     *
     * @return playlist. Can be {@code null} if the controller doesn't have enough permission.
     */
    @Override
    public @Nullable List<MediaItem2> getPlaylist() {
        return mProvider.getPlaylist_impl();
    }


    @Override
    /**
     * Sets the playlist.
     *
     * @param list playlist
     * @param metadata metadata of the playlist
     */
    public void setPlaylist(@NonNull List<MediaItem2> list, @Nullable MediaMetadata2 metadata) {
        // TODO(jaewan): Implement (b/74174649)
    }

    @Override
    /**
     * Updates the playlist metadata
     *
     * @param metadata metadata of the playlist
     */
    public void updatePlaylistMetadata(@Nullable MediaMetadata2 metadata) {
        // TODO(jaewan): Implement (b/74174649)
    }

    @Override
    /**
     * Returns the playlist metadata
     *
     * @return metadata metadata of the playlist, or null if none is set
     */
    public @Nullable MediaMetadata2 getPlaylistMetadata() {
        // TODO(jaewan): Implement (b/74174649)
        return null;
@@ -779,7 +806,6 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController
     * @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);
    }
@@ -790,7 +816,6 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController
     * 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.
     */
    @Override
    public void removePlaylistItem(@NonNull MediaItem2 item) {
        mProvider.removePlaylistItem_impl(item);
    }
@@ -800,7 +825,6 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController
     * @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);
    }
@@ -823,30 +847,35 @@ public class MediaController2 implements AutoCloseable, MediaPlaylistController
     * @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 void skipToPreviousItem() {
        // TODO(jaewan): fix this
        mProvider.skipToPrevious_impl();
    }

    public void skipToNextItem() {
        // TODO(jaewan): fix this
        mProvider.skipToNext_impl();
    }

    public @RepeatMode int getRepeatMode() {
        // TODO(jaewan): Implement (b/74118768)
        return 0;
    }

    @Override
    public void setRepeatMode(int repeatMode) {
    public void setRepeatMode(@RepeatMode 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) {
    public void setShuffleMode(@ShuffleMode int shuffleMode) {
        // TODO(jaewan): Implement (b/74118768)
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -221,8 +221,8 @@ public abstract class MediaLibraryService2 extends MediaSessionService2 {
            }

            @Override
            public Builder setPlaylistController(@NonNull MediaPlaylistController mplc) {
                return super.setPlaylistController(mplc);
            public Builder setPlaylistAgent(@NonNull MediaPlaylistAgent mplc) {
                return super.setPlaylistAgent(mplc);
            }

            @Override
+82 −65

File changed.

Preview size limit exceeded, changes collapsed.

Loading