diff options
| author | 2020-02-10 08:10:42 +0000 | |
|---|---|---|
| committer | 2020-02-10 08:10:42 +0000 | |
| commit | 6a1e0b72e3bf86c98211155dfd88d671b58d5e29 (patch) | |
| tree | a24a3d7b4149a3e3fd374554a12cf25ba0b17878 | |
| parent | 0f6accf9a632d315b17e69850a67975dc5bb167d (diff) | |
| parent | 47d289e205d5b2149f0dff7451561114518bc36f (diff) | |
Merge "MediaRouter: clear session info when disconnected"
| -rw-r--r-- | media/java/android/media/MediaRouter2Manager.java | 14 | ||||
| -rw-r--r-- | services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java | 6 |
2 files changed, 18 insertions, 2 deletions
diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java index b1f930d0f2cc..2c1fdab9da01 100644 --- a/media/java/android/media/MediaRouter2Manager.java +++ b/media/java/android/media/MediaRouter2Manager.java @@ -247,13 +247,23 @@ public class MediaRouter2Manager { Objects.requireNonNull(packageName, "packageName must not be null"); Objects.requireNonNull(route, "route must not be null"); + boolean transferred = false; + //TODO: instead of release all controllers, add an API to specify controllers that + // should be released (or is the system controller). for (RoutingController controller : getRoutingControllers(packageName)) { - if (controller.getSessionInfo().getTransferrableRoutes().contains(route.getId())) { + if (!transferred && controller.getSessionInfo().getTransferrableRoutes() + .contains(route.getId())) { controller.transferToRoute(route); - return; + transferred = true; + } else if (!controller.getSessionInfo().isSystemSession()) { + controller.release(); } } + if (transferred) { + return; + } + Client client; synchronized (sLock) { client = mClient; diff --git a/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java b/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java index d08fb71d3dee..dd536ecd19fa 100644 --- a/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java +++ b/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java @@ -411,6 +411,12 @@ final class MediaRoute2ProviderProxy extends MediaRoute2Provider implements Serv mActiveConnection.dispose(); mActiveConnection = null; setAndNotifyProviderState(null); + synchronized (mLock) { + for (RoutingSessionInfo sessionInfo : mSessionInfos) { + mCallback.onSessionReleased(this, sessionInfo); + } + mSessionInfos.clear(); + } } } |