summaryrefslogtreecommitdiff
path: root/media
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 /media
parent38dfae8c31d69aa7e1efd828e8e0f16c3d45c889 (diff)
parente224e3420ce94290ec8f8e7cc0995b1921ec30ce (diff)
Merge "Hide non transferable routes" into sc-dev
Diffstat (limited to 'media')
-rw-r--r--media/java/android/media/MediaRouter2Manager.java58
1 files changed, 55 insertions, 3 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