diff options
-rw-r--r-- | media/java/android/media/MediaRouter2Manager.java | 37 | ||||
-rw-r--r-- | media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java | 37 |
2 files changed, 60 insertions, 14 deletions
diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java index e3c7336905d1..0dc019cc7abd 100644 --- a/media/java/android/media/MediaRouter2Manager.java +++ b/media/java/android/media/MediaRouter2Manager.java @@ -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. */ diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java index 6a1e9656cf2c..eee797af40d7 100644 --- a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java +++ b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java @@ -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); |