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

Commit fdbcc31e authored by Grace Cheng's avatar Grace Cheng Committed by Android (Google) Code Review
Browse files

Merge "Apply minor edits to PackageTagsList" into main

parents 13bbb5f9 50925414
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -2534,10 +2534,11 @@ package android.os {

  public final class PackageTagsList implements android.os.Parcelable {
    method public boolean contains(@NonNull String, @Nullable String);
    method public boolean contains(@NonNull android.os.PackageTagsList);
    method public boolean containsAll(@NonNull String);
    method public boolean containsAll(@NonNull android.os.PackageTagsList);
    method public boolean containsPackage(@NonNull String);
    method public boolean containsPackageWithAllTags(@NonNull String);
    method public int describeContents();
    method public boolean includes(@NonNull String);
    method @NonNull public java.util.Set<java.lang.String> getPackages();
    method public boolean isEmpty();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.os.PackageTagsList> CREATOR;
@@ -2548,10 +2549,9 @@ package android.os {
    ctor public PackageTagsList.Builder(int);
    method @NonNull public android.os.PackageTagsList.Builder add(@NonNull String);
    method @NonNull public android.os.PackageTagsList.Builder add(@NonNull String, @Nullable String);
    method @NonNull public android.os.PackageTagsList.Builder add(@NonNull android.os.PackageTagsList);
    method @NonNull public android.os.PackageTagsList.Builder add(@NonNull java.util.Map<java.lang.String,? extends java.util.Set<java.lang.String>>);
    method @NonNull public android.os.PackageTagsList.Builder addAll(@NonNull android.os.PackageTagsList);
    method @NonNull public android.os.PackageTagsList.Builder addAll(@NonNull java.util.Map<java.lang.String,? extends java.util.Set<java.lang.String>>);
    method @NonNull public android.os.PackageTagsList build();
    method @NonNull public android.os.PackageTagsList.Builder clear();
  }

  @FlaggedApi("android.location.flags.change_get_adas_allowlist_from_hidden_to_system") public final class PackageTagsMap implements android.os.Parcelable {
+28 −29
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import java.util.Collection;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * A list of packages and associated attribution tags that supports easy membership checks. Supports
@@ -39,6 +40,7 @@ import java.util.Set;
 *
 * @hide
 */
@SuppressLint("UnflaggedApi") // TestApi
@TestApi
@Immutable
@android.ravenwood.annotation.RavenwoodKeepWholeClass
@@ -63,7 +65,8 @@ public final class PackageTagsList implements Parcelable {
     * does not imply anything about whether any given attribution tag under the given package name
     * is present.
     */
    public boolean includes(@NonNull String packageName) {
    @SuppressLint("UnflaggedApi") // TestApi
    public boolean containsPackage(@NonNull String packageName) {
        return mPackageTags.containsKey(packageName);
    }

@@ -74,7 +77,7 @@ public final class PackageTagsList implements Parcelable {
     *
     * @hide
     */
    public boolean includesTag(@NonNull String attributionTag) {
    public boolean containsTag(@NonNull String attributionTag) {
        final int size = mPackageTags.size();
        for (int i = 0; i < size; i++) {
            ArraySet<String> tags = mPackageTags.valueAt(i);
@@ -90,7 +93,8 @@ public final class PackageTagsList implements Parcelable {
     * Returns true if all attribution tags under the given package are contained within this
     * instance.
     */
    public boolean containsAll(@NonNull String packageName) {
    @SuppressLint("UnflaggedApi") // TestApi
    public boolean containsPackageWithAllTags(@NonNull String packageName) {
        Set<String> tags = mPackageTags.get(packageName);
        return tags != null && tags.isEmpty();
    }
@@ -110,10 +114,9 @@ public final class PackageTagsList implements Parcelable {
        }
    }

    /**
     * Returns true if the given PackageTagsList is a subset of this instance.
     */
    public boolean contains(@NonNull PackageTagsList packageTagsList) {
    /** Returns true if the given PackageTagsList is a subset of this instance. */
    @SuppressLint("UnflaggedApi") // TestApi
    public boolean containsAll(@NonNull PackageTagsList packageTagsList) {
        int otherSize = packageTagsList.mPackageTags.size();
        if (otherSize > mPackageTags.size()) {
            return false;
@@ -142,15 +145,10 @@ public final class PackageTagsList implements Parcelable {
        return true;
    }

    /**
     * Returns a list of packages.
     *
     * @deprecated Do not use.
     * @hide
     */
    @Deprecated
    public @NonNull Collection<String> getPackages() {
        return new ArrayList<>(mPackageTags.keySet());
    /** Returns all packages that possess at least one attribution tag. */
    @SuppressLint("UnflaggedApi") // TestApi
    public @NonNull Set<String> getPackages() {
        return Set.copyOf(mPackageTags.keySet());
    }

    public static final @NonNull Parcelable.Creator<PackageTagsList> CREATOR =
@@ -313,20 +311,18 @@ public final class PackageTagsList implements Parcelable {
            return this;
        }

        /**
         * Adds the specified {@link PackageTagsList} to the builder.
         */
        @SuppressLint("MissingGetterMatchingBuilder")
        public @NonNull Builder add(@NonNull PackageTagsList packageTagsList) {
            return add(packageTagsList.mPackageTags);
        /** Adds the specified {@link PackageTagsList} to the builder. */
        @SuppressLint({"MissingGetterMatchingBuilder", "UnflaggedApi"}) // TestApi
        public @NonNull Builder addAll(@NonNull PackageTagsList packageTagsList) {
            return addAll(packageTagsList.mPackageTags);
        }

        /**
         * Adds the given map of package to attribution tags to the builder. An empty set of
         * attribution tags is interpreted to imply all attribution tags under that package.
         */
        @SuppressLint("MissingGetterMatchingBuilder")
        public @NonNull Builder add(@NonNull Map<String, ? extends Set<String>> packageTagsMap) {
        @SuppressLint({"MissingGetterMatchingBuilder", "UnflaggedApi"}) // TestApi
        public @NonNull Builder addAll(@NonNull Map<String, ? extends Set<String>> packageTagsMap) {
            mPackageTags.ensureCapacity(packageTagsMap.size());
            for (Map.Entry<String, ? extends Set<String>> entry : packageTagsMap.entrySet()) {
                Set<String> newTags = entry.getValue();
@@ -392,14 +388,14 @@ public final class PackageTagsList implements Parcelable {

        /**
         * Removes the specified {@link PackageTagsList} from the builder. If a package contains all
         * possible attribution tags, it will only be removed if the package in the removed
         * {@link PackageTagsList} also contains all possible attribution tags.
         * possible attribution tags, it will only be removed if the package in the removed {@link
         * PackageTagsList} also contains all possible attribution tags.
         *
         * @hide
         */
        @SuppressLint("MissingGetterMatchingBuilder")
        public @NonNull Builder remove(@NonNull PackageTagsList packageTagsList) {
            return remove(packageTagsList.mPackageTags);
        public @NonNull Builder removeAll(@NonNull PackageTagsList packageTagsList) {
            return removeAll(packageTagsList.mPackageTags);
        }

        /**
@@ -411,7 +407,8 @@ public final class PackageTagsList implements Parcelable {
         * @hide
         */
        @SuppressLint("MissingGetterMatchingBuilder")
        public @NonNull Builder remove(@NonNull Map<String, ? extends Set<String>> packageTagsMap) {
        public @NonNull Builder removeAll(
                @NonNull Map<String, ? extends Set<String>> packageTagsMap) {
            for (Map.Entry<String, ? extends Set<String>> entry : packageTagsMap.entrySet()) {
                Set<String> removedTags = entry.getValue();
                if (removedTags.isEmpty()) {
@@ -427,6 +424,8 @@ public final class PackageTagsList implements Parcelable {

        /**
         * Clears the builder.
         *
         * @hide
         */
        public @NonNull Builder clear() {
            mPackageTags.clear();
+27 −27
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ public class PackageTagsListTest {
                .add("package4", Arrays.asList("attr1", "attr2"));
        PackageTagsList list = builder.build();

        assertTrue(list.contains(builder.build()));
        assertTrue(list.containsAll(builder.build()));
        assertTrue(list.contains("package1", "attr1"));
        assertTrue(list.contains("package1", "attr2"));
        assertTrue(list.contains("package2", "attr1"));
@@ -53,18 +53,18 @@ public class PackageTagsListTest {
        assertTrue(list.contains("package2", "attr3"));
        assertTrue(list.contains("package4", "attr1"));
        assertTrue(list.contains("package4", "attr2"));
        assertTrue(list.containsAll("package2"));
        assertTrue(list.includes("package1"));
        assertTrue(list.includes("package2"));
        assertTrue(list.containsPackageWithAllTags("package2"));
        assertTrue(list.containsPackage("package1"));
        assertTrue(list.containsPackage("package2"));
        assertFalse(list.contains("package1", "attr3"));
        assertFalse(list.contains("package4", "attr3"));
        assertFalse(list.containsAll("package1"));
        assertFalse(list.includes("package3"));
        assertFalse(list.containsPackageWithAllTags("package1"));
        assertFalse(list.containsPackage("package3"));

        PackageTagsList bigList = builder.add("package3").build();
        assertTrue(bigList.contains(builder.build()));
        assertTrue(bigList.contains(list));
        assertFalse(list.contains(bigList));
        assertTrue(bigList.containsAll(builder.build()));
        assertTrue(bigList.containsAll(list));
        assertFalse(list.containsAll(bigList));
    }

    @Test
@@ -73,27 +73,27 @@ public class PackageTagsListTest {
        map.put("package1", new ArraySet<>(Arrays.asList("attr1", "attr2")));
        map.put("package2", new ArraySet<>());

        PackageTagsList.Builder builder = new PackageTagsList.Builder().add(map);
        PackageTagsList.Builder builder = new PackageTagsList.Builder().addAll(map);
        PackageTagsList list = builder.build();

        assertTrue(list.contains(builder.build()));
        assertTrue(list.containsAll(builder.build()));
        assertTrue(list.contains("package1", "attr1"));
        assertTrue(list.contains("package1", "attr2"));
        assertTrue(list.contains("package2", "attr1"));
        assertTrue(list.contains("package2", "attr2"));
        assertTrue(list.contains("package2", "attr3"));
        assertTrue(list.containsAll("package2"));
        assertTrue(list.includes("package1"));
        assertTrue(list.includes("package2"));
        assertTrue(list.containsPackageWithAllTags("package2"));
        assertTrue(list.containsPackage("package1"));
        assertTrue(list.containsPackage("package2"));
        assertFalse(list.contains("package1", "attr3"));
        assertFalse(list.containsAll("package1"));
        assertFalse(list.includes("package3"));
        assertFalse(list.containsPackageWithAllTags("package1"));
        assertFalse(list.containsPackage("package3"));

        map.put("package3", new ArraySet<>());
        PackageTagsList bigList = builder.add(map).build();
        assertTrue(bigList.contains(builder.build()));
        assertTrue(bigList.contains(list));
        assertFalse(list.contains(bigList));
        PackageTagsList bigList = builder.addAll(map).build();
        assertTrue(bigList.containsAll(builder.build()));
        assertTrue(bigList.containsAll(list));
        assertFalse(list.containsAll(bigList));
    }

    @Test
@@ -111,7 +111,7 @@ public class PackageTagsListTest {
                .remove("package3");
        PackageTagsList list = builder.build();

        assertTrue(list.contains(builder.build()));
        assertTrue(list.containsAll(builder.build()));
        assertFalse(list.contains("package1", "attr1"));
        assertFalse(list.contains("package1", "attr2"));
        assertTrue(list.contains("package2", "attr1"));
@@ -121,11 +121,11 @@ public class PackageTagsListTest {
        assertFalse(list.contains("package4", "attr1"));
        assertFalse(list.contains("package4", "attr2"));
        assertTrue(list.contains("package4", "attr3"));
        assertTrue(list.containsAll("package2"));
        assertFalse(list.includes("package1"));
        assertTrue(list.includes("package2"));
        assertFalse(list.includes("package3"));
        assertTrue(list.includes("package4"));
        assertTrue(list.containsPackageWithAllTags("package2"));
        assertFalse(list.containsPackage("package1"));
        assertTrue(list.containsPackage("package2"));
        assertFalse(list.containsPackage("package3"));
        assertTrue(list.containsPackage("package4"));
    }

    @Test
@@ -136,7 +136,7 @@ public class PackageTagsListTest {
                .remove("package2", Collections.emptyList());
        PackageTagsList list = builder.build();

        assertTrue(list.contains(builder.build()));
        assertTrue(list.containsAll(builder.build()));
        assertFalse(list.contains("package1", "attr1"));
        assertTrue(list.contains("package2", "attr2"));
    }
+2 −2
Original line number Diff line number Diff line
@@ -190,7 +190,7 @@ public class AppOpsRestrictionsImpl implements AppOpsRestrictions {

        // TODO (b/240617242) add overload for checkOp to support attribution tags
        if (isCheckOp) {
            return !perUserExclusions.includes(packageName);
            return !perUserExclusions.containsPackage(packageName);
        }
        return !perUserExclusions.contains(packageName, attributionTag);
    }
@@ -429,7 +429,7 @@ public class AppOpsRestrictionsImpl implements AppOpsRestrictions {
                    }
                    boolean hasPackage;
                    if (dumpPackage != null) {
                        hasPackage = packageNames.includes(dumpPackage);
                        hasPackage = packageNames.containsPackage(dumpPackage);
                    } else {
                        hasPackage = true;
                    }
+2 −2
Original line number Diff line number Diff line
@@ -1750,8 +1750,8 @@ public class LocationManagerService extends ILocationManager.Stub implements
                    builder.add(identity.getPackageName(), identity.getAttributionTag());
                }
            }
            builder.add(mInjector.getSettingsHelper().getIgnoreSettingsAllowlist());
            builder.add(mInjector.getSettingsHelper().getAdasAllowlist());
            builder.addAll(mInjector.getSettingsHelper().getIgnoreSettingsAllowlist());
            builder.addAll(mInjector.getSettingsHelper().getAdasAllowlist());
            allowedPackages = builder.build();
        }

Loading