From f8e970a923d41dca2c7b9967c40344d25bf0edcc Mon Sep 17 00:00:00 2001 From: Jaewan Kim Date: Thu, 17 Jan 2019 21:53:39 +0900 Subject: [PATCH] MediaSession2: Fix controller is disconnected immediatly after connected This is regression introduced by my previous commit 45d94a4844e9 MediaSession2Service: Initial commit Test: Run CTS Change-Id: Id1490e1897e502c2a6008e5ed72158d4d5cf9685 --- media/java/android/media/MediaSession2.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/media/java/android/media/MediaSession2.java b/media/java/android/media/MediaSession2.java index dceef34596b74..04999cace5e04 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(); } }); }