Refactor onProviderStateChangedOnHandler
Bug: 149796428 Test: pass MediaRouter2 tests Change-Id: I7361c045fe6e9d10c6f8c5e44a05d250681b8121
This commit is contained in:
@@ -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<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()) {
|
||||
@@ -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<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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user