summaryrefslogtreecommitdiff
path: root/media/tests
diff options
context:
space:
mode:
authorKyunglyul Hyun <klhyun@google.com>2020-04-17 23:09:08 +0900
committerKyunglyul Hyun <klhyun@google.com>2020-04-21 14:58:31 +0900
commit350d7b427ea1daba67e19ba263017f54f0e09db5 (patch)
tree268384d59b1a175b0e9e3ae1af08c0a6333638f8 /media/tests
parent9c5a02c269f63b1a331be6ec07747ed8ef608c10 (diff)
Clear routes when media router manager has no callback
This CL clears routes when the last callback of MediaRouter2Manager is unregistered. By doing this, we can ensure MediaRouter2Manager#getAvailableRoutes() returns correct routes during at least a single callback is registered. A test for the behavior is added as well. This CL also fixed a bug that unregistering a callback from MediaRouter2 disconnects it when multiple callback is used. Bug: 153515567 Test: atest mediaroutertest & cts test & manually using MediaRouter2Demo and Sample OutputSwitcher to see if forgotten BT device is correctly removed. (w/o this CL forgotten BT device remains) Change-Id: I31a5001115f1f163c8971bbd906516551b860252
Diffstat (limited to 'media/tests')
-rw-r--r--media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java52
-rw-r--r--media/tests/MediaRouter/src/com/android/mediaroutertest/StubMediaRoute2ProviderService.java4
2 files changed, 52 insertions, 4 deletions
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<>();