Loading packages/MediaComponents/src/com/android/media/MediaPlaylistAgentImpl.java +39 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.CallbackExecutor; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.media.DataSourceDesc; import android.media.MediaItem2; import android.media.MediaMetadata2; import android.media.MediaPlaylistAgent; Loading Loading @@ -48,6 +49,7 @@ public class MediaPlaylistAgentImpl implements MediaPlaylistAgentProvider { mInstance = instance; } @Override final public void registerPlaylistEventCallback_impl( @NonNull @CallbackExecutor Executor executor, @NonNull PlaylistEventCallback callback) { if (executor == null) { Loading @@ -66,6 +68,7 @@ public class MediaPlaylistAgentImpl implements MediaPlaylistAgentProvider { } } @Override final public void unregisterPlaylistEventCallback_impl( @NonNull PlaylistEventCallback callback) { if (callback == null) { Loading @@ -76,6 +79,7 @@ public class MediaPlaylistAgentImpl implements MediaPlaylistAgentProvider { } } @Override final public void notifyPlaylistChanged_impl() { ArrayMap<PlaylistEventCallback, Executor> callbacks = getCallbacks(); List<MediaItem2> playlist= mInstance.getPlaylist(); Loading @@ -88,6 +92,7 @@ public class MediaPlaylistAgentImpl implements MediaPlaylistAgentProvider { } } @Override final public void notifyPlaylistMetadataChanged_impl() { ArrayMap<PlaylistEventCallback, Executor> callbacks = getCallbacks(); for (int i = 0; i < callbacks.size(); i++) { Loading @@ -98,6 +103,7 @@ public class MediaPlaylistAgentImpl implements MediaPlaylistAgentProvider { } } @Override final public void notifyShuffleModeChanged_impl() { ArrayMap<PlaylistEventCallback, Executor> callbacks = getCallbacks(); for (int i = 0; i < callbacks.size(); i++) { Loading @@ -108,6 +114,7 @@ public class MediaPlaylistAgentImpl implements MediaPlaylistAgentProvider { } } @Override final public void notifyRepeatModeChanged_impl() { ArrayMap<PlaylistEventCallback, Executor> callbacks = getCallbacks(); for (int i = 0; i < callbacks.size(); i++) { Loading @@ -118,66 +125,98 @@ public class MediaPlaylistAgentImpl implements MediaPlaylistAgentProvider { } } @Override public @Nullable List<MediaItem2> getPlaylist_impl() { // empty implementation return null; } @Override public void setPlaylist_impl(@NonNull List<MediaItem2> list, @Nullable MediaMetadata2 metadata) { // empty implementation } @Override public @Nullable MediaMetadata2 getPlaylistMetadata_impl() { // empty implementation return null; } @Override public void updatePlaylistMetadata_impl(@Nullable MediaMetadata2 metadata) { // empty implementation } @Override public void addPlaylistItem_impl(int index, @NonNull MediaItem2 item) { // empty implementation } @Override public void removePlaylistItem_impl(@NonNull MediaItem2 item) { // empty implementation } @Override public void replacePlaylistItem_impl(int index, @NonNull MediaItem2 item) { // empty implementation } @Override public void skipToPlaylistItem_impl(@NonNull MediaItem2 item) { // empty implementation } @Override public void skipToPreviousItem_impl() { // empty implementation } @Override public void skipToNextItem_impl() { // empty implementation } @Override public int getRepeatMode_impl() { return MediaPlaylistAgent.REPEAT_MODE_NONE; } @Override public void setRepeatMode_impl(int repeatMode) { // empty implementation } @Override public int getShuffleMode_impl() { // empty implementation return MediaPlaylistAgent.SHUFFLE_MODE_NONE; } @Override public void setShuffleMode_impl(int shuffleMode) { // empty implementation } @Override public @Nullable MediaItem2 getMediaItem_impl(@NonNull DataSourceDesc dsd) { if (dsd == null) { throw new IllegalArgumentException("dsd shouldn't be null"); } List<MediaItem2> itemList = mInstance.getPlaylist(); if (itemList == null) { return null; } for (int i = 0; i < itemList.size(); i++) { MediaItem2 item = itemList.get(i); if (item != null && item.getDataSourceDesc() == dsd) { return item; } } return null; } private ArrayMap<PlaylistEventCallback, Executor> getCallbacks() { ArrayMap<PlaylistEventCallback, Executor> callbacks = new ArrayMap<>(); synchronized (mLock) { Loading packages/MediaComponents/src/com/android/media/MediaSession2Impl.java +38 −12 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.NoSuchElementException; import java.util.concurrent.Executor; public class MediaSession2Impl implements MediaSession2Provider { Loading Loading @@ -827,28 +828,32 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override public void onCurrentDataSourceChanged(MediaPlayerBase mpb, DataSourceDesc dsd) { MediaSession2Impl session = getSession(); if (session == null) { if (session == null || dsd == null) { return; } session.getCallbackExecutor().execute(() -> { // TODO (jaewan): Convert dsd to MediaItem (b/74506462) MediaItem2 item = getMediaItem(session, dsd); if (item == null) { return; } session.getCallback().onCurrentMediaItemChanged(session.getInstance(), mpb, item); // TODO (jaewan): Notify controllers through appropriate callback. (b/74505936) session.getCallback().onCurrentMediaItemChanged( session.getInstance(), mpb, null /* MediaItem */); }); } @Override public void onMediaPrepared(MediaPlayerBase mpb, DataSourceDesc dsd) { MediaSession2Impl session = getSession(); if (session == null) { if (session == null || dsd == null) { return; } session.getCallbackExecutor().execute(() -> { // TODO (jaewan): Convert dsd to MediaItem (b/74506462) MediaItem2 item = getMediaItem(session, dsd); if (item == null) { return; } session.getCallback().onMediaPrepared(session.getInstance(), mpb, item); // TODO (jaewan): Notify controllers through appropriate callback. (b/74505936) session.getCallback().onMediaPrepared( session.getInstance(), mpb, null /* MediaItem */); }); } Loading @@ -867,14 +872,17 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override public void onBufferingStateChanged(MediaPlayerBase mpb, DataSourceDesc dsd, int state) { MediaSession2Impl session = getSession(); if (session == null) { if (session == null || dsd == null) { return; } session.getCallbackExecutor().execute(() -> { // TODO (jaewan): Convert dsd to MediaItem (b/74506462) // TODO (jaewan): Notify controllers through appropriate callback. (b/74505936) MediaItem2 item = getMediaItem(session, dsd); if (item == null) { return; } session.getCallback().onBufferingStateChanged( session.getInstance(), mpb, null /* MediaItem */, state); session.getInstance(), mpb, item, state); // TODO (jaewan): Notify controllers through appropriate callback. (b/74505936) }); } Loading @@ -885,6 +893,24 @@ public class MediaSession2Impl implements MediaSession2Provider { } return session; } private MediaItem2 getMediaItem(MediaSession2Impl session, DataSourceDesc dsd) { MediaPlaylistAgent agent = session.getPlaylistAgent(); if (agent == null) { if (DEBUG) { Log.d(TAG, "Session is closed", new IllegalStateException()); } return null; } MediaItem2 item = agent.getMediaItem(dsd); if (item == null) { if (DEBUG) { Log.d(TAG, "Could not find matching item for dsd=" + dsd, new NoSuchElementException()); } } return item; } } private static class MyPlaylistEventCallback extends PlaylistEventCallback { Loading Loading
packages/MediaComponents/src/com/android/media/MediaPlaylistAgentImpl.java +39 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.CallbackExecutor; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.media.DataSourceDesc; import android.media.MediaItem2; import android.media.MediaMetadata2; import android.media.MediaPlaylistAgent; Loading Loading @@ -48,6 +49,7 @@ public class MediaPlaylistAgentImpl implements MediaPlaylistAgentProvider { mInstance = instance; } @Override final public void registerPlaylistEventCallback_impl( @NonNull @CallbackExecutor Executor executor, @NonNull PlaylistEventCallback callback) { if (executor == null) { Loading @@ -66,6 +68,7 @@ public class MediaPlaylistAgentImpl implements MediaPlaylistAgentProvider { } } @Override final public void unregisterPlaylistEventCallback_impl( @NonNull PlaylistEventCallback callback) { if (callback == null) { Loading @@ -76,6 +79,7 @@ public class MediaPlaylistAgentImpl implements MediaPlaylistAgentProvider { } } @Override final public void notifyPlaylistChanged_impl() { ArrayMap<PlaylistEventCallback, Executor> callbacks = getCallbacks(); List<MediaItem2> playlist= mInstance.getPlaylist(); Loading @@ -88,6 +92,7 @@ public class MediaPlaylistAgentImpl implements MediaPlaylistAgentProvider { } } @Override final public void notifyPlaylistMetadataChanged_impl() { ArrayMap<PlaylistEventCallback, Executor> callbacks = getCallbacks(); for (int i = 0; i < callbacks.size(); i++) { Loading @@ -98,6 +103,7 @@ public class MediaPlaylistAgentImpl implements MediaPlaylistAgentProvider { } } @Override final public void notifyShuffleModeChanged_impl() { ArrayMap<PlaylistEventCallback, Executor> callbacks = getCallbacks(); for (int i = 0; i < callbacks.size(); i++) { Loading @@ -108,6 +114,7 @@ public class MediaPlaylistAgentImpl implements MediaPlaylistAgentProvider { } } @Override final public void notifyRepeatModeChanged_impl() { ArrayMap<PlaylistEventCallback, Executor> callbacks = getCallbacks(); for (int i = 0; i < callbacks.size(); i++) { Loading @@ -118,66 +125,98 @@ public class MediaPlaylistAgentImpl implements MediaPlaylistAgentProvider { } } @Override public @Nullable List<MediaItem2> getPlaylist_impl() { // empty implementation return null; } @Override public void setPlaylist_impl(@NonNull List<MediaItem2> list, @Nullable MediaMetadata2 metadata) { // empty implementation } @Override public @Nullable MediaMetadata2 getPlaylistMetadata_impl() { // empty implementation return null; } @Override public void updatePlaylistMetadata_impl(@Nullable MediaMetadata2 metadata) { // empty implementation } @Override public void addPlaylistItem_impl(int index, @NonNull MediaItem2 item) { // empty implementation } @Override public void removePlaylistItem_impl(@NonNull MediaItem2 item) { // empty implementation } @Override public void replacePlaylistItem_impl(int index, @NonNull MediaItem2 item) { // empty implementation } @Override public void skipToPlaylistItem_impl(@NonNull MediaItem2 item) { // empty implementation } @Override public void skipToPreviousItem_impl() { // empty implementation } @Override public void skipToNextItem_impl() { // empty implementation } @Override public int getRepeatMode_impl() { return MediaPlaylistAgent.REPEAT_MODE_NONE; } @Override public void setRepeatMode_impl(int repeatMode) { // empty implementation } @Override public int getShuffleMode_impl() { // empty implementation return MediaPlaylistAgent.SHUFFLE_MODE_NONE; } @Override public void setShuffleMode_impl(int shuffleMode) { // empty implementation } @Override public @Nullable MediaItem2 getMediaItem_impl(@NonNull DataSourceDesc dsd) { if (dsd == null) { throw new IllegalArgumentException("dsd shouldn't be null"); } List<MediaItem2> itemList = mInstance.getPlaylist(); if (itemList == null) { return null; } for (int i = 0; i < itemList.size(); i++) { MediaItem2 item = itemList.get(i); if (item != null && item.getDataSourceDesc() == dsd) { return item; } } return null; } private ArrayMap<PlaylistEventCallback, Executor> getCallbacks() { ArrayMap<PlaylistEventCallback, Executor> callbacks = new ArrayMap<>(); synchronized (mLock) { Loading
packages/MediaComponents/src/com/android/media/MediaSession2Impl.java +38 −12 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.NoSuchElementException; import java.util.concurrent.Executor; public class MediaSession2Impl implements MediaSession2Provider { Loading Loading @@ -827,28 +828,32 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override public void onCurrentDataSourceChanged(MediaPlayerBase mpb, DataSourceDesc dsd) { MediaSession2Impl session = getSession(); if (session == null) { if (session == null || dsd == null) { return; } session.getCallbackExecutor().execute(() -> { // TODO (jaewan): Convert dsd to MediaItem (b/74506462) MediaItem2 item = getMediaItem(session, dsd); if (item == null) { return; } session.getCallback().onCurrentMediaItemChanged(session.getInstance(), mpb, item); // TODO (jaewan): Notify controllers through appropriate callback. (b/74505936) session.getCallback().onCurrentMediaItemChanged( session.getInstance(), mpb, null /* MediaItem */); }); } @Override public void onMediaPrepared(MediaPlayerBase mpb, DataSourceDesc dsd) { MediaSession2Impl session = getSession(); if (session == null) { if (session == null || dsd == null) { return; } session.getCallbackExecutor().execute(() -> { // TODO (jaewan): Convert dsd to MediaItem (b/74506462) MediaItem2 item = getMediaItem(session, dsd); if (item == null) { return; } session.getCallback().onMediaPrepared(session.getInstance(), mpb, item); // TODO (jaewan): Notify controllers through appropriate callback. (b/74505936) session.getCallback().onMediaPrepared( session.getInstance(), mpb, null /* MediaItem */); }); } Loading @@ -867,14 +872,17 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override public void onBufferingStateChanged(MediaPlayerBase mpb, DataSourceDesc dsd, int state) { MediaSession2Impl session = getSession(); if (session == null) { if (session == null || dsd == null) { return; } session.getCallbackExecutor().execute(() -> { // TODO (jaewan): Convert dsd to MediaItem (b/74506462) // TODO (jaewan): Notify controllers through appropriate callback. (b/74505936) MediaItem2 item = getMediaItem(session, dsd); if (item == null) { return; } session.getCallback().onBufferingStateChanged( session.getInstance(), mpb, null /* MediaItem */, state); session.getInstance(), mpb, item, state); // TODO (jaewan): Notify controllers through appropriate callback. (b/74505936) }); } Loading @@ -885,6 +893,24 @@ public class MediaSession2Impl implements MediaSession2Provider { } return session; } private MediaItem2 getMediaItem(MediaSession2Impl session, DataSourceDesc dsd) { MediaPlaylistAgent agent = session.getPlaylistAgent(); if (agent == null) { if (DEBUG) { Log.d(TAG, "Session is closed", new IllegalStateException()); } return null; } MediaItem2 item = agent.getMediaItem(dsd); if (item == null) { if (DEBUG) { Log.d(TAG, "Could not find matching item for dsd=" + dsd, new NoSuchElementException()); } } return item; } } private static class MyPlaylistEventCallback extends PlaylistEventCallback { Loading