summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2020-02-10 08:10:42 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-02-10 08:10:42 +0000
commit6a1e0b72e3bf86c98211155dfd88d671b58d5e29 (patch)
treea24a3d7b4149a3e3fd374554a12cf25ba0b17878
parent0f6accf9a632d315b17e69850a67975dc5bb167d (diff)
parent47d289e205d5b2149f0dff7451561114518bc36f (diff)
Merge "MediaRouter: clear session info when disconnected"
-rw-r--r--media/java/android/media/MediaRouter2Manager.java14
-rw-r--r--services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java6
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();
+ }
}
}