Loading media/java/android/media/MediaRouter2Manager.java +23 −14 Original line number Diff line number Diff line Loading @@ -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()); } } /** Loading @@ -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()); } } /** Loading @@ -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()); } } /** Loading Loading @@ -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. */ Loading media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java +37 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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); Loading Loading
media/java/android/media/MediaRouter2Manager.java +23 −14 Original line number Diff line number Diff line Loading @@ -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()); } } /** Loading @@ -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()); } } /** Loading @@ -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()); } } /** Loading Loading @@ -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. */ Loading
media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java +37 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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); Loading