Merge "Hide non transferable routes" into sc-dev am: 88146b483b
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14909662 Change-Id: I595973d5819f238813643afd3f5a0e09788ee85b
This commit is contained in:
@@ -221,9 +221,23 @@ public final class MediaRouter2Manager {
|
|||||||
Objects.requireNonNull(packageName, "packageName must not be null");
|
Objects.requireNonNull(packageName, "packageName must not be null");
|
||||||
|
|
||||||
List<RoutingSessionInfo> sessions = getRoutingSessions(packageName);
|
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.
|
* Gets available routes for the given routing session.
|
||||||
* The returned routes can be passed to
|
* The returned routes can be passed to
|
||||||
@@ -232,8 +246,7 @@ public final class MediaRouter2Manager {
|
|||||||
* @param sessionInfo the routing session that would be transferred
|
* @param sessionInfo the routing session that would be transferred
|
||||||
*/
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public List<MediaRoute2Info> getAvailableRoutesForRoutingSession(
|
public List<MediaRoute2Info> getAvailableRoutes(@NonNull RoutingSessionInfo sessionInfo) {
|
||||||
@NonNull RoutingSessionInfo sessionInfo) {
|
|
||||||
Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
|
Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
|
||||||
|
|
||||||
List<MediaRoute2Info> routes = new ArrayList<>();
|
List<MediaRoute2Info> routes = new ArrayList<>();
|
||||||
@@ -255,6 +268,45 @@ public final class MediaRouter2Manager {
|
|||||||
return routes;
|
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.
|
* Returns the preferred features of the specified package name.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -372,7 +372,7 @@ public class InfoMediaManager extends MediaManager {
|
|||||||
Log.w(TAG, "shouldDisableMediaOutput() package name is null or empty!");
|
Log.w(TAG, "shouldDisableMediaOutput() package name is null or empty!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
final List<MediaRoute2Info> infos = mRouterManager.getAvailableRoutes(packageName);
|
final List<MediaRoute2Info> infos = mRouterManager.getTransferableRoutes(packageName);
|
||||||
if (infos.size() == 1) {
|
if (infos.size() == 1) {
|
||||||
final MediaRoute2Info info = infos.get(0);
|
final MediaRoute2Info info = infos.get(0);
|
||||||
final int deviceType = info.getType();
|
final int deviceType = info.getType();
|
||||||
@@ -456,7 +456,7 @@ public class InfoMediaManager extends MediaManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void buildAvailableRoutes() {
|
private void buildAvailableRoutes() {
|
||||||
for (MediaRoute2Info route : mRouterManager.getAvailableRoutes(mPackageName)) {
|
for (MediaRoute2Info route : mRouterManager.getTransferableRoutes(mPackageName)) {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "buildAvailableRoutes() route : " + route.getName() + ", volume : "
|
Log.d(TAG, "buildAvailableRoutes() route : " + route.getName() + ", volume : "
|
||||||
+ route.getVolume() + ", type : " + route.getType());
|
+ route.getVolume() + ", type : " + route.getType());
|
||||||
|
|||||||
Reference in New Issue
Block a user