Make setting the session token in MediaBrowserService synchronous

The MusicDemo was depending on the fact that setting the session token
is done synchronously and that getSessionToken can be called immediately
after. This makes setting the token synchronous again but leaves the
post to update any MediaBrowsers that are waiting on a connection.

This does introduce a small race condition if an app tries to set it
twice from different threads, but this is a very unlikely situation
and MediaBrowserService is not guaranteed to be thread safe.

bug:18603085
Change-Id: Id934c9f3b6520225cd92d1d8a6e2b3d606b8c6c8
diff --git a/media/java/android/service/media/MediaBrowserService.java b/media/java/android/service/media/MediaBrowserService.java
index 779d486..26aedbd 100644
--- a/media/java/android/service/media/MediaBrowserService.java
+++ b/media/java/android/service/media/MediaBrowserService.java
@@ -323,24 +323,22 @@
      * <p>
      * This should be called as soon as possible during the service's startup.
      * It may only be called once.
-     *
-     * @return The media session token, must not be null.
      */
     public void setSessionToken(final MediaSession.Token token) {
         if (token == null) {
             throw new IllegalArgumentException("Session token may not be null.");
         }
+        if (mSession != null) {
+            throw new IllegalStateException("The session token has already been set.");
+        }
+        mSession = token;
         mHandler.post(new Runnable() {
             @Override
             public void run() {
-                if (mSession != null) {
-                    throw new IllegalStateException("The session token has already been set.");
-                }
-                mSession = token;
                 for (IBinder key : mConnections.keySet()) {
                     ConnectionRecord connection = mConnections.get(key);
                     try {
-                        connection.callbacks.onConnect(connection.root.getRootId(), mSession,
+                        connection.callbacks.onConnect(connection.root.getRootId(), token,
                                 connection.root.getExtras());
                     } catch (RemoteException e) {
                         Log.w(TAG, "Connection for " + connection.pkg + " is no longer valid.");