diff options
| author | 2019-01-17 16:32:12 +0000 | |
|---|---|---|
| committer | 2019-01-17 16:32:12 +0000 | |
| commit | 3d404e7836afc50009120688c5ad3db8dac3dbc0 (patch) | |
| tree | bf3003086983e6b113c29c141e5b26f2f52e0125 | |
| parent | ce2b5758afb4cce150450de1e10943f5a2007595 (diff) | |
| parent | f8e970a923d41dca2c7b9967c40344d25bf0edcc (diff) | |
Merge "MediaSession2: Fix controller is disconnected immediatly after connected"
| -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(); } }); } |