diff --git a/media/java/android/media/MediaPlaylistAgent.java b/media/java/android/media/MediaPlaylistAgent.java index c3cc5386e92f3..1d7520ff9f0d9 100644 --- a/media/java/android/media/MediaPlaylistAgent.java +++ b/media/java/android/media/MediaPlaylistAgent.java @@ -21,6 +21,8 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; +import android.media.update.ApiLoader; +import android.media.update.MediaPlaylistAgentProvider; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -92,7 +94,7 @@ public abstract class MediaPlaylistAgent { */ public static final int SHUFFLE_MODE_GROUP = 2; - private MediaPlayerBase mPlayer; + private final MediaPlaylistAgentProvider mProvider; /** * A callback class to receive notifications for events on the media player. See @@ -146,8 +148,7 @@ public abstract class MediaPlaylistAgent { } public MediaPlaylistAgent(@NonNull Context context) { - // FYI, Need to have a context in the constructor for making this class be updatable - // TODO(jaewan) : implement this (b/74090741) + mProvider = ApiLoader.getProvider(context).createMediaPlaylistAgent(context, this); } /** @@ -160,7 +161,7 @@ public abstract class MediaPlaylistAgent { */ public final void registerPlaylistEventCallback( @NonNull @CallbackExecutor Executor executor, @NonNull PlaylistEventCallback callback) { - // TODO(jaewan): implement this (b/74090741) + mProvider.registerPlaylistEventCallback_impl(executor, callback); } /** @@ -169,25 +170,24 @@ public abstract class MediaPlaylistAgent { * @param callback the callback to be removed * @throws IllegalArgumentException if the callback is {@code null}. */ - public final void unregisterPlaylistEventCallback( - @NonNull PlaylistEventCallback callback) { - // TODO(jaewan): implement this (b/74090741) + public final void unregisterPlaylistEventCallback(@NonNull PlaylistEventCallback callback) { + mProvider.unregisterPlaylistEventCallback_impl(callback); } public final void notifyPlaylistChanged() { - // TODO(jaewan): implement this (b/74090741) + mProvider.notifyPlaylistChanged_impl(); } public final void notifyPlaylistMetadataChanged() { - // TODO(jaewan): implement this (b/74090741) + mProvider.notifyPlaylistMetadataChanged_impl(); } public final void notifyShuffleModeChanged() { - // TODO(jaewan): implement this (b/74090741) + mProvider.notifyShuffleModeChanged_impl(); } public final void notifyRepeatModeChanged() { - // TODO(jaewan): implement this (b/74090741) + mProvider.notifyRepeatModeChanged_impl(); } /** @@ -196,8 +196,7 @@ public abstract class MediaPlaylistAgent { * @return playlist, or null if none is set. */ public @Nullable List getPlaylist() { - // TODO(jaewan): implement this (b/74090741) - return null; + return mProvider.getPlaylist_impl(); } /** @@ -207,7 +206,7 @@ public abstract class MediaPlaylistAgent { * @param metadata metadata of the playlist */ public void setPlaylist(@NonNull List list, @Nullable MediaMetadata2 metadata) { - // TODO(jaewan): implement this (b/74090741) + mProvider.setPlaylist_impl(list, metadata); } /** @@ -216,8 +215,7 @@ public abstract class MediaPlaylistAgent { * @return metadata metadata of the playlist, or null if none is set */ public @Nullable MediaMetadata2 getPlaylistMetadata() { - // TODO(jaewan): implement this (b/74090741) - return null; + return mProvider.getPlaylistMetadata_impl(); } /** @@ -226,7 +224,7 @@ public abstract class MediaPlaylistAgent { * @param metadata metadata of the playlist */ public void updatePlaylistMetadata(@Nullable MediaMetadata2 metadata) { - // TODO(jaewan): implement this (b/74090741) + mProvider.updatePlaylistMetadata_impl(metadata); } /** @@ -236,7 +234,7 @@ public abstract class MediaPlaylistAgent { * @param item media item to add */ public void addPlaylistItem(int index, @NonNull MediaItem2 item) { - // TODO(jaewan): implement this (b/74090741) + mProvider.addPlaylistItem_impl(index, item); } /** @@ -245,7 +243,7 @@ public abstract class MediaPlaylistAgent { * @param item media item to remove */ public void removePlaylistItem(@NonNull MediaItem2 item) { - // TODO(jaewan): implement this (b/74090741) + mProvider.removePlaylistItem_impl(item); } /** @@ -256,7 +254,7 @@ public abstract class MediaPlaylistAgent { * @param item the new item */ public void replacePlaylistItem(int index, @NonNull MediaItem2 item) { - // TODO(jaewan): implement this (b/74090741) + mProvider.replacePlaylistItem_impl(index, item); } /** @@ -265,15 +263,15 @@ public abstract class MediaPlaylistAgent { * @param item media item to start playing from */ public void skipToPlaylistItem(@NonNull MediaItem2 item) { - // TODO(jaewan): implement this (b/74090741) + mProvider.skipToPlaylistItem_impl(item); } public void skipToPreviousItem() { - // TODO(jaewan): implement this (b/74090741) + mProvider.skipToPreviousItem_impl(); } public void skipToNextItem() { - // TODO(jaewan): implement this (b/74090741) + mProvider.skipToNextItem_impl(); } /** @@ -286,8 +284,7 @@ public abstract class MediaPlaylistAgent { * @see #REPEAT_MODE_GROUP */ public @RepeatMode int getRepeatMode() { - // TODO(jaewan): implement this (b/74090741) - return REPEAT_MODE_NONE; + return mProvider.getRepeatMode_impl(); } /** @@ -300,7 +297,7 @@ public abstract class MediaPlaylistAgent { * @see #REPEAT_MODE_GROUP */ public void setRepeatMode(@RepeatMode int repeatMode) { - // TODO(jaewan): implement this (b/74090741) + mProvider.setRepeatMode_impl(repeatMode); } /** @@ -312,8 +309,7 @@ public abstract class MediaPlaylistAgent { * @see #SHUFFLE_MODE_GROUP */ public @ShuffleMode int getShuffleMode() { - // TODO(jaewan): implement this (b/74090741) - return SHUFFLE_MODE_NONE; + return mProvider.getShuffleMode_impl(); } /** @@ -325,6 +321,6 @@ public abstract class MediaPlaylistAgent { * @see #SHUFFLE_MODE_GROUP */ public void setShuffleMode(@ShuffleMode int shuffleMode) { - // TODO(jaewan): implement this (b/74090741) + mProvider.setShuffleMode_impl(shuffleMode); } } diff --git a/media/java/android/media/update/MediaPlaylistAgentProvider.java b/media/java/android/media/update/MediaPlaylistAgentProvider.java new file mode 100644 index 0000000000000..b27d5a1e7b626 --- /dev/null +++ b/media/java/android/media/update/MediaPlaylistAgentProvider.java @@ -0,0 +1,53 @@ +/* + * Copyright 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.media.update; + +import android.media.MediaItem2; +import android.media.MediaMetadata2; +import android.media.MediaPlaylistAgent.PlaylistEventCallback; + +import java.util.List; +import java.util.concurrent.Executor; + +/** + * @hide + */ +public interface MediaPlaylistAgentProvider { + // final methods of MediaPlaylistAgent + void registerPlaylistEventCallback_impl(Executor executor, PlaylistEventCallback callback); + void unregisterPlaylistEventCallback_impl(PlaylistEventCallback callback); + void notifyPlaylistChanged_impl(); + void notifyPlaylistMetadataChanged_impl(); + void notifyShuffleModeChanged_impl(); + void notifyRepeatModeChanged_impl(); + + // public methods of MediaPlaylistAgent + List getPlaylist_impl(); + void setPlaylist_impl(List list, MediaMetadata2 metadata); + MediaMetadata2 getPlaylistMetadata_impl(); + void updatePlaylistMetadata_impl(MediaMetadata2 metadata); + void addPlaylistItem_impl(int index, MediaItem2 item); + void removePlaylistItem_impl(MediaItem2 item); + void replacePlaylistItem_impl(int index, MediaItem2 item); + void skipToPlaylistItem_impl(MediaItem2 item); + void skipToPreviousItem_impl(); + void skipToNextItem_impl(); + int getRepeatMode_impl(); + void setRepeatMode_impl(int repeatMode); + int getShuffleMode_impl(); + void setShuffleMode_impl(int shuffleMode); +} diff --git a/media/java/android/media/update/StaticProvider.java b/media/java/android/media/update/StaticProvider.java index 843fa718b4449..53ced9cd32460 100644 --- a/media/java/android/media/update/StaticProvider.java +++ b/media/java/android/media/update/StaticProvider.java @@ -30,6 +30,7 @@ import android.media.MediaLibraryService2.LibraryRoot; import android.media.MediaLibraryService2.MediaLibrarySession; import android.media.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback; import android.media.MediaMetadata2; +import android.media.MediaPlaylistAgent; import android.media.MediaSession2; import android.media.MediaSession2.CommandButton.Builder; import android.media.MediaSession2.PlaylistParams; @@ -134,4 +135,7 @@ public interface StaticProvider { PlaybackState2Provider createPlaybackState2(Context context, PlaybackState2 instance, int state, long position, long updateTime, float speed, long bufferedPosition, long activeItemId); PlaybackState2 fromBundle_PlaybackState2(Context context, Bundle bundle); + + MediaPlaylistAgentProvider createMediaPlaylistAgent(Context context, + MediaPlaylistAgent instance); }