diff options
| author | 2019-02-21 11:17:39 +0900 | |
|---|---|---|
| committer | 2019-02-22 20:58:55 +0900 | |
| commit | cf2d82f2be32935ff7718dee950a7a900479dd34 (patch) | |
| tree | 637bb4b822467f341b9e556e0a85e971402aacb5 | |
| parent | 1485a60b454c9a3e335084e10734cba21525ee8c (diff) | |
Add Session2Token#getExtras()
Bug: 125691206
Test: Passed MediaSession2Test and MediaController2Test
Change-Id: I8f6a74ec0a9a733b08fbb7c2000609e9084af279
| -rw-r--r-- | api/current.txt | 2 | ||||
| -rw-r--r-- | media/apex/java/android/media/MediaConstants.java | 1 | ||||
| -rw-r--r-- | media/apex/java/android/media/MediaController2.java | 4 | ||||
| -rw-r--r-- | media/apex/java/android/media/MediaSession2.java | 22 | ||||
| -rw-r--r-- | media/apex/java/android/media/Session2Token.java | 17 |
5 files changed, 41 insertions, 5 deletions
diff --git a/api/current.txt b/api/current.txt index f2fa672bfd15..0d0a141006e4 100644 --- a/api/current.txt +++ b/api/current.txt @@ -26011,6 +26011,7 @@ package android.media { public static final class MediaSession2.Builder { ctor public MediaSession2.Builder(@NonNull android.content.Context); method @NonNull public android.media.MediaSession2 build(); + method @NonNull public android.media.MediaSession2.Builder setExtras(@Nullable android.os.Bundle); method @NonNull public android.media.MediaSession2.Builder setId(@NonNull String); method @NonNull public android.media.MediaSession2.Builder setSessionActivity(@Nullable android.app.PendingIntent); method @NonNull public android.media.MediaSession2.Builder setSessionCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaSession2.SessionCallback); @@ -26373,6 +26374,7 @@ package android.media { public final class Session2Token implements android.os.Parcelable { ctor public Session2Token(@NonNull android.content.Context, @NonNull android.content.ComponentName); method public int describeContents(); + method @Nullable public android.os.Bundle getExtras(); method @NonNull public String getPackageName(); method @Nullable public String getServiceName(); method public int getType(); diff --git a/media/apex/java/android/media/MediaConstants.java b/media/apex/java/android/media/MediaConstants.java index 65b6f55a068a..776c1ba3f82f 100644 --- a/media/apex/java/android/media/MediaConstants.java +++ b/media/apex/java/android/media/MediaConstants.java @@ -27,6 +27,7 @@ class MediaConstants { static final String KEY_SESSION2LINK = "android.media.key.SESSION2LINK"; static final String KEY_ALLOWED_COMMANDS = "android.media.key.ALLOWED_COMMANDS"; static final String KEY_PLAYBACK_ACTIVE = "android.media.key.PLAYBACK_ACTIVE"; + static final String KEY_TOKEN_EXTRAS = "android.media.key.TOKEN_EXTRAS"; private MediaConstants() { } diff --git a/media/apex/java/android/media/MediaController2.java b/media/apex/java/android/media/MediaController2.java index 4ea384ac70b2..2709df0e060f 100644 --- a/media/apex/java/android/media/MediaController2.java +++ b/media/apex/java/android/media/MediaController2.java @@ -21,6 +21,7 @@ import static android.media.MediaConstants.KEY_PACKAGE_NAME; import static android.media.MediaConstants.KEY_PID; import static android.media.MediaConstants.KEY_PLAYBACK_ACTIVE; import static android.media.MediaConstants.KEY_SESSION2LINK; +import static android.media.MediaConstants.KEY_TOKEN_EXTRAS; import static android.media.Session2Command.RESULT_ERROR_UNKNOWN_ERROR; import static android.media.Session2Command.RESULT_INFO_SKIPPED; import static android.media.Session2Token.TYPE_SESSION; @@ -264,6 +265,7 @@ public class MediaController2 implements AutoCloseable { Session2CommandGroup allowedCommands = connectionResult.getParcelable(KEY_ALLOWED_COMMANDS); boolean playbackActive = connectionResult.getBoolean(KEY_PLAYBACK_ACTIVE); + Bundle tokenExtras = connectionResult.getBundle(KEY_TOKEN_EXTRAS); if (DEBUG) { Log.d(TAG, "notifyConnected sessionBinder=" + sessionBinder + ", allowedCommands=" + allowedCommands); @@ -282,7 +284,7 @@ public class MediaController2 implements AutoCloseable { // so can be used without worrying about deadlock. sessionBinder.linkToDeath(mDeathRecipient, 0); mConnectedToken = new Session2Token(mSessionToken.getUid(), TYPE_SESSION, - mSessionToken.getPackageName(), sessionBinder); + mSessionToken.getPackageName(), sessionBinder, tokenExtras); } mCallbackExecutor.execute(() -> { mCallback.onConnected(MediaController2.this, allowedCommands); diff --git a/media/apex/java/android/media/MediaSession2.java b/media/apex/java/android/media/MediaSession2.java index 4c6945ae8d3f..148e16c68cee 100644 --- a/media/apex/java/android/media/MediaSession2.java +++ b/media/apex/java/android/media/MediaSession2.java @@ -21,6 +21,7 @@ import static android.media.MediaConstants.KEY_PACKAGE_NAME; import static android.media.MediaConstants.KEY_PID; import static android.media.MediaConstants.KEY_PLAYBACK_ACTIVE; import static android.media.MediaConstants.KEY_SESSION2LINK; +import static android.media.MediaConstants.KEY_TOKEN_EXTRAS; import static android.media.Session2Command.RESULT_ERROR_UNKNOWN_ERROR; import static android.media.Session2Command.RESULT_INFO_SKIPPED; import static android.media.Session2Token.TYPE_SESSION; @@ -94,7 +95,8 @@ public class MediaSession2 implements AutoCloseable { private ForegroundServiceEventCallback mForegroundServiceEventCallback; MediaSession2(@NonNull Context context, @NonNull String id, PendingIntent sessionActivity, - @NonNull Executor callbackExecutor, @NonNull SessionCallback callback) { + @NonNull Executor callbackExecutor, @NonNull SessionCallback callback, + Bundle tokenExtras) { synchronized (MediaSession2.class) { if (SESSION_ID_LIST.contains(id)) { throw new IllegalStateException("Session ID must be unique. ID=" + id); @@ -109,7 +111,7 @@ public class MediaSession2 implements AutoCloseable { mCallback = callback; mSessionStub = new Session2Link(this); mSessionToken = new Session2Token(Process.myUid(), TYPE_SESSION, context.getPackageName(), - mSessionStub); + mSessionStub, tokenExtras); mSessionManager = (MediaSessionManager) mContext.getSystemService( Context.MEDIA_SESSION_SERVICE); // NOTE: mResultHandler uses main looper, so this MUST NOT be blocked. @@ -339,6 +341,7 @@ public class MediaSession2 implements AutoCloseable { connectionResult.putParcelable(KEY_ALLOWED_COMMANDS, controllerInfo.mAllowedCommands); connectionResult.putBoolean(KEY_PLAYBACK_ACTIVE, isPlaybackActive()); + connectionResult.putBundle(KEY_TOKEN_EXTRAS, mSessionToken.getExtras()); // Double check if session is still there, because close() can be called in // another thread. @@ -444,6 +447,7 @@ public class MediaSession2 implements AutoCloseable { private PendingIntent mSessionActivity; private Executor mCallbackExecutor; private SessionCallback mCallback; + private Bundle mExtras; /** * Creates a builder for {@link MediaSession2}. @@ -507,6 +511,18 @@ public class MediaSession2 implements AutoCloseable { } /** + * Set extras for the session token. + * + * @return The Builder to allow chaining + * @see Session2Token#getExtras() + */ + @NonNull + public Builder setExtras(@Nullable Bundle extras) { + mExtras = extras; + return this; + } + + /** * Build {@link MediaSession2}. * * @return a new session @@ -525,7 +541,7 @@ public class MediaSession2 implements AutoCloseable { mId = ""; } MediaSession2 session2 = new MediaSession2(mContext, mId, mSessionActivity, - mCallbackExecutor, mCallback); + mCallbackExecutor, mCallback, mExtras); // Notify framework about the newly create session after the constructor is finished. // Otherwise, framework may access the session before the initialization is finished. diff --git a/media/apex/java/android/media/Session2Token.java b/media/apex/java/android/media/Session2Token.java index 238cc2b8ee7d..6680e408ded4 100644 --- a/media/apex/java/android/media/Session2Token.java +++ b/media/apex/java/android/media/Session2Token.java @@ -24,6 +24,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; @@ -88,6 +89,7 @@ public final class Session2Token implements Parcelable { private final String mServiceName; private final Session2Link mSessionLink; private final ComponentName mComponentName; + private final Bundle mExtras; /** * Constructor for the token with type {@link #TYPE_SESSION_SERVICE}. @@ -116,15 +118,18 @@ public final class Session2Token implements Parcelable { mUid = uid; mType = TYPE_SESSION_SERVICE; mSessionLink = null; + mExtras = null; } - Session2Token(int uid, int type, String packageName, Session2Link sessionLink) { + Session2Token(int uid, int type, String packageName, Session2Link sessionLink, + Bundle tokenExtras) { mUid = uid; mType = type; mPackageName = packageName; mServiceName = null; mComponentName = null; mSessionLink = sessionLink; + mExtras = tokenExtras; } Session2Token(Parcel in) { @@ -134,6 +139,7 @@ public final class Session2Token implements Parcelable { mServiceName = in.readString(); mSessionLink = in.readParcelable(null); mComponentName = ComponentName.unflattenFromString(in.readString()); + mExtras = in.readBundle(); } @Override @@ -144,6 +150,7 @@ public final class Session2Token implements Parcelable { dest.writeString(mServiceName); dest.writeParcelable(mSessionLink, flags); dest.writeString(mComponentName == null ? "" : mComponentName.flattenToString()); + dest.writeBundle(mExtras); } @Override @@ -207,6 +214,14 @@ public final class Session2Token implements Parcelable { return mType; } + /** + * @return extras of the token + */ + @Nullable + public Bundle getExtras() { + return mExtras; + } + Session2Link getSessionLink() { return mSessionLink; } |