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

Commit 0d39f065 authored by Kyunglyul Hyun's avatar Kyunglyul Hyun Committed by Automerger Merge Worker
Browse files

Merge "Clean up MediaRouter2Manager" into rvc-dev am: 8a028947

Change-Id: I857b733a1a127cd5a3d576dd8a15d8ca7b2c5018
parents c5bd9daf 8a028947
Loading
Loading
Loading
Loading
+0 −172
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import android.annotation.Nullable;
import android.content.Context;
import android.media.session.MediaController;
import android.media.session.MediaSessionManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -342,14 +341,6 @@ public final class MediaRouter2Manager {
        }
    }

    /**
     * Requests a volume change for a route asynchronously.
     */
    //TODO: remove this.
    public void requestSetVolume(MediaRoute2Info route, int volume) {
        setRouteVolume(route, volume);
    }

    /**
     * Requests a volume change for a route asynchronously.
     * <p>
@@ -574,23 +565,12 @@ public final class MediaRouter2Manager {
                || Objects.equals(preferredFeatures, prevFeatures)) {
            return;
        }
        for (CallbackRecord record : mCallbackRecords) {
            record.mExecutor.execute(() -> record.mCallback
                    .onControlCategoriesChanged(packageName, preferredFeatures));
        }
        for (CallbackRecord record : mCallbackRecords) {
            record.mExecutor.execute(() -> record.mCallback
                    .onPreferredFeaturesChanged(packageName, preferredFeatures));
        }
    }

    /**
     * @hide
     */
    public RoutingController getControllerForSession(@NonNull RoutingSessionInfo sessionInfo) {
        return new RoutingController(sessionInfo);
    }

    /**
     * Gets the unmodifiable list of selected routes for the session.
     */
@@ -790,148 +770,6 @@ public final class MediaRouter2Manager {
        }
    }

    //TODO: Remove this.
    /**
     * A class to control media routing session in media route provider.
     * With routing controller, an application can select a route into the session or deselect
     * a route in the session.
     */
    public final class RoutingController {
        private final Object mControllerLock = new Object();
        @GuardedBy("mControllerLock")
        private RoutingSessionInfo mSessionInfo;

        RoutingController(@NonNull RoutingSessionInfo sessionInfo) {
            mSessionInfo = sessionInfo;
        }

        /**
         * Releases the session
         */
        public void release() {
            synchronized (mControllerLock) {
                releaseSession(mSessionInfo);
            }
        }

        /**
         * Gets the ID of the session
         */
        @NonNull
        public String getSessionId() {
            synchronized (mControllerLock) {
                return mSessionInfo.getId();
            }
        }

        /**
         * Gets the client package name of the session
         */
        @NonNull
        public String getClientPackageName() {
            synchronized (mControllerLock) {
                return mSessionInfo.getClientPackageName();
            }
        }

        /**
         * @return the control hints used to control route session if available.
         */
        @Nullable
        public Bundle getControlHints() {
            synchronized (mControllerLock) {
                return mSessionInfo.getControlHints();
            }
        }

        /**
         * @return the unmodifiable list of currently selected routes
         */
        @NonNull
        public List<MediaRoute2Info> getSelectedRoutes() {
            return MediaRouter2Manager.this.getSelectedRoutes(mSessionInfo);
        }

        /**
         * @return the unmodifiable list of selectable routes for the session.
         */
        @NonNull
        public List<MediaRoute2Info> getSelectableRoutes() {
            return MediaRouter2Manager.this.getSelectableRoutes(mSessionInfo);
        }

        /**
         * @return the unmodifiable list of deselectable routes for the session.
         */
        @NonNull
        public List<MediaRoute2Info> getDeselectableRoutes() {
            return MediaRouter2Manager.this.getDeselectableRoutes(mSessionInfo);
        }

        /**
         * @return the unmodifiable list of transferable routes for the session.
         */
        @NonNull
        public List<MediaRoute2Info> getTransferableRoutes() {
            List<String> routeIds;
            synchronized (mControllerLock) {
                routeIds = mSessionInfo.getTransferableRoutes();
            }
            return getRoutesWithIds(routeIds);
        }

        /**
         * Selects a route for the remote session. The given route must satisfy all of the
         * following conditions:
         * <ul>
         * <li>ID should not be included in {@link #getSelectedRoutes()}</li>
         * <li>ID should be included in {@link #getSelectableRoutes()}</li>
         * </ul>
         * If the route doesn't meet any of above conditions, it will be ignored.
         *
         * @see #getSelectedRoutes()
         * @see #getSelectableRoutes()
         */
        public void selectRoute(@NonNull MediaRoute2Info route) {
            MediaRouter2Manager.this.selectRoute(mSessionInfo, route);
        }

        /**
         * Deselects a route from the remote session. The given route must satisfy all of the
         * following conditions:
         * <ul>
         * <li>ID should be included in {@link #getSelectedRoutes()}</li>
         * <li>ID should be included in {@link #getDeselectableRoutes()}</li>
         * </ul>
         * If the route doesn't meet any of above conditions, it will be ignored.
         *
         * @see #getSelectedRoutes()
         * @see #getDeselectableRoutes()
         */
        public void deselectRoute(@NonNull MediaRoute2Info route) {
            MediaRouter2Manager.this.deselectRoute(mSessionInfo, route);
        }

        /**
         * Transfers session to the given rotue.
         */
        public void transferToRoute(@NonNull MediaRoute2Info route) {
            MediaRouter2Manager.this.transferToRoute(mSessionInfo, route);
        }

        /**
         * Gets the session info of the session
         *
         * @hide
         */
        @NonNull
        public RoutingSessionInfo getSessionInfo() {
            synchronized (mControllerLock) {
                return mSessionInfo;
            }
        }
    }

    /**
     * Interface for receiving events about media routing changes.
     */
@@ -976,16 +814,6 @@ public final class MediaRouter2Manager {
        public void onTransferFailed(@NonNull RoutingSessionInfo session,
                @NonNull MediaRoute2Info route) { }

        //TODO: Remove this.
        /**
         * Called when the preferred route features of an app is changed.
         *
         * @param packageName the package name of the application
         * @param preferredFeatures the list of preferred route features set by an application.
         */
        public void onControlCategoriesChanged(@NonNull String packageName,
                @NonNull List<String> preferredFeatures) {}

        /**
         * Called when the preferred route features of an app is changed.
         *
+6 −10
Original line number Diff line number Diff line
@@ -108,10 +108,8 @@ public class InfoMediaManager extends MediaManager {
        final List<RoutingSessionInfo> infos = mRouterManager.getActiveSessions();
        if (infos.size() > 0) {
            final RoutingSessionInfo info = infos.get(0);
            final MediaRouter2Manager.RoutingController controller =
                    mRouterManager.getControllerForSession(info);
            mRouterManager.transfer(info, device.mRouteInfo);

            controller.transferToRoute(device.mRouteInfo);
            isConnected = true;
        }
        return isConnected;
@@ -131,7 +129,7 @@ public class InfoMediaManager extends MediaManager {

        final RoutingSessionInfo info = getRoutingSessionInfo();
        if (info != null && info.getSelectableRoutes().contains(device.mRouteInfo.getId())) {
            mRouterManager.getControllerForSession(info).selectRoute(device.mRouteInfo);
            mRouterManager.selectRoute(info, device.mRouteInfo);
            return true;
        }

@@ -162,7 +160,7 @@ public class InfoMediaManager extends MediaManager {

        final RoutingSessionInfo info = getRoutingSessionInfo();
        if (info != null && info.getSelectedRoutes().contains(device.mRouteInfo.getId())) {
            mRouterManager.getControllerForSession(info).deselectRoute(device.mRouteInfo);
            mRouterManager.deselectRoute(info, device.mRouteInfo);
            return true;
        }

@@ -207,8 +205,7 @@ public class InfoMediaManager extends MediaManager {

        final RoutingSessionInfo info = getRoutingSessionInfo();
        if (info != null) {
            for (MediaRoute2Info route : mRouterManager.getControllerForSession(info)
                    .getSelectableRoutes()) {
            for (MediaRoute2Info route : mRouterManager.getSelectableRoutes(info)) {
                deviceList.add(new InfoMediaDevice(mContext, mRouterManager,
                        route, mPackageName));
            }
@@ -235,8 +232,7 @@ public class InfoMediaManager extends MediaManager {

        final RoutingSessionInfo info = getRoutingSessionInfo();
        if (info != null) {
            for (MediaRoute2Info route : mRouterManager.getControllerForSession(info)
                    .getSelectedRoutes()) {
            for (MediaRoute2Info route : mRouterManager.getSelectedRoutes(info)) {
                deviceList.add(new InfoMediaDevice(mContext, mRouterManager,
                        route, mPackageName));
            }
@@ -434,7 +430,7 @@ public class InfoMediaManager extends MediaManager {
        }

        @Override
        public void onControlCategoriesChanged(String packageName, List<String> controlCategories) {
        public void onPreferredFeaturesChanged(String packageName, List<String> preferredFeatures) {
            if (TextUtils.equals(mPackageName, packageName)) {
                refreshDevices();
            }
+1 −1
Original line number Diff line number Diff line
@@ -180,7 +180,7 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
     */

    public void requestSetVolume(int volume) {
        mRouterManager.requestSetVolume(mRouteInfo, volume);
        mRouterManager.setRouteVolume(mRouteInfo, volume);
    }

    /**
+4 −4
Original line number Diff line number Diff line
@@ -136,7 +136,7 @@ public class InfoMediaManagerTest {
    }

    @Test
    public void onControlCategoriesChanged_samePackageName_shouldAddMediaDevice() {
    public void onPreferredFeaturesChanged_samePackageName_shouldAddMediaDevice() {
        final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
        final RoutingSessionInfo sessionInfo = mock(RoutingSessionInfo.class);
        routingSessionInfos.add(sessionInfo);
@@ -156,7 +156,7 @@ public class InfoMediaManagerTest {
        final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
        assertThat(mediaDevice).isNull();

        mInfoMediaManager.mMediaRouterCallback.onControlCategoriesChanged(TEST_PACKAGE_NAME, null);
        mInfoMediaManager.mMediaRouterCallback.onPreferredFeaturesChanged(TEST_PACKAGE_NAME, null);

        final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
        assertThat(infoDevice.getId()).isEqualTo(TEST_ID);
@@ -165,8 +165,8 @@ public class InfoMediaManagerTest {
    }

    @Test
    public void onControlCategoriesChanged_differentPackageName_doNothing() {
        mInfoMediaManager.mMediaRouterCallback.onControlCategoriesChanged("com.fake.play", null);
    public void onPreferredFeaturesChanged_differentPackageName_doNothing() {
        mInfoMediaManager.mMediaRouterCallback.onPreferredFeaturesChanged("com.fake.play", null);

        assertThat(mInfoMediaManager.mMediaDevices).hasSize(0);
    }