diff options
-rw-r--r-- | media/java/android/media/MediaRouter2Manager.java | 15 | ||||
-rw-r--r-- | media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java | 39 |
2 files changed, 48 insertions, 6 deletions
diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java index dd97209b04dc..673fffe710a2 100644 --- a/media/java/android/media/MediaRouter2Manager.java +++ b/media/java/android/media/MediaRouter2Manager.java @@ -342,7 +342,14 @@ public final class MediaRouter2Manager { Objects.requireNonNull(sessionInfo, "sessionInfo must not be null"); Objects.requireNonNull(route, "route must not be null"); - //TODO(b/157875504): Ignore unknown route. + synchronized (mRoutesLock) { + if (!mRoutes.containsKey(route.getId())) { + Log.w(TAG, "transfer: Ignoring an unknown route id=" + route.getId()); + notifyTransferFailed(sessionInfo, route); + return; + } + } + if (sessionInfo.getTransferableRoutes().contains(route.getId())) { transferToRoute(sessionInfo, route); } else { @@ -581,7 +588,7 @@ public final class MediaRouter2Manager { public List<MediaRoute2Info> getSelectedRoutes(@NonNull RoutingSessionInfo sessionInfo) { Objects.requireNonNull(sessionInfo, "sessionInfo must not be null"); - synchronized (sLock) { + synchronized (mRoutesLock) { return sessionInfo.getSelectedRoutes().stream().map(mRoutes::get) .filter(Objects::nonNull) .collect(Collectors.toList()); @@ -597,7 +604,7 @@ public final class MediaRouter2Manager { List<String> selectedRouteIds = sessionInfo.getSelectedRoutes(); - synchronized (sLock) { + synchronized (mRoutesLock) { return sessionInfo.getSelectableRoutes().stream() .filter(routeId -> !selectedRouteIds.contains(routeId)) .map(mRoutes::get) @@ -615,7 +622,7 @@ public final class MediaRouter2Manager { List<String> selectedRouteIds = sessionInfo.getSelectedRoutes(); - synchronized (sLock) { + synchronized (mRoutesLock) { return sessionInfo.getDeselectableRoutes().stream() .filter(routeId -> selectedRouteIds.contains(routeId)) .map(mRoutes::get) diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java index 76523e49c7c7..356acdcc9dd8 100644 --- a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java +++ b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java @@ -17,6 +17,7 @@ package com.android.mediaroutertest; import static android.media.MediaRoute2Info.FEATURE_LIVE_AUDIO; +import static android.media.MediaRoute2Info.FEATURE_REMOTE_PLAYBACK; import static android.media.MediaRoute2Info.PLAYBACK_VOLUME_FIXED; import static android.media.MediaRoute2Info.PLAYBACK_VOLUME_VARIABLE; import static android.media.MediaRoute2ProviderService.REASON_REJECTED; @@ -81,6 +82,8 @@ public class MediaRouter2ManagerTest { private static final int TIMEOUT_MS = 5000; private static final String TEST_KEY = "test_key"; private static final String TEST_VALUE = "test_value"; + private static final String TEST_ID_UNKNOWN = "id_unknown"; + private static final String TEST_NAME_UNKNOWN = "unknown"; private Context mContext; private MediaRouter2Manager mManager; @@ -311,6 +314,36 @@ public class MediaRouter2ManagerTest { assertEquals(1, mManager.getRoutingSessions(mPackageName).size()); } + @Test + public void testTransfer_unknownRoute_fail() throws Exception { + addRouterCallback(new RouteCallback() {}); + + CountDownLatch onSessionCreatedLatch = new CountDownLatch(1); + CountDownLatch onTransferFailedLatch = new CountDownLatch(1); + + addManagerCallback(new MediaRouter2Manager.Callback() { + @Override + public void onTransferred(RoutingSessionInfo oldSessionInfo, + RoutingSessionInfo newSessionInfo) { + assertNotNull(newSessionInfo); + onSessionCreatedLatch.countDown(); + } + @Override + public void onTransferFailed(RoutingSessionInfo session, MediaRoute2Info route) { + onTransferFailedLatch.countDown(); + } + }); + + MediaRoute2Info unknownRoute = + new MediaRoute2Info.Builder(TEST_ID_UNKNOWN, TEST_NAME_UNKNOWN) + .addFeature(FEATURE_REMOTE_PLAYBACK) + .build(); + + mManager.transfer(mManager.getSystemRoutingSession(), unknownRoute); + assertFalse(onSessionCreatedLatch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS)); + assertTrue(onTransferFailedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); + } + /** * Tests select, transfer, release of routes of a provider */ @@ -670,8 +703,10 @@ public class MediaRouter2ManagerTest { mRouter2.registerRouteCallback(mExecutor, routeCallback, new RouteDiscoveryPreference.Builder(routeFeatures, true).build()); try { - addedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS); - featuresLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS); + if (mManager.getAllRoutes().isEmpty()) { + addedLatch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS); + } + featuresLatch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS); return createRouteMap(mManager.getAvailableRoutes(mPackageName)); } finally { mRouter2.unregisterRouteCallback(routeCallback); |