summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyunglyul Hyun <klhyun@google.com>2021-06-30 05:06:54 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-06-30 05:06:54 +0000
commit88146b483b09d94a53a052c4c518b054496be825 (patch)
treece6fc94c73069994921aa75aaf95c446e34cd502
parent38dfae8c31d69aa7e1efd828e8e0f16c3d45c889 (diff)
parente224e3420ce94290ec8f8e7cc0995b1921ec30ce (diff)
Merge "Hide non transferable routes" into sc-dev
-rw-r--r--media/java/android/media/MediaRouter2Manager.java58
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java4
2 files changed, 57 insertions, 5 deletions
diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java
index 915cb1272040..628f7eef84f9 100644
--- a/media/java/android/media/MediaRouter2Manager.java
+++ b/media/java/android/media/MediaRouter2Manager.java
@@ -221,10 +221,24 @@ public final class MediaRouter2Manager {
Objects.requireNonNull(packageName, "packageName must not be null");
List<RoutingSessionInfo> sessions = getRoutingSessions(packageName);
- return getAvailableRoutesForRoutingSession(sessions.get(sessions.size() - 1));
+ return getAvailableRoutes(sessions.get(sessions.size() - 1));
}
/**
+ * Gets routes that can be transferable seamlessly for an application.
+ *
+ * @param packageName the package name of the application
+ */
+ @NonNull
+ public List<MediaRoute2Info> getTransferableRoutes(@NonNull String packageName) {
+ Objects.requireNonNull(packageName, "packageName must not be null");
+
+ List<RoutingSessionInfo> sessions = getRoutingSessions(packageName);
+ return getTransferableRoutes(sessions.get(sessions.size() - 1));
+ }
+
+
+ /**
* Gets available routes for the given routing session.
* The returned routes can be passed to
* {@link #transfer(RoutingSessionInfo, MediaRoute2Info)} for transferring the routing session.
@@ -232,8 +246,7 @@ public final class MediaRouter2Manager {
* @param sessionInfo the routing session that would be transferred
*/
@NonNull
- public List<MediaRoute2Info> getAvailableRoutesForRoutingSession(
- @NonNull RoutingSessionInfo sessionInfo) {
+ public List<MediaRoute2Info> getAvailableRoutes(@NonNull RoutingSessionInfo sessionInfo) {
Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
List<MediaRoute2Info> routes = new ArrayList<>();
@@ -256,6 +269,45 @@ public final class MediaRouter2Manager {
}
/**
+ * Gets routes that can be transferable seamlessly for the given routing session.
+ * The returned routes can be passed to
+ * {@link #transfer(RoutingSessionInfo, MediaRoute2Info)} for transferring the routing session.
+ * <p>
+ * This includes routes that are {@link RoutingSessionInfo#getTransferableRoutes() transferable}
+ * by provider itself and routes that are different playback type (e.g. local/remote)
+ * from the given routing session.
+ *
+ * @param sessionInfo the routing session that would be transferred
+ */
+ @NonNull
+ public List<MediaRoute2Info> getTransferableRoutes(@NonNull RoutingSessionInfo sessionInfo) {
+ Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
+
+ List<MediaRoute2Info> routes = new ArrayList<>();
+
+ String packageName = sessionInfo.getClientPackageName();
+ List<String> preferredFeatures = mPreferredFeaturesMap.get(packageName);
+ if (preferredFeatures == null) {
+ preferredFeatures = Collections.emptyList();
+ }
+ synchronized (mRoutesLock) {
+ for (MediaRoute2Info route : mRoutes.values()) {
+ if (sessionInfo.getSelectedRoutes().contains(route.getId())
+ || sessionInfo.getTransferableRoutes().contains(route.getId())) {
+ routes.add(route);
+ continue;
+ }
+ // Add Phone -> Cast and Cast -> Phone
+ if (route.hasAnyFeatures(preferredFeatures)
+ && (sessionInfo.isSystemSession() ^ route.isSystemRoute())) {
+ routes.add(route);
+ }
+ }
+ }
+ return routes;
+ }
+
+ /**
* Returns the preferred features of the specified package name.
*/
@NonNull
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
index 6b1e282ecdd8..79446e430d4f 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
@@ -372,7 +372,7 @@ public class InfoMediaManager extends MediaManager {
Log.w(TAG, "shouldDisableMediaOutput() package name is null or empty!");
return false;
}
- final List<MediaRoute2Info> infos = mRouterManager.getAvailableRoutes(packageName);
+ final List<MediaRoute2Info> infos = mRouterManager.getTransferableRoutes(packageName);
if (infos.size() == 1) {
final MediaRoute2Info info = infos.get(0);
final int deviceType = info.getType();
@@ -456,7 +456,7 @@ public class InfoMediaManager extends MediaManager {
}
private void buildAvailableRoutes() {
- for (MediaRoute2Info route : mRouterManager.getAvailableRoutes(mPackageName)) {
+ for (MediaRoute2Info route : mRouterManager.getTransferableRoutes(mPackageName)) {
if (DEBUG) {
Log.d(TAG, "buildAvailableRoutes() route : " + route.getName() + ", volume : "
+ route.getVolume() + ", type : " + route.getType());