Merge "MediaRouter: clear session info when disconnected"
diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java
index b1f930d..2c1fdab 100644
--- a/media/java/android/media/MediaRouter2Manager.java
+++ b/media/java/android/media/MediaRouter2Manager.java
@@ -247,13 +247,23 @@
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 d08fb71..dd536ec 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 @@
mActiveConnection.dispose();
mActiveConnection = null;
setAndNotifyProviderState(null);
+ synchronized (mLock) {
+ for (RoutingSessionInfo sessionInfo : mSessionInfos) {
+ mCallback.onSessionReleased(this, sessionInfo);
+ }
+ mSessionInfos.clear();
+ }
}
}