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

Commit 50925414 authored by Grace Cheng's avatar Grace Cheng
Browse files

Apply minor edits to PackageTagsList

Rename several methods to prepare the class to be a public API.
- `includes(String)` becomes `containsPackage(String)`
- `includesTag(String)` becomes `containsTag(String)`
- `containsAll(String)` becomes `containsPackageWithAllTags(String)`
- `contains(PackageTagsList)` becomes `containAll(PackageTagsList)`
- `add(PackageTagsList)` becomes `addAll(PackageTagsList)`
- `add(Map)` becomes `addAll(Map)`
- `remove(PackageTagsList)` becomes `removeAll(PackageTagsList)`
- `remove(Map)` becomes `removeAll(Map)`

removes @deprecate from `getPackages()`.
Mark `Builder.clear()` as hidden.

Test: Covered by unit tests.
Test: atest CtsLocationNoneTestCases:LocationDisabledAppOpsTest
Test: atest CtsSecurityTestCases:LocationDisabledAppOpsTest
Bug: 362287534
Flag: EXEMPT refactor. TestApi changes only.
Relnote: N/A
Change-Id: I82bce1df4d1e8b5fdfb9bb284c54ea8b9ac91840
parent d6b95205
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -2529,10 +2529,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;
@@ -2543,10 +2544,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