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

Commit b8e1cbaa authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add a new overload of setVisibilityRestricted" into main

parents e77232f6 5390debd
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -25357,6 +25357,7 @@ package android.media {
    method @NonNull public android.media.MediaRoute2Info.Builder setType(int);
    method @NonNull public android.media.MediaRoute2Info.Builder setVisibilityPublic();
    method @NonNull public android.media.MediaRoute2Info.Builder setVisibilityRestricted(@NonNull java.util.Set<java.lang.String>);
    method @FlaggedApi("com.android.media.flags.enable_route_visibility_control_api") @NonNull public android.media.MediaRoute2Info.Builder setVisibilityRestricted(@NonNull java.util.Set<java.lang.String>, boolean);
    method @NonNull public android.media.MediaRoute2Info.Builder setVolume(int);
    method @NonNull public android.media.MediaRoute2Info.Builder setVolumeHandling(int);
    method @NonNull public android.media.MediaRoute2Info.Builder setVolumeMax(int);
+53 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
import android.annotation.TestApi;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcel;
@@ -40,6 +41,7 @@ import android.os.Parcelable;
import android.text.TextUtils;

import com.android.internal.util.Preconditions;
import com.android.media.flags.Flags;

import java.io.PrintWriter;
import java.lang.annotation.Retention;
@@ -50,6 +52,7 @@ import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;

/**
@@ -642,6 +645,7 @@ public final class MediaRoute2Info implements Parcelable {
    private final String mProviderId;
    private final boolean mIsVisibilityRestricted;
    private final Set<String> mAllowedPackages;
    private final boolean mAlsoAllowPrivilegedPackages;
    private final List<Set<String>> mRequiredPermissions;
    @SuitabilityStatus private final int mSuitabilityStatus;

@@ -666,6 +670,7 @@ public final class MediaRoute2Info implements Parcelable {
        mProviderId = builder.mProviderId;
        mIsVisibilityRestricted = builder.mIsVisibilityRestricted;
        mAllowedPackages = builder.mAllowedPackages;
        mAlsoAllowPrivilegedPackages = builder.mAlsoAllowPrivilegedPackages;
        mSuitabilityStatus = builder.mSuitabilityStatus;
        mRequiredPermissions = List.copyOf(builder.mRequiredPermissions);
    }
@@ -692,6 +697,7 @@ public final class MediaRoute2Info implements Parcelable {
        mProviderId = in.readString();
        mIsVisibilityRestricted = in.readBoolean();
        mAllowedPackages = Set.of(in.createString8Array());
        mAlsoAllowPrivilegedPackages = in.readBoolean();
        ArrayList<Set<String>> requiredPermissions = new ArrayList<>();
        int numRequiredPermissionSets = in.readInt();
        for (int i = 0; i < numRequiredPermissionSets; i++) {
@@ -967,6 +973,16 @@ public final class MediaRoute2Info implements Parcelable {
                || mAllowedPackages.contains(packageName);
    }

    /**
     * @hide
     */
    public boolean isVisibleTo(@NonNull String packageName, boolean callerIsPrivileged) {
        // TODO(b/426044649) - see the comment above on the mAlsoAllowPrivilegedPackages member
        //  variable when removing the enableRouteVisibilityControlApi flag.
        return isVisibleTo(packageName) || (Flags.enableRouteVisibilityControlApi()
                && callerIsPrivileged && mAlsoAllowPrivilegedPackages);
    }

    /**
     * @return a list of permission sets - all the permissions in at least one of these sets must be
     * held to see this route.
@@ -1047,6 +1063,7 @@ public final class MediaRoute2Info implements Parcelable {
        pw.println(indent + "mProviderId=" + mProviderId);
        pw.println(indent + "mIsVisibilityRestricted=" + mIsVisibilityRestricted);
        pw.println(indent + "mAllowedPackages=" + mAllowedPackages);
        pw.println(indent + "mAlsoAllowPrivilegedPackages=" + mAlsoAllowPrivilegedPackages);
        pw.println(indent + "mSuitabilityStatus=" + mSuitabilityStatus);
        pw.println(indent + "mRequiredPermissions=" + mRequiredPermissions);
    }
@@ -1085,6 +1102,7 @@ public final class MediaRoute2Info implements Parcelable {
                && Objects.equals(mProviderId, other.mProviderId)
                && (mIsVisibilityRestricted == other.mIsVisibilityRestricted)
                && Objects.equals(mAllowedPackages, other.mAllowedPackages)
                && mAlsoAllowPrivilegedPackages == other.mAlsoAllowPrivilegedPackages
                && Objects.equals(mRequiredPermissions, other.mRequiredPermissions)
                && mSuitabilityStatus == other.mSuitabilityStatus;
    }
@@ -1112,6 +1130,7 @@ public final class MediaRoute2Info implements Parcelable {
                mProviderId,
                mIsVisibilityRestricted,
                mAllowedPackages,
                mAlsoAllowPrivilegedPackages,
                mRequiredPermissions,
                mSuitabilityStatus);
    }
@@ -1153,6 +1172,8 @@ public final class MediaRoute2Info implements Parcelable {
                .append(mIsVisibilityRestricted)
                .append(", allowedPackages=")
                .append(String.join(",", mAllowedPackages))
                .append(", alsoAllowPrivilegedPackages=")
                .append(mAlsoAllowPrivilegedPackages)
                .append(", mRequiredPermissions=")
                .append(mRequiredPermissions.stream().map(set -> String.join(",", set)).collect(
                                Collectors.joining("),(", "(", ")")))
@@ -1189,6 +1210,7 @@ public final class MediaRoute2Info implements Parcelable {
        dest.writeString(mProviderId);
        dest.writeBoolean(mIsVisibilityRestricted);
        dest.writeString8Array(mAllowedPackages.toArray(new String[0]));
        dest.writeBoolean(mAlsoAllowPrivilegedPackages);
        dest.writeInt(mRequiredPermissions.size());
        for (Set<String> permissionSet : mRequiredPermissions) {
            dest.writeString8Array(permissionSet.toArray(new String[0]));
@@ -1341,6 +1363,12 @@ public final class MediaRoute2Info implements Parcelable {
        private String mProviderId;
        private boolean mIsVisibilityRestricted;
        private Set<String> mAllowedPackages;
        // TODO(b/426044649) - when cleaning up the FLAG_ENABLE_ROUTE_VISIBILITY_CONTROL_API flag,
        //  coalesce the mIsVisibilityRestricted and mAlsoAllowPrivilegedPackages booleans into an
        //  IntDef with the following 3 states:
        //    VISIBILITY_PUBLIC, VISIBILITY_RESTRICTED_TO_ALLOWLIST, and
        //    VISIBILITY_RESTRICTED_TO_ALLOWLIST_AND_PRIVILEGED
        private boolean mAlsoAllowPrivilegedPackages;
        private List<Set<String>> mRequiredPermissions;
        @SuitabilityStatus private int mSuitabilityStatus;

@@ -1416,6 +1444,7 @@ public final class MediaRoute2Info implements Parcelable {
            mProviderId = routeInfo.mProviderId;
            mIsVisibilityRestricted = routeInfo.mIsVisibilityRestricted;
            mAllowedPackages = routeInfo.mAllowedPackages;
            mAlsoAllowPrivilegedPackages = routeInfo.mAlsoAllowPrivilegedPackages;
            mSuitabilityStatus = routeInfo.mSuitabilityStatus;
            mRequiredPermissions = routeInfo.mRequiredPermissions;
        }
@@ -1651,6 +1680,7 @@ public final class MediaRoute2Info implements Parcelable {
        public Builder setVisibilityPublic() {
            mIsVisibilityRestricted = false;
            mAllowedPackages = Set.of();
            mAlsoAllowPrivilegedPackages = false;
            mRequiredPermissions = List.of();
            return this;
        }
@@ -1672,6 +1702,29 @@ public final class MediaRoute2Info implements Parcelable {
        public Builder setVisibilityRestricted(@NonNull Set<String> allowedPackages) {
            mIsVisibilityRestricted = true;
            mAllowedPackages = Set.copyOf(allowedPackages);
            mAlsoAllowPrivilegedPackages = false;
            return this;
        }

        /**
         * Sets the visibility of this route to restricted.
         *
         * @param allowedPackages set of package names which are allowed to see this route.
         * @param alsoAllowPrivileged whether packages not explicitly listed in allowedPackages, but
         *              holding {@link MediaRouter2#getInstance(Context, String, Executor, Runnable)
         *              privileged routing permissions}, can also see this route.
         */
        @NonNull
        // No getter, as we don't want to leak information about other installed packages.
        @SuppressLint("MissingGetterMatchingBuilder")
        @FlaggedApi(FLAG_ENABLE_ROUTE_VISIBILITY_CONTROL_API)
        public Builder setVisibilityRestricted(@NonNull Set<String> allowedPackages,
                boolean alsoAllowPrivileged) {
            // TODO(b/426044649) - when cleaning up the FLAG_ENABLE_ROUTE_VISIBILITY_CONTROL_API
            // flag, make the other version of setVisibilityRestricted call through to this one.
            mIsVisibilityRestricted = true;
            mAllowedPackages = Set.copyOf(allowedPackages);
            mAlsoAllowPrivilegedPackages = alsoAllowPrivileged;
            return this;
        }

+5 −2
Original line number Diff line number Diff line
@@ -2731,7 +2731,9 @@ class MediaRouter2ServiceImpl {
        private List<MediaRoute2Info> getVisibleRoutes(@NonNull List<MediaRoute2Info> routes) {
            List<MediaRoute2Info> filteredRoutes = new ArrayList<>();
            for (MediaRoute2Info route : routes) {
                if (route.isVisibleTo(mPackageName) && hasPermissionsToSeeRoute(route)) {
                if (route.isVisibleTo(mPackageName,
                        mHasMediaRoutingControl || mHasMediaContentControlPermission)
                        && hasPermissionsToSeeRoute(route)) {
                    filteredRoutes.add(route);
                }
            }
@@ -2927,7 +2929,8 @@ class MediaRouter2ServiceImpl {
            }
            List<MediaRoute2Info> filteredRoutes = new ArrayList<>();
            for (MediaRoute2Info route : routes) {
                if (route.isVisibleTo(mTargetPackageName)) {
                if (route.isVisibleTo(mTargetPackageName,
                        mHasMediaRoutingControl || mHasMediaContentControl)) {
                    filteredRoutes.add(route);
                }
            }