Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4ac7a783 authored by Kyunglyul Hyun's avatar Kyunglyul Hyun Committed by Automerger Merge Worker
Browse files

Merge "Hide non transferable routes" into sc-dev am: 88146b48

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14909662

Change-Id: I595973d5819f238813643afd3f5a0e09788ee85b
parents 485dac7c 88146b48
Loading
Loading
Loading
Loading
+55 −3
Original line number Diff line number Diff line
@@ -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.
     */
+2 −2
Original line number Diff line number Diff line
@@ -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());