diff options
| -rw-r--r-- | media/java/android/media/MediaSession2.java | 16 | 
1 files changed, 10 insertions, 6 deletions
| diff --git a/media/java/android/media/MediaSession2.java b/media/java/android/media/MediaSession2.java index dceef34596b7..04999cace5e0 100644 --- a/media/java/android/media/MediaSession2.java +++ b/media/java/android/media/MediaSession2.java @@ -239,7 +239,7 @@ public class MediaSession2 implements AutoCloseable {          final ControllerInfo controllerInfo = new ControllerInfo(remoteUserInfo,                  mSessionManager.isTrustedForMediaControl(remoteUserInfo), controller);          mCallbackExecutor.execute(() -> { -            boolean accept = false; +            boolean connected = false;              try {                  if (isClosed()) {                      return; @@ -249,8 +249,7 @@ public class MediaSession2 implements AutoCloseable {                  // Don't reject connection for the request from trusted app.                  // Otherwise server will fail to retrieve session's information to dispatch                  // media keys to. -                accept = controllerInfo.mAllowedCommands != null || controllerInfo.isTrusted(); -                if (!accept) { +                if (controllerInfo.mAllowedCommands == null && !controllerInfo.isTrusted()) {                      return;                  }                  if (controllerInfo.mAllowedCommands == null) { @@ -283,13 +282,18 @@ public class MediaSession2 implements AutoCloseable {                      return;                  }                  controllerInfo.notifyConnected(connectionResult); +                connected = true;              } finally { -                if (!accept) { +                if (!connected) {                      if (DEBUG) { -                        Log.d(TAG, "Rejecting connection, controllerInfo=" + controllerInfo); +                        Log.d(TAG, "Rejecting connection or notifying that session is closed" +                                + ", controllerInfo=" + controllerInfo);                      } +                    synchronized (mLock) { +                        mConnectedControllers.remove(controller); +                    } +                    controllerInfo.notifyDisconnected();                  } -                controllerInfo.notifyDisconnected();              }          });      } |