Filter selectable/deselectable routes
Only selected routes can be deselectable and not selected routes can be selectable from this CL. Bug: 154918270 Test: Manually and atest mediaroutertest Change-Id: I2e66d814190b003c935b21a744d24fa2b5d2c7ac
This commit is contained in:
@@ -635,8 +635,11 @@ public final class MediaRouter2Manager {
|
||||
public List<MediaRoute2Info> getSelectedRoutes(@NonNull RoutingSessionInfo sessionInfo) {
|
||||
Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
|
||||
|
||||
List<String> routeIds = sessionInfo.getSelectedRoutes();
|
||||
return getRoutesWithIds(routeIds);
|
||||
synchronized (sLock) {
|
||||
return sessionInfo.getSelectedRoutes().stream().map(mRoutes::get)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -646,8 +649,15 @@ public final class MediaRouter2Manager {
|
||||
public List<MediaRoute2Info> getSelectableRoutes(@NonNull RoutingSessionInfo sessionInfo) {
|
||||
Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
|
||||
|
||||
List<String> routeIds = sessionInfo.getSelectableRoutes();
|
||||
return getRoutesWithIds(routeIds);
|
||||
List<String> selectedRouteIds = sessionInfo.getSelectedRoutes();
|
||||
|
||||
synchronized (sLock) {
|
||||
return sessionInfo.getSelectableRoutes().stream()
|
||||
.filter(routeId -> !selectedRouteIds.contains(routeId))
|
||||
.map(mRoutes::get)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -657,8 +667,15 @@ public final class MediaRouter2Manager {
|
||||
public List<MediaRoute2Info> getDeselectableRoutes(@NonNull RoutingSessionInfo sessionInfo) {
|
||||
Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
|
||||
|
||||
List<String> routeIds = sessionInfo.getDeselectableRoutes();
|
||||
return getRoutesWithIds(routeIds);
|
||||
List<String> selectedRouteIds = sessionInfo.getSelectedRoutes();
|
||||
|
||||
synchronized (sLock) {
|
||||
return sessionInfo.getDeselectableRoutes().stream()
|
||||
.filter(routeId -> selectedRouteIds.contains(routeId))
|
||||
.map(mRoutes::get)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -840,14 +857,6 @@ public final class MediaRouter2Manager {
|
||||
sessionInfo.getOwnerPackageName());
|
||||
}
|
||||
|
||||
private List<MediaRoute2Info> getRoutesWithIds(List<String> routeIds) {
|
||||
synchronized (sLock) {
|
||||
return routeIds.stream().map(mRoutes::get)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Interface for receiving events about media routing changes.
|
||||
*/
|
||||
|
||||
@@ -26,6 +26,7 @@ import static com.android.mediaroutertest.StubMediaRoute2ProviderService.FEATURE
|
||||
import static com.android.mediaroutertest.StubMediaRoute2ProviderService.FEATURE_SPECIAL;
|
||||
import static com.android.mediaroutertest.StubMediaRoute2ProviderService.ROUTE_ID1;
|
||||
import static com.android.mediaroutertest.StubMediaRoute2ProviderService.ROUTE_ID2;
|
||||
import static com.android.mediaroutertest.StubMediaRoute2ProviderService.ROUTE_ID4_TO_SELECT_AND_DESELECT;
|
||||
import static com.android.mediaroutertest.StubMediaRoute2ProviderService.ROUTE_ID5_TO_TRANSFER_TO;
|
||||
import static com.android.mediaroutertest.StubMediaRoute2ProviderService.ROUTE_ID_FIXED_VOLUME;
|
||||
import static com.android.mediaroutertest.StubMediaRoute2ProviderService.ROUTE_ID_SPECIAL_FEATURE;
|
||||
@@ -68,6 +69,7 @@ import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@SmallTest
|
||||
@@ -566,6 +568,41 @@ public class MediaRouter2ManagerTest {
|
||||
assertFalse(failureLatch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests if getSelectableRoutes and getDeselectableRoutes filter routes based on
|
||||
* selected routes
|
||||
*/
|
||||
@Test
|
||||
public void testGetSelectableRoutes_notReturnsSelectedRoutes() throws Exception {
|
||||
Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_ALL);
|
||||
addRouterCallback(new RouteCallback() {});
|
||||
|
||||
CountDownLatch onSessionCreatedLatch = new CountDownLatch(1);
|
||||
|
||||
addManagerCallback(new MediaRouter2Manager.Callback() {
|
||||
@Override
|
||||
public void onTransferred(RoutingSessionInfo oldSessionInfo,
|
||||
RoutingSessionInfo newSessionInfo) {
|
||||
assertNotNull(newSessionInfo);
|
||||
List<String> selectedRoutes = mManager.getSelectedRoutes(newSessionInfo).stream()
|
||||
.map(MediaRoute2Info::getId)
|
||||
.collect(Collectors.toList());
|
||||
for (MediaRoute2Info selectableRoute :
|
||||
mManager.getSelectableRoutes(newSessionInfo)) {
|
||||
assertFalse(selectedRoutes.contains(selectableRoute.getId()));
|
||||
}
|
||||
for (MediaRoute2Info deselectableRoute :
|
||||
mManager.getDeselectableRoutes(newSessionInfo)) {
|
||||
assertTrue(selectedRoutes.contains(deselectableRoute.getId()));
|
||||
}
|
||||
onSessionCreatedLatch.countDown();
|
||||
}
|
||||
});
|
||||
|
||||
mManager.selectRoute(mPackageName, routes.get(ROUTE_ID4_TO_SELECT_AND_DESELECT));
|
||||
assertTrue(onSessionCreatedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
|
||||
Map<String, MediaRoute2Info> waitAndGetRoutesWithManager(List<String> routeFeatures)
|
||||
throws Exception {
|
||||
CountDownLatch addedLatch = new CountDownLatch(1);
|
||||
|
||||
Reference in New Issue
Block a user