diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java index b28350d51e9ea..4f51fbd828d0b 100644 --- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java @@ -54,11 +54,9 @@ import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicInteger; @@ -1150,35 +1148,24 @@ class MediaRouter2ServiceImpl { private void onProviderStateChangedOnHandler(@NonNull MediaRoute2Provider provider) { int providerInfoIndex = getLastProviderInfoIndex(provider.getUniqueId()); - MediaRoute2ProviderInfo providerInfo = provider.getProviderInfo(); + MediaRoute2ProviderInfo currentInfo = provider.getProviderInfo(); MediaRoute2ProviderInfo prevInfo = (providerInfoIndex < 0) ? null : mLastProviderInfos.get(providerInfoIndex); + if (Objects.equals(prevInfo, currentInfo)) return; - if (Objects.equals(prevInfo, providerInfo)) return; - + List addedRoutes = new ArrayList<>(); + List removedRoutes = new ArrayList<>(); + List changedRoutes = new ArrayList<>(); if (prevInfo == null) { - mLastProviderInfos.add(providerInfo); - Collection addedRoutes = providerInfo.getRoutes(); - if (addedRoutes.size() > 0) { - sendMessage(PooledLambda.obtainMessage(UserHandler::notifyRoutesAddedToRouters, - this, getRouters(), new ArrayList<>(addedRoutes))); - } - } else if (providerInfo == null) { + mLastProviderInfos.add(currentInfo); + addedRoutes.addAll(currentInfo.getRoutes()); + } else if (currentInfo == null) { mLastProviderInfos.remove(prevInfo); - Collection removedRoutes = prevInfo.getRoutes(); - if (removedRoutes.size() > 0) { - sendMessage(PooledLambda.obtainMessage( - UserHandler::notifyRoutesRemovedToRouters, - this, getRouters(), new ArrayList<>(removedRoutes))); - } + removedRoutes.addAll(prevInfo.getRoutes()); } else { - mLastProviderInfos.set(providerInfoIndex, providerInfo); - List addedRoutes = new ArrayList<>(); - List removedRoutes = new ArrayList<>(); - List changedRoutes = new ArrayList<>(); - - final Collection currentRoutes = providerInfo.getRoutes(); - final Set updatedRouteIds = new HashSet<>(); + mLastProviderInfos.set(providerInfoIndex, currentInfo); + final Collection prevRoutes = prevInfo.getRoutes(); + final Collection currentRoutes = currentInfo.getRoutes(); for (MediaRoute2Info route : currentRoutes) { if (!route.isValid()) { @@ -1186,37 +1173,33 @@ class MediaRouter2ServiceImpl { continue; } MediaRoute2Info prevRoute = prevInfo.getRoute(route.getOriginalId()); - - if (prevRoute != null) { - if (!Objects.equals(prevRoute, route)) { - changedRoutes.add(route); - } - updatedRouteIds.add(route.getId()); - } else { + if (prevRoute == null) { addedRoutes.add(route); + } else if (!Objects.equals(prevRoute, route)) { + changedRoutes.add(route); } } for (MediaRoute2Info prevRoute : prevInfo.getRoutes()) { - if (!updatedRouteIds.contains(prevRoute.getId())) { + if (currentInfo.getRoute(prevRoute.getOriginalId()) == null) { removedRoutes.add(prevRoute); } } + } - List routers = getRouters(); - List managers = getManagers(); - if (addedRoutes.size() > 0) { - notifyRoutesAddedToRouters(routers, addedRoutes); - notifyRoutesAddedToManagers(managers, addedRoutes); - } - if (removedRoutes.size() > 0) { - notifyRoutesRemovedToRouters(routers, removedRoutes); - notifyRoutesRemovedToManagers(managers, removedRoutes); - } - if (changedRoutes.size() > 0) { - notifyRoutesChangedToRouters(routers, changedRoutes); - notifyRoutesChangedToManagers(managers, changedRoutes); - } + List routers = getRouters(); + List managers = getManagers(); + if (addedRoutes.size() > 0) { + notifyRoutesAddedToRouters(routers, addedRoutes); + notifyRoutesAddedToManagers(managers, addedRoutes); + } + if (removedRoutes.size() > 0) { + notifyRoutesRemovedToRouters(routers, removedRoutes); + notifyRoutesRemovedToManagers(managers, removedRoutes); + } + if (changedRoutes.size() > 0) { + notifyRoutesChangedToRouters(routers, changedRoutes); + notifyRoutesChangedToManagers(managers, changedRoutes); } }