Ignore transfer to an unknown route
This CL ignores attempts to transfer to unknown route in MediaRouter2Manager. This CL also fixes wrong acquisition of locks when getXXXRoutes. Bug: 157875504 Test: atest mediaroutertest Change-Id: Ic3415844551c672b42d19d9744d7538a9d7df7c3
This commit is contained in:
@@ -337,7 +337,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);
|
||||
return;
|
||||
@@ -595,7 +602,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());
|
||||
@@ -611,7 +618,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)
|
||||
@@ -629,7 +636,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)
|
||||
|
||||
@@ -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;
|
||||
@@ -79,6 +80,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;
|
||||
@@ -309,6 +312,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
|
||||
*/
|
||||
@@ -639,8 +672,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);
|
||||
|
||||
Reference in New Issue
Block a user