diff options
| author | P.Y. Laligand <pylaligand@google.com> | 2015-03-25 14:51:50 -0700 |
|---|---|---|
| committer | P.Y. Laligand <pylaligand@google.com> | 2015-03-25 14:51:50 -0700 |
| commit | c2045470a343923b0d74ddbd6a6b80fcf6652d66 (patch) | |
| tree | 8be01b950c8a3321862b3bd43f81ef3b536dfa19 | |
| parent | d1af05efb0ae653cd9507c48b715290a1a6bb1c6 (diff) | |
| download | frameworks_base-c2045470a343923b0d74ddbd6a6b80fcf6652d66.zip frameworks_base-c2045470a343923b0d74ddbd6a6b80fcf6652d66.tar.gz frameworks_base-c2045470a343923b0d74ddbd6a6b80fcf6652d66.tar.bz2 | |
Added MediaController.TransportControls#playFromUri.
b/19622238
Change-Id: I75d6258ccafb2266d5f8bdf3a279b3a2e9ef2bbf
| -rw-r--r-- | api/current.txt | 3 | ||||
| -rw-r--r-- | api/system-current.txt | 3 | ||||
| -rw-r--r-- | media/java/android/media/session/ISessionCallback.aidl | 5 | ||||
| -rw-r--r-- | media/java/android/media/session/ISessionController.aidl | 5 | ||||
| -rw-r--r-- | media/java/android/media/session/MediaController.java | 23 | ||||
| -rw-r--r-- | media/java/android/media/session/MediaSession.java | 23 | ||||
| -rw-r--r-- | media/java/android/media/session/PlaybackState.java | 17 | ||||
| -rw-r--r-- | services/core/java/com/android/server/media/MediaSessionRecord.java | 14 |
8 files changed, 87 insertions, 6 deletions
diff --git a/api/current.txt b/api/current.txt index 0a23541..784245a 100644 --- a/api/current.txt +++ b/api/current.txt @@ -17061,6 +17061,7 @@ package android.media.session { method public void play(); method public void playFromMediaId(java.lang.String, android.os.Bundle); method public void playFromSearch(java.lang.String, android.os.Bundle); + method public void playFromUri(android.net.Uri, android.os.Bundle); method public void rewind(); method public void seekTo(long); method public void sendCustomAction(android.media.session.PlaybackState.CustomAction, android.os.Bundle); @@ -17108,6 +17109,7 @@ package android.media.session { method public void onPlay(); method public void onPlayFromMediaId(java.lang.String, android.os.Bundle); method public void onPlayFromSearch(java.lang.String, android.os.Bundle); + method public void onPlayFromUri(android.net.Uri, android.os.Bundle); method public void onRewind(); method public void onSeekTo(long); method public void onSetRating(android.media.Rating); @@ -17162,6 +17164,7 @@ package android.media.session { field public static final long ACTION_PLAY = 4L; // 0x4L field public static final long ACTION_PLAY_FROM_MEDIA_ID = 1024L; // 0x400L field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L + field public static final long ACTION_PLAY_FROM_URI = 8192L; // 0x2000L field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L field public static final long ACTION_REWIND = 8L; // 0x8L field public static final long ACTION_SEEK_TO = 256L; // 0x100L diff --git a/api/system-current.txt b/api/system-current.txt index d934348..6bcd2c6 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -18326,6 +18326,7 @@ package android.media.session { method public void play(); method public void playFromMediaId(java.lang.String, android.os.Bundle); method public void playFromSearch(java.lang.String, android.os.Bundle); + method public void playFromUri(android.net.Uri, android.os.Bundle); method public void rewind(); method public void seekTo(long); method public void sendCustomAction(android.media.session.PlaybackState.CustomAction, android.os.Bundle); @@ -18373,6 +18374,7 @@ package android.media.session { method public void onPlay(); method public void onPlayFromMediaId(java.lang.String, android.os.Bundle); method public void onPlayFromSearch(java.lang.String, android.os.Bundle); + method public void onPlayFromUri(android.net.Uri, android.os.Bundle); method public void onRewind(); method public void onSeekTo(long); method public void onSetRating(android.media.Rating); @@ -18427,6 +18429,7 @@ package android.media.session { field public static final long ACTION_PLAY = 4L; // 0x4L field public static final long ACTION_PLAY_FROM_MEDIA_ID = 1024L; // 0x400L field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L + field public static final long ACTION_PLAY_FROM_URI = 8192L; // 0x2000L field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L field public static final long ACTION_REWIND = 8L; // 0x8L field public static final long ACTION_SEEK_TO = 256L; // 0x100L diff --git a/media/java/android/media/session/ISessionCallback.aidl b/media/java/android/media/session/ISessionCallback.aidl index 49087b0..adb6b06 100644 --- a/media/java/android/media/session/ISessionCallback.aidl +++ b/media/java/android/media/session/ISessionCallback.aidl @@ -15,8 +15,8 @@ package android.media.session; -import android.media.Rating; import android.content.Intent; +import android.media.Rating; import android.net.Uri; import android.os.Bundle; import android.os.ResultReceiver; @@ -30,8 +30,9 @@ oneway interface ISessionCallback { // These callbacks are for the TransportPerformer void onPlay(); - void onPlayFromMediaId(String uri, in Bundle extras); + void onPlayFromMediaId(String mediaId, in Bundle extras); void onPlayFromSearch(String query, in Bundle extras); + void onPlayFromUri(in Uri uri, in Bundle extras); void onSkipToTrack(long id); void onPause(); void onStop(); diff --git a/media/java/android/media/session/ISessionController.aidl b/media/java/android/media/session/ISessionController.aidl index e2d06d3..8d58a60 100644 --- a/media/java/android/media/session/ISessionController.aidl +++ b/media/java/android/media/session/ISessionController.aidl @@ -23,9 +23,9 @@ import android.media.Rating; import android.media.routing.IMediaRouterDelegate; import android.media.routing.IMediaRouterStateCallback; import android.media.session.ISessionControllerCallback; +import android.media.session.MediaSession; import android.media.session.ParcelableVolumeInfo; import android.media.session.PlaybackState; -import android.media.session.MediaSession; import android.net.Uri; import android.os.Bundle; import android.os.ResultReceiver; @@ -55,8 +55,9 @@ interface ISessionController { // These commands are for the TransportControls void play(); - void playFromMediaId(String uri, in Bundle extras); + void playFromMediaId(String mediaId, in Bundle extras); void playFromSearch(String string, in Bundle extras); + void playFromUri(in Uri uri, in Bundle extras); void skipToQueueItem(long id); void pause(); void stop(); diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java index c23a139..8def486 100644 --- a/media/java/android/media/session/MediaController.java +++ b/media/java/android/media/session/MediaController.java @@ -615,9 +615,9 @@ public final class MediaController { } /** - * Request that the player start playback for a specific {@link Uri}. + * Request that the player start playback for a specific media id. * - * @param mediaId The uri of the requested media. + * @param mediaId The id of the requested media. * @param extras Optional extras that can include extra information about the media item * to be played. */ @@ -656,6 +656,25 @@ public final class MediaController { } /** + * Request that the player start playback for a specific {@link Uri}. + * + * @param uri The URI of the requested media. + * @param extras Optional extras that can include extra information about the media item + * to be played. + */ + public void playFromUri(Uri uri, Bundle extras) { + if (uri == null || Uri.EMPTY.equals(uri)) { + throw new IllegalArgumentException( + "You must specify a non-empty Uri for playFromUri."); + } + try { + mSessionBinder.playFromUri(uri, extras); + } catch (RemoteException e) { + Log.wtf(TAG, "Error calling play(" + uri + ").", e); + } + } + + /** * Play an item with a specific id in the play queue. If you specify an * id that is not in the play queue, the behavior is undefined. */ diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java index cc602c9..cee82b4 100644 --- a/media/java/android/media/session/MediaSession.java +++ b/media/java/android/media/session/MediaSession.java @@ -30,6 +30,7 @@ import android.media.MediaMetadata; import android.media.Rating; import android.media.VolumeProvider; import android.media.routing.MediaRouter; +import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -541,6 +542,10 @@ public final class MediaSession { postToCallback(CallbackMessageHandler.MSG_PLAY_SEARCH, query, extras); } + private void dispatchPlayFromUri(Uri uri, Bundle extras) { + postToCallback(CallbackMessageHandler.MSG_PLAY_URI, uri, extras); + } + private void dispatchSkipToItem(long id) { postToCallback(CallbackMessageHandler.MSG_SKIP_TO_ITEM, id); } @@ -833,6 +838,12 @@ public final class MediaSession { } /** + * Override to handle requests to play a specific media item represented by a URI. + */ + public void onPlayFromUri(Uri uri, Bundle extras) { + } + + /** * Override to handle requests to play an item with a given id from the * play queue. */ @@ -961,6 +972,14 @@ public final class MediaSession { } @Override + public void onPlayFromUri(Uri uri, Bundle extras) { + MediaSession session = mMediaSession.get(); + if (session != null) { + session.dispatchPlayFromUri(uri, extras); + } + } + + @Override public void onSkipToTrack(long id) { MediaSession session = mMediaSession.get(); if (session != null) { @@ -1171,6 +1190,7 @@ public final class MediaSession { private static final int MSG_COMMAND = 15; private static final int MSG_ADJUST_VOLUME = 16; private static final int MSG_SET_VOLUME = 17; + private static final int MSG_PLAY_URI = 18; private MediaSession.Callback mCallback; @@ -1210,6 +1230,9 @@ public final class MediaSession { case MSG_PLAY_SEARCH: mCallback.onPlayFromSearch((String) msg.obj, msg.getData()); break; + case MSG_PLAY_URI: + mCallback.onPlayFromUri((Uri) msg.obj, msg.getData()); + break; case MSG_SKIP_TO_ITEM: mCallback.onSkipToQueueItem((Long) msg.obj); break; diff --git a/media/java/android/media/session/PlaybackState.java b/media/java/android/media/session/PlaybackState.java index 6807e7f..bbe04b5 100644 --- a/media/java/android/media/session/PlaybackState.java +++ b/media/java/android/media/session/PlaybackState.java @@ -126,6 +126,13 @@ public final class PlaybackState implements Parcelable { public static final long ACTION_SKIP_TO_QUEUE_ITEM = 1 << 12; /** + * Indicates this session supports the play from URI command. + * + * @see Builder#setActions(long) + */ + public static final long ACTION_PLAY_FROM_URI = 1 << 13; + + /** * This is the default playback state and indicates that no media has been * added yet, or the performer has been reset and has no content to play. * @@ -353,6 +360,11 @@ public final class PlaybackState implements Parcelable { * <li> {@link PlaybackState#ACTION_SKIP_TO_NEXT}</li> * <li> {@link PlaybackState#ACTION_SEEK_TO}</li> * <li> {@link PlaybackState#ACTION_SET_RATING}</li> + * <li> {@link PlaybackState#ACTION_PLAY_PAUSE}</li> + * <li> {@link PlaybackState#ACTION_PLAY_FROM_MEDIA_ID}</li> + * <li> {@link PlaybackState#ACTION_PLAY_FROM_SEARCH}</li> + * <li> {@link PlaybackState#ACTION_SKIP_TO_QUEUE_ITEM}</li> + * <li> {@link PlaybackState#ACTION_PLAY_FROM_URI}</li> * </ul> */ public long getActions() { @@ -868,6 +880,11 @@ public final class PlaybackState implements Parcelable { * <li> {@link PlaybackState#ACTION_SKIP_TO_NEXT}</li> * <li> {@link PlaybackState#ACTION_SEEK_TO}</li> * <li> {@link PlaybackState#ACTION_SET_RATING}</li> + * <li> {@link PlaybackState#ACTION_PLAY_PAUSE}</li> + * <li> {@link PlaybackState#ACTION_PLAY_FROM_MEDIA_ID}</li> + * <li> {@link PlaybackState#ACTION_PLAY_FROM_SEARCH}</li> + * <li> {@link PlaybackState#ACTION_SKIP_TO_QUEUE_ITEM}</li> + * <li> {@link PlaybackState#ACTION_PLAY_FROM_URI}</li> * </ul> * * @param actions The set of actions allowed. diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index b5036db..09d0501 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -40,6 +40,7 @@ import android.media.session.MediaSession; import android.media.session.ParcelableVolumeInfo; import android.media.session.PlaybackState; import android.media.AudioAttributes; +import android.net.Uri; import android.os.Binder; import android.os.Bundle; import android.os.DeadObjectException; @@ -887,6 +888,14 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } } + public void playFromUri(Uri uri, Bundle extras) { + try { + mCb.onPlayFromUri(uri, extras); + } catch (RemoteException e) { + Slog.e(TAG, "Remote failure in playFromUri.", e); + } + } + public void skipToTrack(long id) { try { mCb.onSkipToTrack(id); @@ -1103,6 +1112,11 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } @Override + public void playFromUri(Uri uri, Bundle extras) throws RemoteException { + mSessionCb.playFromUri(uri, extras); + } + + @Override public void skipToQueueItem(long id) { mSessionCb.skipToTrack(id); } |
