Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3767bda authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Ignore transfer to an unknown route" into rvc-dev

parents 6b1cfced a3be2de6
Loading
Loading
Loading
Loading
+11 −4
Original line number Original line Diff line number Diff line
@@ -342,7 +342,14 @@ public final class MediaRouter2Manager {
        Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
        Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
        Objects.requireNonNull(route, "route 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())) {
        if (sessionInfo.getTransferableRoutes().contains(route.getId())) {
            transferToRoute(sessionInfo, route);
            transferToRoute(sessionInfo, route);
        } else {
        } else {
@@ -581,7 +588,7 @@ public final class MediaRouter2Manager {
    public List<MediaRoute2Info> getSelectedRoutes(@NonNull RoutingSessionInfo sessionInfo) {
    public List<MediaRoute2Info> getSelectedRoutes(@NonNull RoutingSessionInfo sessionInfo) {
        Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
        Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");


        synchronized (sLock) {
        synchronized (mRoutesLock) {
            return sessionInfo.getSelectedRoutes().stream().map(mRoutes::get)
            return sessionInfo.getSelectedRoutes().stream().map(mRoutes::get)
                    .filter(Objects::nonNull)
                    .filter(Objects::nonNull)
                    .collect(Collectors.toList());
                    .collect(Collectors.toList());
@@ -597,7 +604,7 @@ public final class MediaRouter2Manager {


        List<String> selectedRouteIds = sessionInfo.getSelectedRoutes();
        List<String> selectedRouteIds = sessionInfo.getSelectedRoutes();


        synchronized (sLock) {
        synchronized (mRoutesLock) {
            return sessionInfo.getSelectableRoutes().stream()
            return sessionInfo.getSelectableRoutes().stream()
                    .filter(routeId -> !selectedRouteIds.contains(routeId))
                    .filter(routeId -> !selectedRouteIds.contains(routeId))
                    .map(mRoutes::get)
                    .map(mRoutes::get)
@@ -615,7 +622,7 @@ public final class MediaRouter2Manager {


        List<String> selectedRouteIds = sessionInfo.getSelectedRoutes();
        List<String> selectedRouteIds = sessionInfo.getSelectedRoutes();


        synchronized (sLock) {
        synchronized (mRoutesLock) {
            return sessionInfo.getDeselectableRoutes().stream()
            return sessionInfo.getDeselectableRoutes().stream()
                    .filter(routeId -> selectedRouteIds.contains(routeId))
                    .filter(routeId -> selectedRouteIds.contains(routeId))
                    .map(mRoutes::get)
                    .map(mRoutes::get)
+37 −2
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.mediaroutertest;
package com.android.mediaroutertest;


import static android.media.MediaRoute2Info.FEATURE_LIVE_AUDIO;
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_FIXED;
import static android.media.MediaRoute2Info.PLAYBACK_VOLUME_VARIABLE;
import static android.media.MediaRoute2Info.PLAYBACK_VOLUME_VARIABLE;
import static android.media.MediaRoute2ProviderService.REASON_REJECTED;
import static android.media.MediaRoute2ProviderService.REASON_REJECTED;
@@ -81,6 +82,8 @@ public class MediaRouter2ManagerTest {
    private static final int TIMEOUT_MS = 5000;
    private static final int TIMEOUT_MS = 5000;
    private static final String TEST_KEY = "test_key";
    private static final String TEST_KEY = "test_key";
    private static final String TEST_VALUE = "test_value";
    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 Context mContext;
    private MediaRouter2Manager mManager;
    private MediaRouter2Manager mManager;
@@ -311,6 +314,36 @@ public class MediaRouter2ManagerTest {
        assertEquals(1, mManager.getRoutingSessions(mPackageName).size());
        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
     * Tests select, transfer, release of routes of a provider
     */
     */
@@ -670,8 +703,10 @@ public class MediaRouter2ManagerTest {
        mRouter2.registerRouteCallback(mExecutor, routeCallback,
        mRouter2.registerRouteCallback(mExecutor, routeCallback,
                new RouteDiscoveryPreference.Builder(routeFeatures, true).build());
                new RouteDiscoveryPreference.Builder(routeFeatures, true).build());
        try {
        try {
            addedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS);
            if (mManager.getAllRoutes().isEmpty()) {
            featuresLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS);
                addedLatch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS);
            }
            featuresLatch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS);
            return createRouteMap(mManager.getAvailableRoutes(mPackageName));
            return createRouteMap(mManager.getAvailableRoutes(mPackageName));
        } finally {
        } finally {
            mRouter2.unregisterRouteCallback(routeCallback);
            mRouter2.unregisterRouteCallback(routeCallback);