diff options
author | Kyunglyul Hyun <klhyun@google.com> | 2021-06-30 05:06:54 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-06-30 05:06:54 +0000 |
commit | 88146b483b09d94a53a052c4c518b054496be825 (patch) | |
tree | ce6fc94c73069994921aa75aaf95c446e34cd502 | |
parent | 38dfae8c31d69aa7e1efd828e8e0f16c3d45c889 (diff) | |
parent | e224e3420ce94290ec8f8e7cc0995b1921ec30ce (diff) |
Merge "Hide non transferable routes" into sc-dev
-rw-r--r-- | media/java/android/media/MediaRouter2Manager.java | 58 | ||||
-rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java | 4 |
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()); |