Loading packages/MediaComponents/src/com/android/media/MediaController2Impl.java +36 −3 Original line number Original line Diff line number Diff line Loading @@ -465,11 +465,14 @@ public class MediaController2Impl implements MediaController2Provider { } } @Override @Override public void setCurrentPlaylistItem_impl(int index) { public void skipToPlaylistItem_impl(MediaItem2 item) { // TODO(jaewan): Implement this /* Bundle args = new Bundle(); Bundle args = new Bundle(); args.putInt(MediaSession2Stub.ARGUMENT_KEY_ITEM_INDEX, index); args.putInt(MediaSession2Stub.ARGUMENT_KEY_ITEM_INDEX, item); sendTransportControlCommand( sendTransportControlCommand( MediaSession2.COMMAND_CODE_PLAYBACK_SET_CURRENT_PLAYLIST_ITEM, args); MediaSession2.COMMAND_CODE_PLAYBACK_SET_CURRENT_PLAYLIST_ITEM, args); */ } } @Override @Override Loading Loading @@ -513,6 +516,36 @@ public class MediaController2Impl implements MediaController2Provider { sendTransportControlCommand(MediaSession2.COMMAND_CODE_PLAYBACK_SET_PLAYLIST_PARAMS, args); sendTransportControlCommand(MediaSession2.COMMAND_CODE_PLAYBACK_SET_PLAYLIST_PARAMS, args); } } @Override public int getPlayerState_impl() { // TODO(jaewan): Implement return 0; } @Override public long getPosition_impl() { // TODO(jaewan): Implement return 0; } @Override public float getPlaybackSpeed_impl() { // TODO(jaewan): Implement return 0; } @Override public long getBufferedPosition_impl() { // TODO(jaewan): Implement return 0; } @Override public MediaItem2 getCurrentPlaylistItem_impl() { // TODO(jaewan): Implement return null; } void pushPlaybackStateChanges(final PlaybackState2 state) { void pushPlaybackStateChanges(final PlaybackState2 state) { synchronized (mLock) { synchronized (mLock) { mPlaybackState = state; mPlaybackState = state; Loading packages/MediaComponents/src/com/android/media/MediaLibraryService2Impl.java +7 −7 Original line number Original line Diff line number Diff line Loading @@ -21,9 +21,9 @@ import android.content.Context; import android.media.MediaLibraryService2; import android.media.MediaLibraryService2; import android.media.MediaLibraryService2.LibraryRoot; import android.media.MediaLibraryService2.LibraryRoot; import android.media.MediaLibraryService2.MediaLibrarySession; import android.media.MediaLibraryService2.MediaLibrarySession; import android.media.MediaLibraryService2.MediaLibrarySessionBuilder; import android.media.MediaLibraryService2.MediaLibrarySession.Builder; import android.media.MediaLibraryService2.MediaLibrarySessionCallback; import android.media.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback; import android.media.MediaPlayerInterface; import android.media.MediaPlayerBase; import android.media.MediaSession2; import android.media.MediaSession2; import android.media.MediaSession2.ControllerInfo; import android.media.MediaSession2.ControllerInfo; import android.media.MediaSessionService2; import android.media.MediaSessionService2; Loading Loading @@ -67,7 +67,7 @@ public class MediaLibraryService2Impl extends MediaSessionService2Impl implement public static class MediaLibrarySessionImpl extends MediaSession2Impl public static class MediaLibrarySessionImpl extends MediaSession2Impl implements MediaLibrarySessionProvider { implements MediaLibrarySessionProvider { public MediaLibrarySessionImpl(Context context, public MediaLibrarySessionImpl(Context context, MediaPlayerInterface player, String id, VolumeProvider2 volumeProvider, MediaPlayerBase player, String id, VolumeProvider2 volumeProvider, PendingIntent sessionActivity, Executor callbackExecutor, PendingIntent sessionActivity, Executor callbackExecutor, MediaLibrarySessionCallback callback) { MediaLibrarySessionCallback callback) { super(context, player, id, volumeProvider, sessionActivity, callbackExecutor, callback); super(context, player, id, volumeProvider, sessionActivity, callbackExecutor, callback); Loading Loading @@ -130,10 +130,10 @@ public class MediaLibraryService2Impl extends MediaSessionService2Impl implement public static class BuilderImpl public static class BuilderImpl extends BuilderBaseImpl<MediaLibrarySession, MediaLibrarySessionCallback> { extends BuilderBaseImpl<MediaLibrarySession, MediaLibrarySessionCallback> { public BuilderImpl(Context context, MediaLibrarySessionBuilder instance, public BuilderImpl(MediaLibraryService2 service, Builder instance, MediaPlayerInterface player, Executor callbackExecutor, MediaPlayerBase player, Executor callbackExecutor, MediaLibrarySessionCallback callback) { MediaLibrarySessionCallback callback) { super(context, player); super(service, player); setSessionCallback_impl(callbackExecutor, callback); setSessionCallback_impl(callbackExecutor, callback); } } Loading packages/MediaComponents/src/com/android/media/MediaSession2Impl.java +59 −38 Original line number Original line Diff line number Diff line Loading @@ -37,8 +37,8 @@ import android.media.MediaController2.PlaybackInfo; import android.media.MediaItem2; import android.media.MediaItem2; import android.media.MediaLibraryService2; import android.media.MediaLibraryService2; import android.media.MediaMetadata2; import android.media.MediaMetadata2; import android.media.MediaPlayerInterface; import android.media.MediaPlayerBase; import android.media.MediaPlayerInterface.EventCallback; import android.media.MediaPlayerBase.EventCallback; import android.media.MediaSession2; import android.media.MediaSession2; import android.media.MediaSession2.Builder; import android.media.MediaSession2.Builder; import android.media.MediaSession2.Command; import android.media.MediaSession2.Command; Loading Loading @@ -105,7 +105,7 @@ public class MediaSession2Impl implements MediaSession2Provider { // // // TODO(jaewan): Should we put volatile here? // TODO(jaewan): Should we put volatile here? @GuardedBy("mLock") @GuardedBy("mLock") private MediaPlayerInterface mPlayer; private MediaPlayerBase mPlayer; @GuardedBy("mLock") @GuardedBy("mLock") private VolumeProvider2 mVolumeProvider; private VolumeProvider2 mVolumeProvider; @GuardedBy("mLock") @GuardedBy("mLock") Loading @@ -124,7 +124,7 @@ public class MediaSession2Impl implements MediaSession2Provider { * @param callbackExecutor * @param callbackExecutor * @param callback * @param callback */ */ public MediaSession2Impl(Context context, MediaPlayerInterface player, String id, public MediaSession2Impl(Context context, MediaPlayerBase player, String id, VolumeProvider2 volumeProvider, PendingIntent sessionActivity, VolumeProvider2 volumeProvider, PendingIntent sessionActivity, Executor callbackExecutor, SessionCallback callback) { Executor callbackExecutor, SessionCallback callback) { // TODO(jaewan): Keep other params. // TODO(jaewan): Keep other params. Loading Loading @@ -202,7 +202,7 @@ public class MediaSession2Impl implements MediaSession2Provider { } } @Override @Override public void setPlayer_impl(MediaPlayerInterface player) { public void setPlayer_impl(MediaPlayerBase player) { ensureCallingThread(); ensureCallingThread(); if (player == null) { if (player == null) { throw new IllegalArgumentException("player shouldn't be null"); throw new IllegalArgumentException("player shouldn't be null"); Loading @@ -211,7 +211,7 @@ public class MediaSession2Impl implements MediaSession2Provider { } } @Override @Override public void setPlayer_impl(MediaPlayerInterface player, VolumeProvider2 volumeProvider) public void setPlayer_impl(MediaPlayerBase player, VolumeProvider2 volumeProvider) throws IllegalArgumentException { throws IllegalArgumentException { ensureCallingThread(); ensureCallingThread(); if (player == null) { if (player == null) { Loading @@ -223,7 +223,7 @@ public class MediaSession2Impl implements MediaSession2Provider { setPlayer(player, volumeProvider); setPlayer(player, volumeProvider); } } private void setPlayer(MediaPlayerInterface player, VolumeProvider2 volumeProvider) { private void setPlayer(MediaPlayerBase player, VolumeProvider2 volumeProvider) { final PlaybackInfo info = createPlaybackInfo(volumeProvider, player.getAudioAttributes()); final PlaybackInfo info = createPlaybackInfo(volumeProvider, player.getAudioAttributes()); synchronized (mLock) { synchronized (mLock) { if (mPlayer != null && mEventCallback != null) { if (mPlayer != null && mEventCallback != null) { Loading Loading @@ -300,7 +300,7 @@ public class MediaSession2Impl implements MediaSession2Provider { } } @Override @Override public MediaPlayerInterface getPlayer_impl() { public MediaPlayerBase getPlayer_impl() { return getPlayer(); return getPlayer(); } } Loading @@ -323,7 +323,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void play_impl() { public void play_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.play(); player.play(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -334,7 +334,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void pause_impl() { public void pause_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.pause(); player.pause(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -345,7 +345,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void stop_impl() { public void stop_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.stop(); player.stop(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -356,7 +356,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void skipToPrevious_impl() { public void skipToPrevious_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.skipToPrevious(); player.skipToPrevious(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -367,7 +367,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void skipToNext_impl() { public void skipToNext_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.skipToNext(); player.skipToNext(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -393,7 +393,7 @@ public class MediaSession2Impl implements MediaSession2Provider { throw new IllegalArgumentException("params shouldn't be null"); throw new IllegalArgumentException("params shouldn't be null"); } } ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.setPlaylistParams(params); player.setPlaylistParams(params); mSessionStub.notifyPlaylistParamsChanged(params); mSessionStub.notifyPlaylistParamsChanged(params); Loading @@ -402,7 +402,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public PlaylistParams getPlaylistParams_impl() { public PlaylistParams getPlaylistParams_impl() { final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { // TODO(jaewan): Is it safe to be called on any thread? // TODO(jaewan): Is it safe to be called on any thread? // Otherwise MediaSession2 should cache parameter of setPlaylistParams. // Otherwise MediaSession2 should cache parameter of setPlaylistParams. Loading @@ -422,11 +422,6 @@ public class MediaSession2Impl implements MediaSession2Provider { // TODO(jaewan): Implement // TODO(jaewan): Implement } } @Override public void notifyMetadataChanged_impl() { // TODO(jaewan): Implement } @Override @Override public void sendCustomCommand_impl(ControllerInfo controller, Command command, Bundle args, public void sendCustomCommand_impl(ControllerInfo controller, Command command, Bundle args, ResultReceiver receiver) { ResultReceiver receiver) { Loading @@ -444,7 +439,7 @@ public class MediaSession2Impl implements MediaSession2Provider { throw new IllegalArgumentException("playlist shouldn't be null"); throw new IllegalArgumentException("playlist shouldn't be null"); } } ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.setPlaylist(playlist); player.setPlaylist(playlist); mSessionStub.notifyPlaylistChanged(playlist); mSessionStub.notifyPlaylistChanged(playlist); Loading @@ -453,9 +448,24 @@ public class MediaSession2Impl implements MediaSession2Provider { } } } } @Override public void addPlaylistItem_impl(int index, MediaItem2 item) { // TODO(jaewan): Implement } @Override public void removePlaylistItem_impl(MediaItem2 item) { // TODO(jaewan): Implement } @Override public void editPlaylistItem_impl(MediaItem2 item) { // TODO(jaewan): Implement } @Override @Override public List<MediaItem2> getPlaylist_impl() { public List<MediaItem2> getPlaylist_impl() { final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { // TODO(jaewan): Is it safe to be called on any thread? // TODO(jaewan): Is it safe to be called on any thread? // Otherwise MediaSession2 should cache parameter of setPlaylist. // Otherwise MediaSession2 should cache parameter of setPlaylist. Loading @@ -466,10 +476,16 @@ public class MediaSession2Impl implements MediaSession2Provider { return null; return null; } } @Override public MediaItem2 getCurrentPlaylistItem_impl() { // TODO(jaewan): Implement return null; } @Override @Override public void prepare_impl() { public void prepare_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.prepare(); player.prepare(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -480,7 +496,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void fastForward_impl() { public void fastForward_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.fastForward(); player.fastForward(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -491,7 +507,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void rewind_impl() { public void rewind_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.rewind(); player.rewind(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -502,7 +518,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void seekTo_impl(long pos) { public void seekTo_impl(long pos) { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.seekTo(pos); player.seekTo(pos); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -511,11 +527,11 @@ public class MediaSession2Impl implements MediaSession2Provider { } } @Override @Override public void setCurrentPlaylistItem_impl(int index) { public void skipToPlaylistItem_impl(MediaItem2 item) { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.setCurrentPlaylistItem(index); player.setCurrentPlaylistItem(item); } else if (DEBUG) { } else if (DEBUG) { Log.d(TAG, "API calls after the close()", new IllegalStateException()); Log.d(TAG, "API calls after the close()", new IllegalStateException()); } } Loading Loading @@ -552,7 +568,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public PlaybackState2 getPlaybackState_impl() { public PlaybackState2 getPlaybackState_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { // TODO(jaewan): Is it safe to be called on any thread? // TODO(jaewan): Is it safe to be called on any thread? // Otherwise MediaSession2 should cache the result from listener. // Otherwise MediaSession2 should cache the result from listener. Loading @@ -563,6 +579,11 @@ public class MediaSession2Impl implements MediaSession2Provider { return null; return null; } } @Override public void notifyError_impl(int errorCode, int extra) { // TODO(jaewan): Implement } /////////////////////////////////////////////////// /////////////////////////////////////////////////// // Protected or private methods // Protected or private methods /////////////////////////////////////////////////// /////////////////////////////////////////////////// Loading Loading @@ -624,7 +645,7 @@ public class MediaSession2Impl implements MediaSession2Provider { return mInstance; return mInstance; } } MediaPlayerInterface getPlayer() { MediaPlayerBase getPlayer() { return mPlayer; return mPlayer; } } Loading Loading @@ -654,11 +675,11 @@ public class MediaSession2Impl implements MediaSession2Provider { return mSessionActivity; return mSessionActivity; } } private static class MyEventCallback implements EventCallback { private static class MyEventCallback extends EventCallback { private final WeakReference<MediaSession2Impl> mSession; private final WeakReference<MediaSession2Impl> mSession; private final MediaPlayerInterface mPlayer; private final MediaPlayerBase mPlayer; private MyEventCallback(MediaSession2Impl session, MediaPlayerInterface player) { private MyEventCallback(MediaSession2Impl session, MediaPlayerBase player) { mSession = new WeakReference<>(session); mSession = new WeakReference<>(session); mPlayer = player; mPlayer = player; } } Loading Loading @@ -1195,7 +1216,7 @@ public class MediaSession2Impl implements MediaSession2Provider { public static abstract class BuilderBaseImpl<T extends MediaSession2, C extends SessionCallback> public static abstract class BuilderBaseImpl<T extends MediaSession2, C extends SessionCallback> implements BuilderBaseProvider<T, C> { implements BuilderBaseProvider<T, C> { final Context mContext; final Context mContext; final MediaPlayerInterface mPlayer; final MediaPlayerBase mPlayer; String mId; String mId; Executor mCallbackExecutor; Executor mCallbackExecutor; C mCallback; C mCallback; Loading @@ -1211,7 +1232,7 @@ public class MediaSession2Impl implements MediaSession2Provider { * {@link MediaSession2} or {@link MediaController2}. * {@link MediaSession2} or {@link MediaController2}. */ */ // TODO(jaewan): Also need executor // TODO(jaewan): Also need executor public BuilderBaseImpl(Context context, MediaPlayerInterface player) { public BuilderBaseImpl(Context context, MediaPlayerBase player) { if (context == null) { if (context == null) { throw new IllegalArgumentException("context shouldn't be null"); throw new IllegalArgumentException("context shouldn't be null"); } } Loading Loading @@ -1254,7 +1275,7 @@ public class MediaSession2Impl implements MediaSession2Provider { } } public static class BuilderImpl extends BuilderBaseImpl<MediaSession2, SessionCallback> { public static class BuilderImpl extends BuilderBaseImpl<MediaSession2, SessionCallback> { public BuilderImpl(Context context, Builder instance, MediaPlayerInterface player) { public BuilderImpl(Context context, Builder instance, MediaPlayerBase player) { super(context, player); super(context, player); } } Loading @@ -1264,7 +1285,7 @@ public class MediaSession2Impl implements MediaSession2Provider { mCallbackExecutor = mContext.getMainExecutor(); mCallbackExecutor = mContext.getMainExecutor(); } } if (mCallback == null) { if (mCallback == null) { mCallback = new SessionCallback(mContext); mCallback = new SessionCallback(mContext) {}; } } return new MediaSession2Impl(mContext, mPlayer, mId, mVolumeProvider, return new MediaSession2Impl(mContext, mPlayer, mId, mVolumeProvider, Loading packages/MediaComponents/src/com/android/media/MediaSession2Stub.java +4 −1 Original line number Original line Diff line number Diff line Loading @@ -357,8 +357,11 @@ public class MediaSession2Stub extends IMediaSession2.Stub { session.getInstance().seekTo(args.getLong(ARGUMENT_KEY_POSITION)); session.getInstance().seekTo(args.getLong(ARGUMENT_KEY_POSITION)); break; break; case MediaSession2.COMMAND_CODE_PLAYBACK_SET_CURRENT_PLAYLIST_ITEM: case MediaSession2.COMMAND_CODE_PLAYBACK_SET_CURRENT_PLAYLIST_ITEM: session.getInstance().setCurrentPlaylistItem( // TODO(jaewan): Implement /* session.getInstance().skipToPlaylistItem( args.getInt(ARGUMENT_KEY_ITEM_INDEX)); args.getInt(ARGUMENT_KEY_ITEM_INDEX)); */ break; break; case MediaSession2.COMMAND_CODE_PLAYBACK_SET_PLAYLIST_PARAMS: case MediaSession2.COMMAND_CODE_PLAYBACK_SET_PLAYLIST_PARAMS: session.getInstance().setPlaylistParams( session.getInstance().setPlaylistParams( Loading packages/MediaComponents/src/com/android/media/MediaSessionService2Impl.java +5 −5 Original line number Original line Diff line number Diff line Loading @@ -22,7 +22,7 @@ import android.app.Notification; import android.app.NotificationManager; import android.app.NotificationManager; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.media.MediaPlayerInterface.EventCallback; import android.media.MediaPlayerBase.EventCallback; import android.media.MediaSession2; import android.media.MediaSession2; import android.media.MediaSessionService2; import android.media.MediaSessionService2; import android.media.MediaSessionService2.MediaNotification; import android.media.MediaSessionService2.MediaNotification; Loading Loading @@ -72,7 +72,7 @@ public class MediaSessionService2Impl implements MediaSessionService2Provider { } } @Override @Override public MediaNotification onUpdateNotification_impl(PlaybackState2 state) { public MediaNotification onUpdateNotification_impl() { // Provide default notification UI later. // Provide default notification UI later. return null; return null; } } Loading Loading @@ -109,7 +109,7 @@ public class MediaSessionService2Impl implements MediaSessionService2Provider { } } private void updateNotification(PlaybackState2 state) { private void updateNotification(PlaybackState2 state) { MediaNotification mediaNotification = mInstance.onUpdateNotification(state); MediaNotification mediaNotification = mInstance.onUpdateNotification(); if (mediaNotification == null) { if (mediaNotification == null) { return; return; } } Loading @@ -135,7 +135,7 @@ public class MediaSessionService2Impl implements MediaSessionService2Provider { mediaNotification.getNotification()); mediaNotification.getNotification()); } } private class SessionServiceEventCallback implements EventCallback { private class SessionServiceEventCallback extends EventCallback { @Override @Override public void onPlaybackStateChanged(PlaybackState2 state) { public void onPlaybackStateChanged(PlaybackState2 state) { if (state == null) { if (state == null) { Loading @@ -143,7 +143,7 @@ public class MediaSessionService2Impl implements MediaSessionService2Provider { return; return; } } MediaSession2Impl impl = (MediaSession2Impl) mSession.getProvider(); MediaSession2Impl impl = (MediaSession2Impl) mSession.getProvider(); updateNotification(state); updateNotification(impl.getInstance().getPlaybackState()); } } } } Loading Loading
packages/MediaComponents/src/com/android/media/MediaController2Impl.java +36 −3 Original line number Original line Diff line number Diff line Loading @@ -465,11 +465,14 @@ public class MediaController2Impl implements MediaController2Provider { } } @Override @Override public void setCurrentPlaylistItem_impl(int index) { public void skipToPlaylistItem_impl(MediaItem2 item) { // TODO(jaewan): Implement this /* Bundle args = new Bundle(); Bundle args = new Bundle(); args.putInt(MediaSession2Stub.ARGUMENT_KEY_ITEM_INDEX, index); args.putInt(MediaSession2Stub.ARGUMENT_KEY_ITEM_INDEX, item); sendTransportControlCommand( sendTransportControlCommand( MediaSession2.COMMAND_CODE_PLAYBACK_SET_CURRENT_PLAYLIST_ITEM, args); MediaSession2.COMMAND_CODE_PLAYBACK_SET_CURRENT_PLAYLIST_ITEM, args); */ } } @Override @Override Loading Loading @@ -513,6 +516,36 @@ public class MediaController2Impl implements MediaController2Provider { sendTransportControlCommand(MediaSession2.COMMAND_CODE_PLAYBACK_SET_PLAYLIST_PARAMS, args); sendTransportControlCommand(MediaSession2.COMMAND_CODE_PLAYBACK_SET_PLAYLIST_PARAMS, args); } } @Override public int getPlayerState_impl() { // TODO(jaewan): Implement return 0; } @Override public long getPosition_impl() { // TODO(jaewan): Implement return 0; } @Override public float getPlaybackSpeed_impl() { // TODO(jaewan): Implement return 0; } @Override public long getBufferedPosition_impl() { // TODO(jaewan): Implement return 0; } @Override public MediaItem2 getCurrentPlaylistItem_impl() { // TODO(jaewan): Implement return null; } void pushPlaybackStateChanges(final PlaybackState2 state) { void pushPlaybackStateChanges(final PlaybackState2 state) { synchronized (mLock) { synchronized (mLock) { mPlaybackState = state; mPlaybackState = state; Loading
packages/MediaComponents/src/com/android/media/MediaLibraryService2Impl.java +7 −7 Original line number Original line Diff line number Diff line Loading @@ -21,9 +21,9 @@ import android.content.Context; import android.media.MediaLibraryService2; import android.media.MediaLibraryService2; import android.media.MediaLibraryService2.LibraryRoot; import android.media.MediaLibraryService2.LibraryRoot; import android.media.MediaLibraryService2.MediaLibrarySession; import android.media.MediaLibraryService2.MediaLibrarySession; import android.media.MediaLibraryService2.MediaLibrarySessionBuilder; import android.media.MediaLibraryService2.MediaLibrarySession.Builder; import android.media.MediaLibraryService2.MediaLibrarySessionCallback; import android.media.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback; import android.media.MediaPlayerInterface; import android.media.MediaPlayerBase; import android.media.MediaSession2; import android.media.MediaSession2; import android.media.MediaSession2.ControllerInfo; import android.media.MediaSession2.ControllerInfo; import android.media.MediaSessionService2; import android.media.MediaSessionService2; Loading Loading @@ -67,7 +67,7 @@ public class MediaLibraryService2Impl extends MediaSessionService2Impl implement public static class MediaLibrarySessionImpl extends MediaSession2Impl public static class MediaLibrarySessionImpl extends MediaSession2Impl implements MediaLibrarySessionProvider { implements MediaLibrarySessionProvider { public MediaLibrarySessionImpl(Context context, public MediaLibrarySessionImpl(Context context, MediaPlayerInterface player, String id, VolumeProvider2 volumeProvider, MediaPlayerBase player, String id, VolumeProvider2 volumeProvider, PendingIntent sessionActivity, Executor callbackExecutor, PendingIntent sessionActivity, Executor callbackExecutor, MediaLibrarySessionCallback callback) { MediaLibrarySessionCallback callback) { super(context, player, id, volumeProvider, sessionActivity, callbackExecutor, callback); super(context, player, id, volumeProvider, sessionActivity, callbackExecutor, callback); Loading Loading @@ -130,10 +130,10 @@ public class MediaLibraryService2Impl extends MediaSessionService2Impl implement public static class BuilderImpl public static class BuilderImpl extends BuilderBaseImpl<MediaLibrarySession, MediaLibrarySessionCallback> { extends BuilderBaseImpl<MediaLibrarySession, MediaLibrarySessionCallback> { public BuilderImpl(Context context, MediaLibrarySessionBuilder instance, public BuilderImpl(MediaLibraryService2 service, Builder instance, MediaPlayerInterface player, Executor callbackExecutor, MediaPlayerBase player, Executor callbackExecutor, MediaLibrarySessionCallback callback) { MediaLibrarySessionCallback callback) { super(context, player); super(service, player); setSessionCallback_impl(callbackExecutor, callback); setSessionCallback_impl(callbackExecutor, callback); } } Loading
packages/MediaComponents/src/com/android/media/MediaSession2Impl.java +59 −38 Original line number Original line Diff line number Diff line Loading @@ -37,8 +37,8 @@ import android.media.MediaController2.PlaybackInfo; import android.media.MediaItem2; import android.media.MediaItem2; import android.media.MediaLibraryService2; import android.media.MediaLibraryService2; import android.media.MediaMetadata2; import android.media.MediaMetadata2; import android.media.MediaPlayerInterface; import android.media.MediaPlayerBase; import android.media.MediaPlayerInterface.EventCallback; import android.media.MediaPlayerBase.EventCallback; import android.media.MediaSession2; import android.media.MediaSession2; import android.media.MediaSession2.Builder; import android.media.MediaSession2.Builder; import android.media.MediaSession2.Command; import android.media.MediaSession2.Command; Loading Loading @@ -105,7 +105,7 @@ public class MediaSession2Impl implements MediaSession2Provider { // // // TODO(jaewan): Should we put volatile here? // TODO(jaewan): Should we put volatile here? @GuardedBy("mLock") @GuardedBy("mLock") private MediaPlayerInterface mPlayer; private MediaPlayerBase mPlayer; @GuardedBy("mLock") @GuardedBy("mLock") private VolumeProvider2 mVolumeProvider; private VolumeProvider2 mVolumeProvider; @GuardedBy("mLock") @GuardedBy("mLock") Loading @@ -124,7 +124,7 @@ public class MediaSession2Impl implements MediaSession2Provider { * @param callbackExecutor * @param callbackExecutor * @param callback * @param callback */ */ public MediaSession2Impl(Context context, MediaPlayerInterface player, String id, public MediaSession2Impl(Context context, MediaPlayerBase player, String id, VolumeProvider2 volumeProvider, PendingIntent sessionActivity, VolumeProvider2 volumeProvider, PendingIntent sessionActivity, Executor callbackExecutor, SessionCallback callback) { Executor callbackExecutor, SessionCallback callback) { // TODO(jaewan): Keep other params. // TODO(jaewan): Keep other params. Loading Loading @@ -202,7 +202,7 @@ public class MediaSession2Impl implements MediaSession2Provider { } } @Override @Override public void setPlayer_impl(MediaPlayerInterface player) { public void setPlayer_impl(MediaPlayerBase player) { ensureCallingThread(); ensureCallingThread(); if (player == null) { if (player == null) { throw new IllegalArgumentException("player shouldn't be null"); throw new IllegalArgumentException("player shouldn't be null"); Loading @@ -211,7 +211,7 @@ public class MediaSession2Impl implements MediaSession2Provider { } } @Override @Override public void setPlayer_impl(MediaPlayerInterface player, VolumeProvider2 volumeProvider) public void setPlayer_impl(MediaPlayerBase player, VolumeProvider2 volumeProvider) throws IllegalArgumentException { throws IllegalArgumentException { ensureCallingThread(); ensureCallingThread(); if (player == null) { if (player == null) { Loading @@ -223,7 +223,7 @@ public class MediaSession2Impl implements MediaSession2Provider { setPlayer(player, volumeProvider); setPlayer(player, volumeProvider); } } private void setPlayer(MediaPlayerInterface player, VolumeProvider2 volumeProvider) { private void setPlayer(MediaPlayerBase player, VolumeProvider2 volumeProvider) { final PlaybackInfo info = createPlaybackInfo(volumeProvider, player.getAudioAttributes()); final PlaybackInfo info = createPlaybackInfo(volumeProvider, player.getAudioAttributes()); synchronized (mLock) { synchronized (mLock) { if (mPlayer != null && mEventCallback != null) { if (mPlayer != null && mEventCallback != null) { Loading Loading @@ -300,7 +300,7 @@ public class MediaSession2Impl implements MediaSession2Provider { } } @Override @Override public MediaPlayerInterface getPlayer_impl() { public MediaPlayerBase getPlayer_impl() { return getPlayer(); return getPlayer(); } } Loading @@ -323,7 +323,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void play_impl() { public void play_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.play(); player.play(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -334,7 +334,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void pause_impl() { public void pause_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.pause(); player.pause(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -345,7 +345,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void stop_impl() { public void stop_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.stop(); player.stop(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -356,7 +356,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void skipToPrevious_impl() { public void skipToPrevious_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.skipToPrevious(); player.skipToPrevious(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -367,7 +367,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void skipToNext_impl() { public void skipToNext_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.skipToNext(); player.skipToNext(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -393,7 +393,7 @@ public class MediaSession2Impl implements MediaSession2Provider { throw new IllegalArgumentException("params shouldn't be null"); throw new IllegalArgumentException("params shouldn't be null"); } } ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.setPlaylistParams(params); player.setPlaylistParams(params); mSessionStub.notifyPlaylistParamsChanged(params); mSessionStub.notifyPlaylistParamsChanged(params); Loading @@ -402,7 +402,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public PlaylistParams getPlaylistParams_impl() { public PlaylistParams getPlaylistParams_impl() { final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { // TODO(jaewan): Is it safe to be called on any thread? // TODO(jaewan): Is it safe to be called on any thread? // Otherwise MediaSession2 should cache parameter of setPlaylistParams. // Otherwise MediaSession2 should cache parameter of setPlaylistParams. Loading @@ -422,11 +422,6 @@ public class MediaSession2Impl implements MediaSession2Provider { // TODO(jaewan): Implement // TODO(jaewan): Implement } } @Override public void notifyMetadataChanged_impl() { // TODO(jaewan): Implement } @Override @Override public void sendCustomCommand_impl(ControllerInfo controller, Command command, Bundle args, public void sendCustomCommand_impl(ControllerInfo controller, Command command, Bundle args, ResultReceiver receiver) { ResultReceiver receiver) { Loading @@ -444,7 +439,7 @@ public class MediaSession2Impl implements MediaSession2Provider { throw new IllegalArgumentException("playlist shouldn't be null"); throw new IllegalArgumentException("playlist shouldn't be null"); } } ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.setPlaylist(playlist); player.setPlaylist(playlist); mSessionStub.notifyPlaylistChanged(playlist); mSessionStub.notifyPlaylistChanged(playlist); Loading @@ -453,9 +448,24 @@ public class MediaSession2Impl implements MediaSession2Provider { } } } } @Override public void addPlaylistItem_impl(int index, MediaItem2 item) { // TODO(jaewan): Implement } @Override public void removePlaylistItem_impl(MediaItem2 item) { // TODO(jaewan): Implement } @Override public void editPlaylistItem_impl(MediaItem2 item) { // TODO(jaewan): Implement } @Override @Override public List<MediaItem2> getPlaylist_impl() { public List<MediaItem2> getPlaylist_impl() { final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { // TODO(jaewan): Is it safe to be called on any thread? // TODO(jaewan): Is it safe to be called on any thread? // Otherwise MediaSession2 should cache parameter of setPlaylist. // Otherwise MediaSession2 should cache parameter of setPlaylist. Loading @@ -466,10 +476,16 @@ public class MediaSession2Impl implements MediaSession2Provider { return null; return null; } } @Override public MediaItem2 getCurrentPlaylistItem_impl() { // TODO(jaewan): Implement return null; } @Override @Override public void prepare_impl() { public void prepare_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.prepare(); player.prepare(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -480,7 +496,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void fastForward_impl() { public void fastForward_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.fastForward(); player.fastForward(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -491,7 +507,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void rewind_impl() { public void rewind_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.rewind(); player.rewind(); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -502,7 +518,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public void seekTo_impl(long pos) { public void seekTo_impl(long pos) { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.seekTo(pos); player.seekTo(pos); } else if (DEBUG) { } else if (DEBUG) { Loading @@ -511,11 +527,11 @@ public class MediaSession2Impl implements MediaSession2Provider { } } @Override @Override public void setCurrentPlaylistItem_impl(int index) { public void skipToPlaylistItem_impl(MediaItem2 item) { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { player.setCurrentPlaylistItem(index); player.setCurrentPlaylistItem(item); } else if (DEBUG) { } else if (DEBUG) { Log.d(TAG, "API calls after the close()", new IllegalStateException()); Log.d(TAG, "API calls after the close()", new IllegalStateException()); } } Loading Loading @@ -552,7 +568,7 @@ public class MediaSession2Impl implements MediaSession2Provider { @Override @Override public PlaybackState2 getPlaybackState_impl() { public PlaybackState2 getPlaybackState_impl() { ensureCallingThread(); ensureCallingThread(); final MediaPlayerInterface player = mPlayer; final MediaPlayerBase player = mPlayer; if (player != null) { if (player != null) { // TODO(jaewan): Is it safe to be called on any thread? // TODO(jaewan): Is it safe to be called on any thread? // Otherwise MediaSession2 should cache the result from listener. // Otherwise MediaSession2 should cache the result from listener. Loading @@ -563,6 +579,11 @@ public class MediaSession2Impl implements MediaSession2Provider { return null; return null; } } @Override public void notifyError_impl(int errorCode, int extra) { // TODO(jaewan): Implement } /////////////////////////////////////////////////// /////////////////////////////////////////////////// // Protected or private methods // Protected or private methods /////////////////////////////////////////////////// /////////////////////////////////////////////////// Loading Loading @@ -624,7 +645,7 @@ public class MediaSession2Impl implements MediaSession2Provider { return mInstance; return mInstance; } } MediaPlayerInterface getPlayer() { MediaPlayerBase getPlayer() { return mPlayer; return mPlayer; } } Loading Loading @@ -654,11 +675,11 @@ public class MediaSession2Impl implements MediaSession2Provider { return mSessionActivity; return mSessionActivity; } } private static class MyEventCallback implements EventCallback { private static class MyEventCallback extends EventCallback { private final WeakReference<MediaSession2Impl> mSession; private final WeakReference<MediaSession2Impl> mSession; private final MediaPlayerInterface mPlayer; private final MediaPlayerBase mPlayer; private MyEventCallback(MediaSession2Impl session, MediaPlayerInterface player) { private MyEventCallback(MediaSession2Impl session, MediaPlayerBase player) { mSession = new WeakReference<>(session); mSession = new WeakReference<>(session); mPlayer = player; mPlayer = player; } } Loading Loading @@ -1195,7 +1216,7 @@ public class MediaSession2Impl implements MediaSession2Provider { public static abstract class BuilderBaseImpl<T extends MediaSession2, C extends SessionCallback> public static abstract class BuilderBaseImpl<T extends MediaSession2, C extends SessionCallback> implements BuilderBaseProvider<T, C> { implements BuilderBaseProvider<T, C> { final Context mContext; final Context mContext; final MediaPlayerInterface mPlayer; final MediaPlayerBase mPlayer; String mId; String mId; Executor mCallbackExecutor; Executor mCallbackExecutor; C mCallback; C mCallback; Loading @@ -1211,7 +1232,7 @@ public class MediaSession2Impl implements MediaSession2Provider { * {@link MediaSession2} or {@link MediaController2}. * {@link MediaSession2} or {@link MediaController2}. */ */ // TODO(jaewan): Also need executor // TODO(jaewan): Also need executor public BuilderBaseImpl(Context context, MediaPlayerInterface player) { public BuilderBaseImpl(Context context, MediaPlayerBase player) { if (context == null) { if (context == null) { throw new IllegalArgumentException("context shouldn't be null"); throw new IllegalArgumentException("context shouldn't be null"); } } Loading Loading @@ -1254,7 +1275,7 @@ public class MediaSession2Impl implements MediaSession2Provider { } } public static class BuilderImpl extends BuilderBaseImpl<MediaSession2, SessionCallback> { public static class BuilderImpl extends BuilderBaseImpl<MediaSession2, SessionCallback> { public BuilderImpl(Context context, Builder instance, MediaPlayerInterface player) { public BuilderImpl(Context context, Builder instance, MediaPlayerBase player) { super(context, player); super(context, player); } } Loading @@ -1264,7 +1285,7 @@ public class MediaSession2Impl implements MediaSession2Provider { mCallbackExecutor = mContext.getMainExecutor(); mCallbackExecutor = mContext.getMainExecutor(); } } if (mCallback == null) { if (mCallback == null) { mCallback = new SessionCallback(mContext); mCallback = new SessionCallback(mContext) {}; } } return new MediaSession2Impl(mContext, mPlayer, mId, mVolumeProvider, return new MediaSession2Impl(mContext, mPlayer, mId, mVolumeProvider, Loading
packages/MediaComponents/src/com/android/media/MediaSession2Stub.java +4 −1 Original line number Original line Diff line number Diff line Loading @@ -357,8 +357,11 @@ public class MediaSession2Stub extends IMediaSession2.Stub { session.getInstance().seekTo(args.getLong(ARGUMENT_KEY_POSITION)); session.getInstance().seekTo(args.getLong(ARGUMENT_KEY_POSITION)); break; break; case MediaSession2.COMMAND_CODE_PLAYBACK_SET_CURRENT_PLAYLIST_ITEM: case MediaSession2.COMMAND_CODE_PLAYBACK_SET_CURRENT_PLAYLIST_ITEM: session.getInstance().setCurrentPlaylistItem( // TODO(jaewan): Implement /* session.getInstance().skipToPlaylistItem( args.getInt(ARGUMENT_KEY_ITEM_INDEX)); args.getInt(ARGUMENT_KEY_ITEM_INDEX)); */ break; break; case MediaSession2.COMMAND_CODE_PLAYBACK_SET_PLAYLIST_PARAMS: case MediaSession2.COMMAND_CODE_PLAYBACK_SET_PLAYLIST_PARAMS: session.getInstance().setPlaylistParams( session.getInstance().setPlaylistParams( Loading
packages/MediaComponents/src/com/android/media/MediaSessionService2Impl.java +5 −5 Original line number Original line Diff line number Diff line Loading @@ -22,7 +22,7 @@ import android.app.Notification; import android.app.NotificationManager; import android.app.NotificationManager; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.media.MediaPlayerInterface.EventCallback; import android.media.MediaPlayerBase.EventCallback; import android.media.MediaSession2; import android.media.MediaSession2; import android.media.MediaSessionService2; import android.media.MediaSessionService2; import android.media.MediaSessionService2.MediaNotification; import android.media.MediaSessionService2.MediaNotification; Loading Loading @@ -72,7 +72,7 @@ public class MediaSessionService2Impl implements MediaSessionService2Provider { } } @Override @Override public MediaNotification onUpdateNotification_impl(PlaybackState2 state) { public MediaNotification onUpdateNotification_impl() { // Provide default notification UI later. // Provide default notification UI later. return null; return null; } } Loading Loading @@ -109,7 +109,7 @@ public class MediaSessionService2Impl implements MediaSessionService2Provider { } } private void updateNotification(PlaybackState2 state) { private void updateNotification(PlaybackState2 state) { MediaNotification mediaNotification = mInstance.onUpdateNotification(state); MediaNotification mediaNotification = mInstance.onUpdateNotification(); if (mediaNotification == null) { if (mediaNotification == null) { return; return; } } Loading @@ -135,7 +135,7 @@ public class MediaSessionService2Impl implements MediaSessionService2Provider { mediaNotification.getNotification()); mediaNotification.getNotification()); } } private class SessionServiceEventCallback implements EventCallback { private class SessionServiceEventCallback extends EventCallback { @Override @Override public void onPlaybackStateChanged(PlaybackState2 state) { public void onPlaybackStateChanged(PlaybackState2 state) { if (state == null) { if (state == null) { Loading @@ -143,7 +143,7 @@ public class MediaSessionService2Impl implements MediaSessionService2Provider { return; return; } } MediaSession2Impl impl = (MediaSession2Impl) mSession.getProvider(); MediaSession2Impl impl = (MediaSession2Impl) mSession.getProvider(); updateNotification(state); updateNotification(impl.getInstance().getPlaybackState()); } } } } Loading