Merge "Clean up MediaRouter2Manager" into rvc-dev
diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java
index 5d61dd0..6c9013f 100644
--- a/media/java/android/media/MediaRouter2Manager.java
+++ b/media/java/android/media/MediaRouter2Manager.java
@@ -24,7 +24,6 @@
 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;
@@ -344,14 +343,6 @@
 
     /**
      * 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>
      * It may have no effect if the route is currently not selected.
      * </p>
@@ -576,22 +567,11 @@
         }
         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.
      */
     @NonNull
@@ -790,148 +770,6 @@
         }
     }
 
-    //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 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.
          *
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
index 436f2fa..1d06df0 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
@@ -108,10 +108,8 @@
         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 @@
 
         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 @@
 
         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 @@
 
         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 @@
 
         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 @@
         }
 
         @Override
-        public void onControlCategoriesChanged(String packageName, List<String> controlCategories) {
+        public void onPreferredFeaturesChanged(String packageName, List<String> preferredFeatures) {
             if (TextUtils.equals(mPackageName, packageName)) {
                 refreshDevices();
             }
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java
index f1c0f6b..34de152 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java
@@ -180,7 +180,7 @@
      */
 
     public void requestSetVolume(int volume) {
-        mRouterManager.requestSetVolume(mRouteInfo, volume);
+        mRouterManager.setRouteVolume(mRouteInfo, volume);
     }
 
     /**
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java
index 2ed9c7b..99c568a 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java
@@ -136,7 +136,7 @@
     }
 
     @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 @@
         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 @@
     }
 
     @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);
     }