Merge "Add getFlags and getSessionToken to MediaController" into lmp-dev
diff --git a/api/current.txt b/api/current.txt
index b1b1708..5b9ea82 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -16584,10 +16584,12 @@
     method public void adjustVolume(int, int);
     method public android.media.routing.MediaRouter.Delegate createMediaRouterDelegate();
     method public boolean dispatchMediaButtonEvent(android.view.KeyEvent);
+    method public long getFlags();
     method public android.media.MediaMetadata getMetadata();
     method public android.media.session.PlaybackState getPlaybackState();
     method public java.util.List<android.media.session.MediaSession.Track> getQueue();
     method public int getRatingType();
+    method public android.media.session.MediaSession.Token getSessionToken();
     method public android.media.session.MediaController.TransportControls getTransportControls();
     method public android.media.session.MediaController.VolumeInfo getVolumeInfo();
     method public void removeCallback(android.media.session.MediaController.Callback);
diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java
index 050db21..89c61c8 100644
--- a/media/java/android/media/session/MediaController.java
+++ b/media/java/android/media/session/MediaController.java
@@ -64,6 +64,7 @@
 
     private final ISessionController mSessionBinder;
 
+    private final MediaSession.Token mToken;
     private final CallbackStub mCbStub = new CallbackStub(this);
     private final ArrayList<MessageHandler> mCallbacks = new ArrayList<MessageHandler>();
     private final Object mLock = new Object();
@@ -85,6 +86,7 @@
         }
         mSessionBinder = sessionBinder;
         mTransportControls = new TransportControls();
+        mToken = new MediaSession.Token(sessionBinder);
     }
 
     /**
@@ -208,12 +210,11 @@
     }
 
     /**
-     * Get the flags for this session.
+     * Get the flags for this session. Flags are defined in {@link MediaSession}.
      *
      * @return The current set of flags for the session.
-     * @hide
      */
-    public long getFlags() {
+    public @MediaSession.SessionFlags long getFlags() {
         try {
             return mSessionBinder.getFlags();
         } catch (RemoteException e) {
@@ -240,6 +241,15 @@
     }
 
     /**
+     * Get the token for the session this is connected to.
+     *
+     * @return The token for the connected session.
+     */
+    public @NonNull MediaSession.Token getSessionToken() {
+        return mToken;
+    }
+
+    /**
      * Set the volume of the output this session is playing on. The command will
      * be ignored if it does not support
      * {@link VolumeProvider#VOLUME_CONTROL_ABSOLUTE}. The flags in
diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java
index be2d479..866910d 100644
--- a/media/java/android/media/session/MediaSession.java
+++ b/media/java/android/media/session/MediaSession.java
@@ -16,6 +16,7 @@
 
 package android.media.session;
 
+import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.PendingIntent;
@@ -42,6 +43,8 @@
 import android.text.TextUtils;
 import android.util.Log;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.List;
@@ -95,6 +98,14 @@
      */
     public static final int FLAG_EXCLUSIVE_GLOBAL_PRIORITY = 1 << 16;
 
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(flag = true, value = {
+            FLAG_HANDLES_MEDIA_BUTTONS,
+            FLAG_HANDLES_TRANSPORT_CONTROLS,
+            FLAG_EXCLUSIVE_GLOBAL_PRIORITY })
+    public @interface SessionFlags { }
+
     /**
      * The session uses local playback.
      */
@@ -256,7 +267,7 @@
      *
      * @param flags The flags to set for this session.
      */
-    public void setFlags(int flags) {
+    public void setFlags(@SessionFlags int flags) {
         try {
             mBinder.setFlags(flags);
         } catch (RemoteException e) {