Loading media/java/android/media/MediaRouter2Manager.java +55 −3 Original line number Diff line number Diff line Loading @@ -221,9 +221,23 @@ 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 Loading @@ -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<>(); Loading @@ -255,6 +268,45 @@ public final class MediaRouter2Manager { return routes; } /** * 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. */ Loading packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +2 −2 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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()); Loading Loading
media/java/android/media/MediaRouter2Manager.java +55 −3 Original line number Diff line number Diff line Loading @@ -221,9 +221,23 @@ 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 Loading @@ -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<>(); Loading @@ -255,6 +268,45 @@ public final class MediaRouter2Manager { return routes; } /** * 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. */ Loading
packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +2 −2 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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()); Loading