diff options
4 files changed, 62 insertions, 12 deletions
diff --git a/media/java/android/media/MediaRouter2.java b/media/java/android/media/MediaRouter2.java index bd8fb9602656..cfe6db9fe3cf 100644 --- a/media/java/android/media/MediaRouter2.java +++ b/media/java/android/media/MediaRouter2.java @@ -237,9 +237,9 @@ public final class MediaRouter2 { } catch (RemoteException ex) { Log.e(TAG, "Unable to unregister media router.", ex); } + mStub = null; } mShouldUpdateRoutes = true; - mStub = null; } } diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java index b694fd059bfa..3b570b60ff24 100644 --- a/media/java/android/media/MediaRouter2Manager.java +++ b/media/java/android/media/MediaRouter2Manager.java @@ -147,14 +147,16 @@ public final class MediaRouter2Manager { } synchronized (sLock) { - if (mCallbackRecords.size() == 0 && mClient != null) { - try { - mMediaRouterService.unregisterManager(mClient); - } catch (RemoteException ex) { - Log.e(TAG, "Unable to unregister media router manager", ex); + if (mCallbackRecords.size() == 0) { + if (mClient != null) { + try { + mMediaRouterService.unregisterManager(mClient); + } catch (RemoteException ex) { + Log.e(TAG, "Unable to unregister media router manager", ex); + } + mClient = null; } - //TODO: clear mRoutes? - mClient = null; + mRoutes.clear(); mPreferredFeaturesMap.clear(); } } diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java index 6ca564fb34cc..207534b36f95 100644 --- a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java +++ b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java @@ -36,6 +36,7 @@ import static com.android.mediaroutertest.StubMediaRoute2ProviderService.VOLUME_ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import android.content.Context; @@ -160,6 +161,7 @@ public class MediaRouter2ManagerTest { }); MediaRoute2Info routeToRemove = routes.get(ROUTE_ID2); + assertNotNull(routeToRemove); StubMediaRoute2ProviderService sInstance = StubMediaRoute2ProviderService.getInstance(); @@ -171,6 +173,52 @@ public class MediaRouter2ManagerTest { assertTrue(addedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); } + @Test + public void testGetRoutes_removedRoute_returnsCorrectRoutes() throws Exception { + CountDownLatch addedLatch = new CountDownLatch(1); + CountDownLatch removedLatch = new CountDownLatch(1); + + RouteCallback routeCallback = new RouteCallback() { + // Used to ensure the removed route is added. + @Override + public void onRoutesAdded(List<MediaRoute2Info> routes) { + if (removedLatch.getCount() > 0) { + return; + } + addedLatch.countDown(); + } + + @Override + public void onRoutesRemoved(List<MediaRoute2Info> routes) { + removedLatch.countDown(); + } + }; + + mRouter2.registerRouteCallback(mExecutor, routeCallback, + new RouteDiscoveryPreference.Builder(FEATURES_ALL, true).build()); + mRouteCallbacks.add(routeCallback); + + Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_ALL); + MediaRoute2Info routeToRemove = routes.get(ROUTE_ID2); + assertNotNull(routeToRemove); + + StubMediaRoute2ProviderService sInstance = + StubMediaRoute2ProviderService.getInstance(); + assertNotNull(sInstance); + sInstance.removeRoute(ROUTE_ID2); + + // Wait until the route is removed. + assertTrue(removedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); + + Map<String, MediaRoute2Info> newRoutes = waitAndGetRoutesWithManager(FEATURES_ALL); + assertNull(newRoutes.get(ROUTE_ID2)); + + // Revert the removal. + sInstance.addRoute(routeToRemove); + assertTrue(addedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); + mRouter2.unregisterRouteCallback(routeCallback); + } + /** * Tests if we get proper routes for application that has special route feature. */ @@ -475,8 +523,8 @@ public class MediaRouter2ManagerTest { MediaRouter2Manager.Callback managerCallback = new MediaRouter2Manager.Callback() { @Override public void onRoutesAdded(List<MediaRoute2Info> routes) { - for (int i = 0; i < routes.size(); i++) { - if (!routes.get(i).isSystemRoute()) { + for (MediaRoute2Info route : routes) { + if (!route.isSystemRoute()) { addedLatch.countDown(); break; } diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/StubMediaRoute2ProviderService.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/StubMediaRoute2ProviderService.java index 6d46ba582ddc..4e398f26366a 100644 --- a/media/tests/MediaRouter/src/com/android/mediaroutertest/StubMediaRoute2ProviderService.java +++ b/media/tests/MediaRouter/src/com/android/mediaroutertest/StubMediaRoute2ProviderService.java @@ -65,9 +65,9 @@ public class StubMediaRoute2ProviderService extends MediaRoute2ProviderService { public static final String ROUTE_NAME_VARIABLE_VOLUME = "Variable Volume Route"; public static final String FEATURE_SAMPLE = - "com.android.mediarouteprovider.FEATURE_SAMPLE"; + "com.android.mediaroutertest.FEATURE_SAMPLE"; public static final String FEATURE_SPECIAL = - "com.android.mediarouteprovider.FEATURE_SPECIAL"; + "com.android.mediaroutertest..FEATURE_SPECIAL"; Map<String, MediaRoute2Info> mRoutes = new HashMap<>(); Map<String, String> mRouteIdToSessionId = new HashMap<>(); |