Make MediaSessionToken an inner class of MediaSession.

Also add some missing AIDLs to the framework makefile to ensure
they are included in the SDK.

Change-Id: If85a3091c7591e0b3bbe6cc4bb74aba2284b4f42
diff --git a/Android.mk b/Android.mk
index a38e9e7..a6271d2 100644
--- a/Android.mk
+++ b/Android.mk
@@ -509,6 +509,10 @@
 	frameworks/base/location/java/android/location/FusedBatchOptions.aidl \
 	frameworks/base/location/java/com/android/internal/location/ProviderProperties.aidl \
 	frameworks/base/location/java/com/android/internal/location/ProviderRequest.aidl \
+	frameworks/base/media/java/android/media/MediaMetadata.aidl \
+	frameworks/base/media/java/android/media/Rating.aidl \
+	frameworks/base/media/java/android/media/session/MediaSession.aidl \
+	frameworks/base/media/java/android/media/session/PlaybackState.aidl \
 	frameworks/base/telephony/java/android/telephony/ServiceState.aidl \
 	frameworks/base/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl \
 	frameworks/base/telephony/java/com/android/internal/telephony/ITelephony.aidl \
diff --git a/api/current.txt b/api/current.txt
index c962c0a..29dcc72 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -4699,7 +4699,7 @@
     ctor public Notification.MediaStyle();
     ctor public Notification.MediaStyle(android.app.Notification.Builder);
     method public android.app.Notification buildStyled(android.app.Notification);
-    method public android.app.Notification.MediaStyle setMediaSession(android.media.session.MediaSessionToken);
+    method public android.app.Notification.MediaStyle setMediaSession(android.media.session.MediaSession.Token);
     method public android.app.Notification.MediaStyle setShowActionsInCompactView(int...);
   }
 
@@ -15774,7 +15774,7 @@
     method public void addCallback(android.media.session.MediaController.Callback, android.os.Handler);
     method public void adjustVolumeBy(int, int);
     method public boolean dispatchMediaButtonEvent(android.view.KeyEvent);
-    method public static android.media.session.MediaController fromToken(android.media.session.MediaSessionToken);
+    method public static android.media.session.MediaController fromToken(android.media.session.MediaSession.Token);
     method public android.media.MediaMetadata getMetadata();
     method public android.media.session.PlaybackState getPlaybackState();
     method public int getRatingType();
@@ -15818,7 +15818,7 @@
     method public void addCallback(android.media.session.MediaSession.Callback, android.os.Handler);
     method public void addTransportControlsCallback(android.media.session.MediaSession.TransportControlsCallback);
     method public void addTransportControlsCallback(android.media.session.MediaSession.TransportControlsCallback, android.os.Handler);
-    method public android.media.session.MediaSessionToken getSessionToken();
+    method public android.media.session.MediaSession.Token getSessionToken();
     method public boolean isActive();
     method public void release();
     method public void removeCallback(android.media.session.MediaSession.Callback);
@@ -15843,6 +15843,12 @@
     method public void onMediaButtonEvent(android.content.Intent);
   }
 
+  public static final class MediaSession.Token implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator CREATOR;
+  }
+
   public static abstract class MediaSession.TransportControlsCallback {
     ctor public MediaSession.TransportControlsCallback();
     method public void onFastForward();
@@ -15867,12 +15873,6 @@
     method public abstract void onActiveSessionsChanged(java.util.List<android.media.session.MediaController>);
   }
 
-  public final class MediaSessionToken implements android.os.Parcelable {
-    method public int describeContents();
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator CREATOR;
-  }
-
   public final class PlaybackState implements android.os.Parcelable {
     ctor public PlaybackState();
     ctor public PlaybackState(android.media.session.PlaybackState);
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 84f7e5f..c5eb356 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -27,7 +27,7 @@
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
 import android.media.AudioManager;
-import android.media.session.MediaSessionToken;
+import android.media.session.MediaSession;
 import android.net.Uri;
 import android.os.BadParcelableException;
 import android.os.Bundle;
@@ -777,7 +777,7 @@
 
     /**
      * {@link #extras} key: A
-     * {@link android.media.session.MediaSessionToken} associated with a
+     * {@link android.media.session.MediaSession.Token} associated with a
      * {@link android.app.Notification.MediaStyle} notification.
      */
     public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
@@ -3230,8 +3230,8 @@
      * {@link #setShowActionsInCompactView(int...)} you can promote up to 2 actions to be displayed
      * in the standard view alongside the usual content.
      *
-     * Finally, if you attach a {@link android.media.session.MediaSessionToken} using
-     * {@link android.app.Notification.MediaStyle#setMediaSession(MediaSessionToken)},
+     * Finally, if you attach a {@link android.media.session.MediaSession.Token} using
+     * {@link android.app.Notification.MediaStyle#setMediaSession(MediaSession.Token)},
      * the System UI can identify this as a notification representing an active media session
      * and respond accordingly (by showing album artwork in the lockscreen, for example).
      *
@@ -3255,7 +3255,7 @@
         static final int MAX_MEDIA_BUTTONS = 5;
 
         private int[] mActionsToShowInCompact = null;
-        private MediaSessionToken mToken;
+        private MediaSession.Token mToken;
 
         public MediaStyle() {
         }
@@ -3274,10 +3274,10 @@
         }
 
         /**
-         * Attach a {@link android.media.session.MediaSessionToken} to this Notification to provide
-         * additional playback information and control to the SystemUI.
+         * Attach a {@link android.media.session.MediaSession.Token} to this Notification
+         * to provide additional playback information and control to the SystemUI.
          */
-        public MediaStyle setMediaSession(MediaSessionToken token) {
+        public MediaStyle setMediaSession(MediaSession.Token token) {
             mToken = token;
             return this;
         }
diff --git a/media/java/android/media/session/IActiveSessionsListener.aidl b/media/java/android/media/session/IActiveSessionsListener.aidl
index e5e24bc..4b9e4bd 100644
--- a/media/java/android/media/session/IActiveSessionsListener.aidl
+++ b/media/java/android/media/session/IActiveSessionsListener.aidl
@@ -15,12 +15,12 @@
 
 package android.media.session;
 
-import android.media.session.MediaSessionToken;
+import android.media.session.MediaSession;
 
 /**
  * Listens for changes to the list of active sessions.
  * @hide
  */
 oneway interface IActiveSessionsListener {
-    void onActiveSessionsChanged(in List<MediaSessionToken> sessions);
-}
\ No newline at end of file
+    void onActiveSessionsChanged(in List<MediaSession.Token> sessions);
+}
diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java
index 7653e5a..edb69bc 100644
--- a/media/java/android/media/session/MediaController.java
+++ b/media/java/android/media/session/MediaController.java
@@ -42,7 +42,7 @@
  * <p>
  * A MediaController can be created through {@link MediaSessionManager} if you
  * hold the "android.permission.MEDIA_CONTENT_CONTROL" permission or directly if
- * you have a {@link MediaSessionToken} from the session owner.
+ * you have a {@link MediaSession.Token} from the session owner.
  * <p>
  * MediaController objects are thread-safe.
  */
@@ -86,7 +86,7 @@
      * @param token The session token to control.
      * @return A controller for the session or null if inaccessible.
      */
-    public static MediaController fromToken(@NonNull MediaSessionToken token) {
+    public static MediaController fromToken(@NonNull MediaSession.Token token) {
         return fromBinder(token.getBinder());
     }
 
diff --git a/media/java/android/media/session/MediaSessionToken.aidl b/media/java/android/media/session/MediaSession.aidl
similarity index 95%
rename from media/java/android/media/session/MediaSessionToken.aidl
rename to media/java/android/media/session/MediaSession.aidl
index 5812682..4a7efc2 100644
--- a/media/java/android/media/session/MediaSessionToken.aidl
+++ b/media/java/android/media/session/MediaSession.aidl
@@ -15,4 +15,4 @@
 
 package android.media.session;
 
-parcelable MediaSessionToken;
+parcelable MediaSession.Token;
diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java
index 7637ec8..dbe13dd 100644
--- a/media/java/android/media/session/MediaSession.java
+++ b/media/java/android/media/session/MediaSession.java
@@ -32,6 +32,8 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
+import android.os.Parcel;
+import android.os.Parcelable;
 import android.os.RemoteException;
 import android.os.ResultReceiver;
 import android.text.TextUtils;
@@ -136,7 +138,7 @@
 
     private final Object mLock = new Object();
 
-    private final MediaSessionToken mSessionToken;
+    private final MediaSession.Token mSessionToken;
     private final ISession mBinder;
     private final CallbackStub mCbStub;
 
@@ -165,7 +167,7 @@
         } catch (RemoteException e) {
             throw new RuntimeException("Dead object in MediaSessionController constructor: ", e);
         }
-        mSessionToken = new MediaSessionToken(controllerBinder);
+        mSessionToken = new Token(controllerBinder);
     }
 
     /**
@@ -370,7 +372,7 @@
      * @return A token that can be used to create a MediaController for this
      *         session
      */
-    public @NonNull MediaSessionToken getSessionToken() {
+    public @NonNull Token getSessionToken() {
         return mSessionToken;
     }
 
@@ -697,6 +699,49 @@
     }
 
     /**
+     * Represents an ongoing session. This may be passed to apps by the session
+     * owner to allow them to create a {@link MediaController} to communicate with
+     * the session.
+     */
+    public static final class Token implements Parcelable {
+        private ISessionController mBinder;
+
+        /**
+         * @hide
+         */
+        public Token(ISessionController binder) {
+            mBinder = binder;
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeStrongBinder(mBinder.asBinder());
+        }
+
+        ISessionController getBinder() {
+            return mBinder;
+        }
+
+        public static final Parcelable.Creator<Token> CREATOR
+                = new Parcelable.Creator<Token>() {
+            @Override
+            public Token createFromParcel(Parcel in) {
+                return new Token(ISessionController.Stub.asInterface(in.readStrongBinder()));
+            }
+
+            @Override
+            public Token[] newArray(int size) {
+                return new Token[size];
+            }
+        };
+    }
+
+    /**
      * Receives generic commands or updates from controllers and the system.
      * Callbacks may be registered using {@link #addCallback}.
      */
diff --git a/media/java/android/media/session/MediaSessionManager.java b/media/java/android/media/session/MediaSessionManager.java
index 9291bb0..c73a8d3 100644
--- a/media/java/android/media/session/MediaSessionManager.java
+++ b/media/java/android/media/session/MediaSessionManager.java
@@ -292,7 +292,7 @@
 
         private final IActiveSessionsListener.Stub mStub = new IActiveSessionsListener.Stub() {
             @Override
-            public void onActiveSessionsChanged(List<MediaSessionToken> tokens)
+            public void onActiveSessionsChanged(List<MediaSession.Token> tokens)
                     throws RemoteException {
                 ArrayList<MediaController> controllers = new ArrayList<MediaController>();
                 int size = tokens.size();
diff --git a/media/java/android/media/session/MediaSessionToken.java b/media/java/android/media/session/MediaSessionToken.java
deleted file mode 100644
index e599189..0000000
--- a/media/java/android/media/session/MediaSessionToken.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media.session;
-
-import android.media.session.ISessionController;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-/**
- * Represents an ongoing session. This may be passed to apps by the session
- * owner to allow them to create a {@link MediaController} to communicate with
- * the session.
- */
-public final class MediaSessionToken implements Parcelable {
-    private ISessionController mBinder;
-
-    /**
-     * @hide
-     */
-    public MediaSessionToken(ISessionController binder) {
-        mBinder = binder;
-    }
-
-    private MediaSessionToken(Parcel in) {
-        mBinder = ISessionController.Stub.asInterface(in.readStrongBinder());
-    }
-
-    /**
-     * @hide
-     */
-    ISessionController getBinder() {
-        return mBinder;
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeStrongBinder(mBinder.asBinder());
-    }
-
-    public static final Parcelable.Creator<MediaSessionToken> CREATOR
-            = new Parcelable.Creator<MediaSessionToken>() {
-        @Override
-        public MediaSessionToken createFromParcel(Parcel in) {
-            return new MediaSessionToken(in);
-        }
-
-        @Override
-        public MediaSessionToken[] newArray(int size) {
-            return new MediaSessionToken[size];
-        }
-    };
-}
diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java
index fe68a86..5738a05 100644
--- a/services/core/java/com/android/server/media/MediaSessionService.java
+++ b/services/core/java/com/android/server/media/MediaSessionService.java
@@ -34,10 +34,9 @@
 import android.media.session.ISession;
 import android.media.session.ISessionCallback;
 import android.media.session.ISessionManager;
-import android.media.session.MediaSessionToken;
+import android.media.session.MediaSession;
 import android.media.session.RouteInfo;
 import android.media.session.RouteOptions;
-import android.media.session.MediaSession;
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.Handler;
@@ -511,9 +510,9 @@
             if (size > 0) {
                 persistMediaButtonReceiverLocked(records.get(0));
             }
-            ArrayList<MediaSessionToken> tokens = new ArrayList<MediaSessionToken>();
+            ArrayList<MediaSession.Token> tokens = new ArrayList<MediaSession.Token>();
             for (int i = 0; i < size; i++) {
-                tokens.add(new MediaSessionToken(records.get(i).getControllerBinder()));
+                tokens.add(new MediaSession.Token(records.get(i).getControllerBinder()));
             }
             pushRemoteVolumeUpdateLocked(userId);
             for (int i = mSessionsListeners.size() - 1; i >= 0; i--) {
diff --git a/tests/OneMedia/src/com/android/onemedia/IPlayerCallback.aidl b/tests/OneMedia/src/com/android/onemedia/IPlayerCallback.aidl
index 2b14384..d04f56f 100644
--- a/tests/OneMedia/src/com/android/onemedia/IPlayerCallback.aidl
+++ b/tests/OneMedia/src/com/android/onemedia/IPlayerCallback.aidl
@@ -15,8 +15,8 @@
 
 package com.android.onemedia;
 
-import android.media.session.MediaSessionToken;
+import android.media.session.MediaSession;
 
 interface IPlayerCallback {
-    void onSessionChanged(in MediaSessionToken session);
-}
\ No newline at end of file
+    void onSessionChanged(in MediaSession.Token session);
+}
diff --git a/tests/OneMedia/src/com/android/onemedia/IPlayerService.aidl b/tests/OneMedia/src/com/android/onemedia/IPlayerService.aidl
index efdbe9a..d4df4c5 100644
--- a/tests/OneMedia/src/com/android/onemedia/IPlayerService.aidl
+++ b/tests/OneMedia/src/com/android/onemedia/IPlayerService.aidl
@@ -15,15 +15,15 @@
 
 package com.android.onemedia;
 
-import android.media.session.MediaSessionToken;
+import android.media.session.MediaSession;
 import android.os.Bundle;
 
 import com.android.onemedia.IPlayerCallback;
 import com.android.onemedia.playback.IRequestCallback;
 
 interface IPlayerService {
-    MediaSessionToken getSessionToken();
+    MediaSession.Token getSessionToken();
     void registerCallback(in IPlayerCallback cb);
     void unregisterCallback(in IPlayerCallback cb);
     void sendRequest(String action, in Bundle params, in IRequestCallback cb);
-}
\ No newline at end of file
+}
diff --git a/tests/OneMedia/src/com/android/onemedia/PlayerService.java b/tests/OneMedia/src/com/android/onemedia/PlayerService.java
index 934f4ef..58ee4a1 100644
--- a/tests/OneMedia/src/com/android/onemedia/PlayerService.java
+++ b/tests/OneMedia/src/com/android/onemedia/PlayerService.java
@@ -17,7 +17,7 @@
 
 import android.app.Service;
 import android.content.Intent;
-import android.media.session.MediaSessionToken;
+import android.media.session.MediaSession;
 import android.media.session.PlaybackState;
 import android.os.Bundle;
 import android.os.IBinder;
@@ -149,7 +149,7 @@
         }
 
         @Override
-        public MediaSessionToken getSessionToken() throws RemoteException {
+        public MediaSession.Token getSessionToken() throws RemoteException {
             return mSession.getSessionToken();
         }
     }
diff --git a/tests/OneMedia/src/com/android/onemedia/PlayerSession.java b/tests/OneMedia/src/com/android/onemedia/PlayerSession.java
index d6f8118..a220107 100644
--- a/tests/OneMedia/src/com/android/onemedia/PlayerSession.java
+++ b/tests/OneMedia/src/com/android/onemedia/PlayerSession.java
@@ -23,7 +23,6 @@
 import android.media.session.RoutePlaybackControls;
 import android.media.session.MediaSession;
 import android.media.session.MediaSessionManager;
-import android.media.session.MediaSessionToken;
 import android.media.session.PlaybackState;
 import android.os.Bundle;
 import android.util.Log;
@@ -103,7 +102,7 @@
         mListener = listener;
     }
 
-    public MediaSessionToken getSessionToken() {
+    public MediaSession.Token getSessionToken() {
         return mSession.getSessionToken();
     }