Loading services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +30 −47 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -1148,35 +1146,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; if (prevInfo == null) { mLastProviderInfos.add(providerInfo); Collection<MediaRoute2Info> addedRoutes = providerInfo.getRoutes(); if (addedRoutes.size() > 0) { sendMessage(PooledLambda.obtainMessage(UserHandler::notifyRoutesAddedToRouters, this, getRouters(), new ArrayList<>(addedRoutes))); } } else if (providerInfo == null) { mLastProviderInfos.remove(prevInfo); Collection<MediaRoute2Info> removedRoutes = prevInfo.getRoutes(); if (removedRoutes.size() > 0) { sendMessage(PooledLambda.obtainMessage( UserHandler::notifyRoutesRemovedToRouters, this, getRouters(), new ArrayList<>(removedRoutes))); } } else { mLastProviderInfos.set(providerInfoIndex, providerInfo); List<MediaRoute2Info> addedRoutes = new ArrayList<>(); List<MediaRoute2Info> removedRoutes = new ArrayList<>(); List<MediaRoute2Info> changedRoutes = new ArrayList<>(); final Collection<MediaRoute2Info> currentRoutes = providerInfo.getRoutes(); final Set<String> updatedRouteIds = new HashSet<>(); if (prevInfo == null) { mLastProviderInfos.add(currentInfo); addedRoutes.addAll(currentInfo.getRoutes()); } else if (currentInfo == null) { mLastProviderInfos.remove(prevInfo); removedRoutes.addAll(prevInfo.getRoutes()); } else { mLastProviderInfos.set(providerInfoIndex, currentInfo); final Collection<MediaRoute2Info> prevRoutes = prevInfo.getRoutes(); final Collection<MediaRoute2Info> currentRoutes = currentInfo.getRoutes(); for (MediaRoute2Info route : currentRoutes) { if (!route.isValid()) { Loading @@ -1184,22 +1171,19 @@ 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<IMediaRouter2> routers = getRouters(); List<IMediaRouter2Manager> managers = getManagers(); Loading @@ -1216,7 +1200,6 @@ class MediaRouter2ServiceImpl { notifyRoutesChangedToManagers(managers, changedRoutes); } } } private int getLastProviderInfoIndex(@NonNull String providerId) { for (int i = 0; i < mLastProviderInfos.size(); i++) { Loading Loading
services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +30 −47 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -1148,35 +1146,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; if (prevInfo == null) { mLastProviderInfos.add(providerInfo); Collection<MediaRoute2Info> addedRoutes = providerInfo.getRoutes(); if (addedRoutes.size() > 0) { sendMessage(PooledLambda.obtainMessage(UserHandler::notifyRoutesAddedToRouters, this, getRouters(), new ArrayList<>(addedRoutes))); } } else if (providerInfo == null) { mLastProviderInfos.remove(prevInfo); Collection<MediaRoute2Info> removedRoutes = prevInfo.getRoutes(); if (removedRoutes.size() > 0) { sendMessage(PooledLambda.obtainMessage( UserHandler::notifyRoutesRemovedToRouters, this, getRouters(), new ArrayList<>(removedRoutes))); } } else { mLastProviderInfos.set(providerInfoIndex, providerInfo); List<MediaRoute2Info> addedRoutes = new ArrayList<>(); List<MediaRoute2Info> removedRoutes = new ArrayList<>(); List<MediaRoute2Info> changedRoutes = new ArrayList<>(); final Collection<MediaRoute2Info> currentRoutes = providerInfo.getRoutes(); final Set<String> updatedRouteIds = new HashSet<>(); if (prevInfo == null) { mLastProviderInfos.add(currentInfo); addedRoutes.addAll(currentInfo.getRoutes()); } else if (currentInfo == null) { mLastProviderInfos.remove(prevInfo); removedRoutes.addAll(prevInfo.getRoutes()); } else { mLastProviderInfos.set(providerInfoIndex, currentInfo); final Collection<MediaRoute2Info> prevRoutes = prevInfo.getRoutes(); final Collection<MediaRoute2Info> currentRoutes = currentInfo.getRoutes(); for (MediaRoute2Info route : currentRoutes) { if (!route.isValid()) { Loading @@ -1184,22 +1171,19 @@ 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<IMediaRouter2> routers = getRouters(); List<IMediaRouter2Manager> managers = getManagers(); Loading @@ -1216,7 +1200,6 @@ class MediaRouter2ServiceImpl { notifyRoutesChangedToManagers(managers, changedRoutes); } } } private int getLastProviderInfoIndex(@NonNull String providerId) { for (int i = 0; i < mLastProviderInfos.size(); i++) { Loading