diff options
| author | Jeff Sharkey <jsharkey@google.com> | 2021-03-20 03:01:08 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-03-20 03:01:08 +0000 |
| commit | 7be2cf8c4bcb840716da9135a18ab34827debfc0 (patch) | |
| tree | 22aa98bc51f2677350faebf5dd3d2f8ca48739ff /core/java/android | |
| parent | 7d1ca13d418329041dea768eefad1d1c573cbb31 (diff) | |
| parent | a57db58f24569ed1788db9f006a80fac2f9f9a10 (diff) | |
Merge "Surface "neverForLocation" through public API." into sc-dev
Diffstat (limited to 'core/java/android')
3 files changed, 32 insertions, 9 deletions
diff --git a/core/java/android/content/pm/PackageInfo.java b/core/java/android/content/pm/PackageInfo.java index e8ef077fedc8..0462a4b2b681 100644 --- a/core/java/android/content/pm/PackageInfo.java +++ b/core/java/android/content/pm/PackageInfo.java @@ -232,13 +232,23 @@ public class PackageInfo implements Parcelable { * * @removed We do not support required permissions. */ - public static final int REQUESTED_PERMISSION_REQUIRED = 1<<0; + public static final int REQUESTED_PERMISSION_REQUIRED = 0x00000001; /** * Flag for {@link #requestedPermissionsFlags}: the requested permission * is currently granted to the application. */ - public static final int REQUESTED_PERMISSION_GRANTED = 1<<1; + public static final int REQUESTED_PERMISSION_GRANTED = 0x00000002; + + /** + * Flag for {@link #requestedPermissionsFlags}: the requested permission has + * declared {@code neverForLocation} in their manifest as a strong assertion + * by a developer that they will never use this permission to derive the + * physical location of the device, regardless of + * {@link android.Manifest.permission#ACCESS_FINE_LOCATION} and/or + * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION} being granted. + */ + public static final int REQUESTED_PERMISSION_NEVER_FOR_LOCATION = 0x00010000; /** * Array of all signatures read from the package file. This is only filled diff --git a/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java b/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java index fdd2c2ab83e3..e0052da9468b 100644 --- a/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java +++ b/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java @@ -52,6 +52,7 @@ import android.content.pm.parsing.component.ParsedPermission; import android.content.pm.parsing.component.ParsedPermissionGroup; import android.content.pm.parsing.component.ParsedProvider; import android.content.pm.parsing.component.ParsedService; +import android.content.pm.parsing.component.ParsedUsesPermission; import android.os.Environment; import android.os.UserHandle; @@ -61,6 +62,7 @@ import libcore.util.EmptyArray; import java.io.File; import java.util.Collections; +import java.util.List; import java.util.Set; /** @hide **/ @@ -264,17 +266,26 @@ public class PackageInfoWithoutStateUtils { flags); } } - size = pkg.getRequestedPermissions().size(); + final List<ParsedUsesPermission> usesPermissions = pkg.getUsesPermissions(); + size = usesPermissions.size(); if (size > 0) { pi.requestedPermissions = new String[size]; pi.requestedPermissionsFlags = new int[size]; for (int i = 0; i < size; i++) { - final String perm = pkg.getRequestedPermissions().get(i); - pi.requestedPermissions[i] = perm; + final ParsedUsesPermission usesPermission = usesPermissions.get(i); + pi.requestedPermissions[i] = usesPermission.name; // The notion of required permissions is deprecated but for compatibility. - pi.requestedPermissionsFlags[i] |= PackageInfo.REQUESTED_PERMISSION_REQUIRED; - if (grantedPermissions != null && grantedPermissions.contains(perm)) { - pi.requestedPermissionsFlags[i] |= PackageInfo.REQUESTED_PERMISSION_GRANTED; + pi.requestedPermissionsFlags[i] |= + PackageInfo.REQUESTED_PERMISSION_REQUIRED; + if (grantedPermissions != null + && grantedPermissions.contains(usesPermission.name)) { + pi.requestedPermissionsFlags[i] |= + PackageInfo.REQUESTED_PERMISSION_GRANTED; + } + if ((usesPermission.usesPermissionFlags + & ParsedUsesPermission.FLAG_NEVER_FOR_LOCATION) != 0) { + pi.requestedPermissionsFlags[i] |= + PackageInfo.REQUESTED_PERMISSION_NEVER_FOR_LOCATION; } } } diff --git a/core/java/android/content/pm/parsing/component/ParsedUsesPermission.java b/core/java/android/content/pm/parsing/component/ParsedUsesPermission.java index b9c2e366c2d5..adf8da0fbe25 100644 --- a/core/java/android/content/pm/parsing/component/ParsedUsesPermission.java +++ b/core/java/android/content/pm/parsing/component/ParsedUsesPermission.java @@ -20,6 +20,7 @@ import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString; import android.annotation.IntDef; import android.annotation.NonNull; +import android.content.pm.PackageInfo; import android.os.Parcel; import android.os.Parcelable; @@ -44,7 +45,8 @@ public class ParsedUsesPermission implements Parcelable { * to derive the physical location of the device, regardless of * ACCESS_FINE_LOCATION and/or ACCESS_COARSE_LOCATION being granted. */ - public static final int FLAG_NEVER_FOR_LOCATION = 0x1; + public static final int FLAG_NEVER_FOR_LOCATION = + PackageInfo.REQUESTED_PERMISSION_NEVER_FOR_LOCATION; /** @hide */ @Retention(RetentionPolicy.SOURCE) |
