Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd228a38 authored by RoboErik's avatar RoboErik
Browse files

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
parent 7fbcac6a
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -323,24 +323,22 @@ public abstract class MediaBrowserService extends Service {
     * <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.");
        }
        mHandler.post(new Runnable() {
            @Override
            public void run() {
        if (mSession != null) {
            throw new IllegalStateException("The session token has already been set.");
        }
        mSession = token;
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                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.");