diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java index d7bd794743d47..c65800a17f826 100644 --- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java @@ -808,14 +808,11 @@ class MediaRouter2ServiceImpl { userRecord.mHandler, manager)); for (RouterRecord routerRecord : userRecord.mRouterRecords) { - // TODO: Do not use notifyPreferredFeaturesChangedToManagers since it updates all - // managers. Instead, Notify only to the manager that is currently being registered. - // TODO: UserRecord <-> routerRecord, why do they reference each other? // How about removing mUserRecord from routerRecord? routerRecord.mUserRecord.mHandler.sendMessage( - obtainMessage(UserHandler::notifyPreferredFeaturesChangedToManagers, - routerRecord.mUserRecord.mHandler, routerRecord)); + obtainMessage(UserHandler::notifyPreferredFeaturesChangedToManager, + routerRecord.mUserRecord.mHandler, routerRecord, manager)); } } @@ -1928,6 +1925,17 @@ class MediaRouter2ServiceImpl { } } + private void notifyPreferredFeaturesChangedToManager(@NonNull RouterRecord routerRecord, + @NonNull IMediaRouter2Manager manager) { + try { + manager.notifyPreferredFeaturesChanged(routerRecord.mPackageName, + routerRecord.mDiscoveryPreference.getPreferredFeatures()); + } catch (RemoteException ex) { + Slog.w(TAG, "Failed to notify preferred features changed." + + " Manager probably died.", ex); + } + } + private void notifyPreferredFeaturesChangedToManagers(@NonNull RouterRecord routerRecord) { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) {