Merge "Refactor onProviderStateChangedOnHandler" into rvc-dev
diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
index 4896ba8..52e9d7c 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.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;
@@ -1148,35 +1146,24 @@
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<MediaRoute2Info> addedRoutes = new ArrayList<>();
+ List<MediaRoute2Info> removedRoutes = new ArrayList<>();
+ List<MediaRoute2Info> changedRoutes = new ArrayList<>();
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.add(currentInfo);
+ addedRoutes.addAll(currentInfo.getRoutes());
+ } else if (currentInfo == null) {
mLastProviderInfos.remove(prevInfo);
- Collection<MediaRoute2Info> 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<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<>();
+ mLastProviderInfos.set(providerInfoIndex, currentInfo);
+ final Collection<MediaRoute2Info> prevRoutes = prevInfo.getRoutes();
+ final Collection<MediaRoute2Info> currentRoutes = currentInfo.getRoutes();
for (MediaRoute2Info route : currentRoutes) {
if (!route.isValid()) {
@@ -1184,37 +1171,33 @@
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();
- 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<IMediaRouter2> routers = getRouters();
+ List<IMediaRouter2Manager> 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);
}
}