summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hyundo Moon <hdmoon@google.com> 2018-01-26 09:44:47 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-01-26 09:44:47 +0000
commit150cca8777faea4e57ac956c7d4cf09a612d649a (patch)
tree66a631d08f2cf05912690e86e7c2b8b58c4e4d32
parent6cb0712c53b340b0960800e878d980e66724bbbf (diff)
parent5b2e35ad099f18eb55774745ab7b22bf2d276c9a (diff)
Merge "Add fromBundle/toBundle to PlaybackState2/PlaylistParams"
-rw-r--r--media/java/android/media/MediaSession2.java52
-rw-r--r--media/java/android/media/PlaybackState2.java61
2 files changed, 100 insertions, 13 deletions
diff --git a/media/java/android/media/MediaSession2.java b/media/java/android/media/MediaSession2.java
index cb5164ea78a0..8c499c873d9b 100644
--- a/media/java/android/media/MediaSession2.java
+++ b/media/java/android/media/MediaSession2.java
@@ -849,7 +849,6 @@ public class MediaSession2 implements AutoCloseable {
/**
* Parameter for the playlist.
*/
- // TODO(jaewan): add fromBundle()/toBundle()
public static class PlaylistParams {
/**
* @hide
@@ -905,6 +904,16 @@ public class MediaSession2 implements AutoCloseable {
*/
public static final int SHUFFLE_MODE_GROUP = 2;
+ /**
+ * Keys used for converting a PlaylistParams object to a bundle object and vice versa.
+ */
+ private static final String KEY_REPEAT_MODE =
+ "android.media.session2.playlistparams2.repeat_mode";
+ private static final String KEY_SHUFFLE_MODE =
+ "android.media.session2.playlistparams2.shuffle_mode";
+ private static final String KEY_MEDIA_METADATA2_BUNDLE =
+ "android.media.session2.playlistparams2.metadata2_bundle";
+
private @RepeatMode int mRepeatMode;
private @ShuffleMode int mShuffleMode;
@@ -928,6 +937,47 @@ public class MediaSession2 implements AutoCloseable {
public MediaMetadata2 getPlaylistMetadata() {
return mPlaylistMetadata;
}
+
+ /**
+ * Returns this object as a bundle to share between processes.
+ *
+ * @hide
+ */
+ public Bundle toBundle() {
+ Bundle bundle = new Bundle();
+ bundle.putInt(KEY_REPEAT_MODE, mRepeatMode);
+ bundle.putInt(KEY_SHUFFLE_MODE, mShuffleMode);
+ if (mPlaylistMetadata != null) {
+ bundle.putBundle(KEY_MEDIA_METADATA2_BUNDLE, mPlaylistMetadata.getBundle());
+ }
+ return bundle;
+ }
+
+ /**
+ * Creates an instance from a bundle which is previously created by {@link #toBundle()}.
+ *
+ * @param bundle A bundle created by {@link #toBundle()}.
+ * @return A new {@link PlaylistParams} instance. Returns {@code null} if the given
+ * {@param bundle} is null, or if the {@param bundle} has no playlist parameters.
+ * @hide
+ */
+ public static PlaylistParams fromBundle(Bundle bundle) {
+ if (bundle == null) {
+ return null;
+ }
+ if (!bundle.containsKey(KEY_REPEAT_MODE) || !bundle.containsKey(KEY_SHUFFLE_MODE)) {
+ return null;
+ }
+
+ Bundle metadataBundle = bundle.getBundle(KEY_MEDIA_METADATA2_BUNDLE);
+ MediaMetadata2 metadata =
+ metadataBundle == null ? null : new MediaMetadata2(metadataBundle);
+
+ return new PlaylistParams(
+ bundle.getInt(KEY_REPEAT_MODE),
+ bundle.getInt(KEY_SHUFFLE_MODE),
+ metadata);
+ }
}
/**
diff --git a/media/java/android/media/PlaybackState2.java b/media/java/android/media/PlaybackState2.java
index 034688092f70..7688fbc9bb41 100644
--- a/media/java/android/media/PlaybackState2.java
+++ b/media/java/android/media/PlaybackState2.java
@@ -31,8 +31,6 @@ import java.lang.annotation.RetentionPolicy;
public final class PlaybackState2 {
private static final String TAG = "PlaybackState2";
- private static final String KEY_STATE = "android.media.playbackstate2.state";
-
// TODO(jaewan): Replace states from MediaPlayer2
/**
* @hide
@@ -90,13 +88,25 @@ public final class PlaybackState2 {
*/
public final static long PLAYBACK_POSITION_UNKNOWN = -1;
+ /**
+ * Keys used for converting a PlaybackState2 to a bundle object and vice versa.
+ */
+ private static final String KEY_STATE = "android.media.playbackstate2.state";
+ private static final String KEY_POSITION = "android.media.playbackstate2.position";
+ private static final String KEY_BUFFERED_POSITION =
+ "android.media.playbackstate2.buffered_position";
+ private static final String KEY_SPEED = "android.media.playbackstate2.speed";
+ private static final String KEY_ERROR_MESSAGE = "android.media.playbackstate2.error_message";
+ private static final String KEY_UPDATE_TIME = "android.media.playbackstate2.update_time";
+ private static final String KEY_ACTIVE_ITEM_ID = "android.media.playbackstate2.active_item_id";
+
private final int mState;
private final long mPosition;
- private final long mBufferedPosition;
- private final float mSpeed;
- private final CharSequence mErrorMessage;
private final long mUpdateTime;
+ private final float mSpeed;
+ private final long mBufferedPosition;
private final long mActiveItemId;
+ private final CharSequence mErrorMessage;
public PlaybackState2(int state, long position, long updateTime, float speed,
long bufferedPosition, long activeItemId, CharSequence error) {
@@ -194,22 +204,49 @@ public final class PlaybackState2 {
}
/**
- * @return Bundle object for this to share between processes.
+ * Returns this object as a bundle to share between processes.
*/
public Bundle toBundle() {
- // TODO(jaewan): Include other variables.
Bundle bundle = new Bundle();
bundle.putInt(KEY_STATE, mState);
+ bundle.putLong(KEY_POSITION, mPosition);
+ bundle.putLong(KEY_UPDATE_TIME, mUpdateTime);
+ bundle.putFloat(KEY_SPEED, mSpeed);
+ bundle.putLong(KEY_BUFFERED_POSITION, mBufferedPosition);
+ bundle.putLong(KEY_ACTIVE_ITEM_ID, mActiveItemId);
+ bundle.putCharSequence(KEY_ERROR_MESSAGE, mErrorMessage);
return bundle;
}
/**
- * @param bundle input
- * @return
+ * Creates an instance from a bundle which is previously created by {@link #toBundle()}.
+ *
+ * @param bundle A bundle created by {@link #toBundle()}.
+ * @return A new {@link PlaybackState2} instance. Returns {@code null} if the given
+ * {@param bundle} is null, or if the {@param bundle} has no playback state parameters.
*/
public static PlaybackState2 fromBundle(Bundle bundle) {
- // TODO(jaewan): Include other variables.
- final int state = bundle.getInt(KEY_STATE);
- return new PlaybackState2(state, 0, 0, 0, 0, 0, null);
+ if (bundle == null) {
+ return null;
+ }
+
+ if (!bundle.containsKey(KEY_STATE)
+ || !bundle.containsKey(KEY_POSITION)
+ || !bundle.containsKey(KEY_UPDATE_TIME)
+ || !bundle.containsKey(KEY_SPEED)
+ || !bundle.containsKey(KEY_BUFFERED_POSITION)
+ || !bundle.containsKey(KEY_ACTIVE_ITEM_ID)
+ || !bundle.containsKey(KEY_ERROR_MESSAGE)) {
+ return null;
+ }
+
+ return new PlaybackState2(
+ bundle.getInt(KEY_STATE),
+ bundle.getLong(KEY_POSITION),
+ bundle.getLong(KEY_UPDATE_TIME),
+ bundle.getFloat(KEY_SPEED),
+ bundle.getLong(KEY_BUFFERED_POSITION),
+ bundle.getLong(KEY_ACTIVE_ITEM_ID),
+ bundle.getCharSequence(KEY_ERROR_MESSAGE));
}
} \ No newline at end of file