Refactor onProviderStateChangedOnHandler

Bug: 149796428
Test: pass MediaRouter2 tests
Change-Id: I7361c045fe6e9d10c6f8c5e44a05d250681b8121
This commit is contained in:
Sungsoo Lim
2020-04-02 16:00:22 +09:00
parent e025fcef40
commit 82268bda43

View File

@@ -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);
}
}