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);