Merge "Hide non transferable routes" into sc-dev

This commit is contained in:
Kyunglyul Hyun
2021-06-30 05:06:54 +00:00
committed by Android (Google) Code Review
2 changed files with 57 additions and 5 deletions

View File

@@ -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
@@ -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<>();
@@ -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.
*/

View File

@@ -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());