From ac9df100f590cd6445ff16ddfe92bb787c3fb27e Mon Sep 17 00:00:00 2001 From: Hyundo Moon Date: Fri, 12 Jun 2020 19:36:10 +0900 Subject: [PATCH] Clear preferred feature when unregistering MediaRouter2 MediaRouter2Managers' preferred feature didn't get cleared even when the MediaRouter2 is unregistered/died. As a result, when an app is reinstalled/relaunched, the routes for the previous process are still shown in the MediaRouter2Manager. This CL fixes the problem. Bug: 158824569 Test: Passed CTS and mediaroutertest Also tested with reinstalling support7Demos. Change-Id: Ib5d84c41862177af32931e0d69b02f461105bba6 --- media/java/android/media/MediaRouter2Manager.java | 4 ++++ .../server/media/MediaRouter2ServiceImpl.java | 14 ++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java index a18cfccb6cb20..5a7c87e0235de 100644 --- a/media/java/android/media/MediaRouter2Manager.java +++ b/media/java/android/media/MediaRouter2Manager.java @@ -576,6 +576,10 @@ public final class MediaRouter2Manager { } void updatePreferredFeatures(String packageName, List preferredFeatures) { + if (preferredFeatures == null) { + mPreferredFeaturesMap.remove(packageName); + return; + } List prevFeatures = mPreferredFeaturesMap.put(packageName, preferredFeatures); if ((prevFeatures == null && preferredFeatures.size() == 0) || Objects.equals(preferredFeatures, prevFeatures)) { diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java index 9a2aee3d8df61..93a27f2d17a95 100644 --- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java @@ -598,6 +598,10 @@ class MediaRouter2ServiceImpl { UserRecord userRecord = routerRecord.mUserRecord; userRecord.mRouterRecords.remove(routerRecord); + routerRecord.mUserRecord.mHandler.sendMessage( + obtainMessage(UserHandler::notifyPreferredFeaturesChangedToManagers, + routerRecord.mUserRecord.mHandler, + routerRecord.mPackageName, /* preferredFeatures=*/ null)); userRecord.mHandler.sendMessage( obtainMessage(UserHandler::updateDiscoveryPreferenceOnHandler, userRecord.mHandler)); @@ -613,7 +617,9 @@ class MediaRouter2ServiceImpl { routerRecord.mDiscoveryPreference = discoveryRequest; routerRecord.mUserRecord.mHandler.sendMessage( obtainMessage(UserHandler::notifyPreferredFeaturesChangedToManagers, - routerRecord.mUserRecord.mHandler, routerRecord)); + routerRecord.mUserRecord.mHandler, + routerRecord.mPackageName, + routerRecord.mDiscoveryPreference.getPreferredFeatures())); routerRecord.mUserRecord.mHandler.sendMessage( obtainMessage(UserHandler::updateDiscoveryPreferenceOnHandler, routerRecord.mUserRecord.mHandler)); @@ -1954,7 +1960,8 @@ class MediaRouter2ServiceImpl { } } - private void notifyPreferredFeaturesChangedToManagers(@NonNull RouterRecord routerRecord) { + private void notifyPreferredFeaturesChangedToManagers(@NonNull String routerPackageName, + @Nullable List preferredFeatures) { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return; @@ -1967,8 +1974,7 @@ class MediaRouter2ServiceImpl { } for (IMediaRouter2Manager manager : managers) { try { - manager.notifyPreferredFeaturesChanged(routerRecord.mPackageName, - routerRecord.mDiscoveryPreference.getPreferredFeatures()); + manager.notifyPreferredFeaturesChanged(routerPackageName, preferredFeatures); } catch (RemoteException ex) { Slog.w(TAG, "Failed to notify preferred features changed." + " Manager probably died.", ex);