diff options
author | Eugene Susla <eugenesusla@google.com> | 2020-03-25 17:03:32 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-03-25 17:03:32 +0000 |
commit | 2f54a864d57b1abd97b373d3923426cdc72ab418 (patch) | |
tree | d0b06e597d17b63cde1d5eec3290e74163955a02 | |
parent | 0e503e5ebb265b58d6f67ec054d718c1659be590 (diff) | |
parent | 49b84c349596f99d1938eac3027776e2f5741098 (diff) |
Merge "Switch auto-revoke manifest flag to a tri-state" into rvc-dev
10 files changed, 56 insertions, 67 deletions
diff --git a/api/current.txt b/api/current.txt index c7e2e6f9c399..eb16b5e560c7 100644 --- a/api/current.txt +++ b/api/current.txt @@ -278,7 +278,7 @@ package android { field public static final int activityCloseExitAnimation = 16842939; // 0x10100bb field public static final int activityOpenEnterAnimation = 16842936; // 0x10100b8 field public static final int activityOpenExitAnimation = 16842937; // 0x10100b9 - field public static final int actor = 16844313; // 0x1010619 + field public static final int actor = 16844312; // 0x1010618 field public static final int addPrintersActivity = 16843750; // 0x10103e6 field public static final int addStatesFromChildren = 16842992; // 0x10100f0 field public static final int adjustViewBounds = 16843038; // 0x101011e @@ -289,7 +289,6 @@ package android { field public static final int alignmentMode = 16843642; // 0x101037a field public static final int allContactsName = 16843468; // 0x10102cc field public static final int allowAudioPlaybackCapture = 16844289; // 0x1010601 - field public static final int allowAutoRevokePermissionsExemption = 16844309; // 0x1010615 field public static final int allowBackup = 16843392; // 0x1010280 field public static final int allowClearUserData = 16842757; // 0x1010005 field public static final int allowEmbedded = 16843765; // 0x10103f5 @@ -329,6 +328,7 @@ package android { field public static final int autoLink = 16842928; // 0x10100b0 field public static final int autoMirrored = 16843754; // 0x10103ea field public static final int autoRemoveFromRecents = 16843847; // 0x1010447 + field public static final int autoRevokePermissions = 16844308; // 0x1010614 field public static final int autoSizeMaxTextSize = 16844102; // 0x1010546 field public static final int autoSizeMinTextSize = 16844088; // 0x1010538 field public static final int autoSizePresetSizes = 16844087; // 0x1010537 @@ -710,7 +710,7 @@ package android { field public static final int gravity = 16842927; // 0x10100af field public static final int gridViewStyle = 16842865; // 0x1010071 field public static final int groupIndicator = 16843019; // 0x101010b - field public static final int gwpAsanMode = 16844312; // 0x1010618 + field public static final int gwpAsanMode = 16844311; // 0x1010617 field public static final int hand_hour = 16843011; // 0x1010103 field public static final int hand_minute = 16843012; // 0x1010104 field public static final int handle = 16843354; // 0x101025a @@ -955,7 +955,7 @@ package android { field public static final int mediaRouteButtonStyle = 16843693; // 0x10103ad field public static final int mediaRouteTypes = 16843694; // 0x10103ae field public static final int menuCategory = 16843230; // 0x10101de - field public static final int mimeGroup = 16844311; // 0x1010617 + field public static final int mimeGroup = 16844310; // 0x1010616 field public static final int mimeType = 16842790; // 0x1010026 field public static final int min = 16844089; // 0x1010539 field public static final int minAspectRatio = 16844187; // 0x101059b @@ -1084,7 +1084,7 @@ package android { field public static final int preferenceScreenStyle = 16842891; // 0x101008b field public static final int preferenceStyle = 16842894; // 0x101008e field public static final int presentationTheme = 16843712; // 0x10103c0 - field public static final int preserveLegacyExternalStorage = 16844310; // 0x1010616 + field public static final int preserveLegacyExternalStorage = 16844309; // 0x1010615 field public static final int previewImage = 16843482; // 0x10102da field public static final int primaryContentAlpha = 16844114; // 0x1010552 field public static final int priority = 16842780; // 0x101001c @@ -1141,7 +1141,6 @@ package android { field public static final int reqKeyboardType = 16843304; // 0x1010228 field public static final int reqNavigation = 16843306; // 0x101022a field public static final int reqTouchScreen = 16843303; // 0x1010227 - field public static final int requestAutoRevokePermissionsExemption = 16844308; // 0x1010614 field public static final int requestLegacyExternalStorage = 16844291; // 0x1010603 field public static final int requireDeviceUnlock = 16843756; // 0x10103ec field public static final int required = 16843406; // 0x101028e diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index 7d5fca44833c..b67060111785 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -752,6 +752,30 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { public @interface ApplicationInfoPrivateFlags {} /** + * Constant corresponding to <code>allowed</code> in the + * {@link android.R.attr#autoRevokePermissions} attribute. + * + * @hide + */ + public static final int AUTO_REVOKE_ALLOWED = 0; + + /** + * Constant corresponding to <code>discouraged</code> in the + * {@link android.R.attr#autoRevokePermissions} attribute. + * + * @hide + */ + public static final int AUTO_REVOKE_DISCOURAGED = 1; + + /** + * Constant corresponding to <code>disallowed</code> in the + * {@link android.R.attr#autoRevokePermissions} attribute. + * + * @hide + */ + public static final int AUTO_REVOKE_DISALLOWED = 2; + + /** * Private/hidden flags. See {@code PRIVATE_FLAG_...} constants. * @hide */ diff --git a/core/java/android/content/pm/parsing/ParsingPackage.java b/core/java/android/content/pm/parsing/ParsingPackage.java index 39f285821581..4c9553249a0c 100644 --- a/core/java/android/content/pm/parsing/ParsingPackage.java +++ b/core/java/android/content/pm/parsing/ParsingPackage.java @@ -192,9 +192,7 @@ public interface ParsingPackage extends ParsingPackageRead { ParsingPackage setAllowNativeHeapPointerTagging(boolean allowNativeHeapPointerTagging); - ParsingPackage setDontAutoRevokePermissions(boolean dontAutoRevokePermissions); - - ParsingPackage setAllowDontAutoRevokePermissions(boolean allowDontAutoRevokePermissions); + ParsingPackage setAutoRevokePermissions(int autoRevokePermissions); ParsingPackage setPreserveLegacyExternalStorage(boolean preserveLegacyExternalStorage); diff --git a/core/java/android/content/pm/parsing/ParsingPackageImpl.java b/core/java/android/content/pm/parsing/ParsingPackageImpl.java index f2ab60a5a602..079a47056c24 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageImpl.java +++ b/core/java/android/content/pm/parsing/ParsingPackageImpl.java @@ -30,7 +30,6 @@ import android.content.pm.FeatureGroupInfo; import android.content.pm.FeatureInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageParser; -import android.content.pm.ProcessInfo; import android.content.pm.parsing.component.ParsedActivity; import android.content.pm.parsing.component.ParsedAttribution; import android.content.pm.parsing.component.ParsedComponent; @@ -405,8 +404,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { private boolean hasFragileUserData; private boolean cantSaveState; private boolean allowNativeHeapPointerTagging; - private boolean dontAutoRevokePermissions; - private boolean allowDontAutoRevokePermissions; + private int autoRevokePermissions; private boolean preserveLegacyExternalStorage; protected int gwpAsanMode; @@ -1089,8 +1087,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { dest.writeBoolean(this.hasFragileUserData); dest.writeBoolean(this.cantSaveState); dest.writeBoolean(this.allowNativeHeapPointerTagging); - dest.writeBoolean(this.dontAutoRevokePermissions); - dest.writeBoolean(this.allowDontAutoRevokePermissions); + dest.writeInt(this.autoRevokePermissions); dest.writeBoolean(this.preserveLegacyExternalStorage); dest.writeArraySet(this.mimeGroups); dest.writeInt(this.gwpAsanMode); @@ -1249,8 +1246,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { this.hasFragileUserData = in.readBoolean(); this.cantSaveState = in.readBoolean(); this.allowNativeHeapPointerTagging = in.readBoolean(); - this.dontAutoRevokePermissions = in.readBoolean(); - this.allowDontAutoRevokePermissions = in.readBoolean(); + this.autoRevokePermissions = in.readInt(); this.preserveLegacyExternalStorage = in.readBoolean(); this.mimeGroups = (ArraySet<String>) in.readArraySet(boot); this.gwpAsanMode = in.readInt(); @@ -2026,13 +2022,8 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { } @Override - public boolean isDontAutoRevokePermmissions() { - return dontAutoRevokePermissions; - } - - @Override - public boolean isAllowDontAutoRevokePermmissions() { - return allowDontAutoRevokePermissions; + public int getAutoRevokePermissions() { + return autoRevokePermissions; } @Override @@ -2506,14 +2497,8 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { } @Override - public ParsingPackageImpl setDontAutoRevokePermissions(boolean value) { - dontAutoRevokePermissions = value; - return this; - } - - @Override - public ParsingPackageImpl setAllowDontAutoRevokePermissions(boolean value) { - allowDontAutoRevokePermissions = value; + public ParsingPackageImpl setAutoRevokePermissions(int value) { + autoRevokePermissions = value; return this; } diff --git a/core/java/android/content/pm/parsing/ParsingPackageRead.java b/core/java/android/content/pm/parsing/ParsingPackageRead.java index e700c6a5fd81..687bc235cfa7 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageRead.java +++ b/core/java/android/content/pm/parsing/ParsingPackageRead.java @@ -771,11 +771,7 @@ public interface ParsingPackageRead extends Parcelable { /** @see ApplicationInfo#PRIVATE_FLAG_ALLOW_NATIVE_HEAP_POINTER_TAGGING */ boolean isAllowNativeHeapPointerTagging(); - /** @see ApplicationInfo#PRIVATE_FLAG2_DONT_AUTO_REVOKE_PERMISSIONS */ - boolean isDontAutoRevokePermmissions(); - - /** @see ApplicationInfo#PRIVATE_FLAG2_ALLOW_DONT_AUTO_REVOKE_PERMISSIONS */ - boolean isAllowDontAutoRevokePermmissions(); + int getAutoRevokePermissions(); boolean hasPreserveLegacyExternalStorage(); diff --git a/core/java/android/content/pm/parsing/ParsingPackageUtils.java b/core/java/android/content/pm/parsing/ParsingPackageUtils.java index 789904aae6f9..ec771286d980 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageUtils.java +++ b/core/java/android/content/pm/parsing/ParsingPackageUtils.java @@ -1829,8 +1829,7 @@ public class ParsingPackageUtils { .setUseEmbeddedDex(bool(false, R.styleable.AndroidManifestApplication_useEmbeddedDex, sa)) .setUsesNonSdkApi(bool(false, R.styleable.AndroidManifestApplication_usesNonSdkApi, sa)) .setVmSafeMode(bool(false, R.styleable.AndroidManifestApplication_vmSafeMode, sa)) - .setDontAutoRevokePermissions(bool(false, R.styleable.AndroidManifestApplication_requestAutoRevokePermissionsExemption, sa)) - .setAllowDontAutoRevokePermissions(bool(false, R.styleable.AndroidManifestApplication_allowAutoRevokePermissionsExemption, sa)) + .setAutoRevokePermissions(anInt(R.styleable.AndroidManifestApplication_autoRevokePermissions, sa)) // targetSdkVersion gated .setAllowAudioPlaybackCapture(bool(targetSdk >= Build.VERSION_CODES.Q, R.styleable.AndroidManifestApplication_allowAudioPlaybackCapture, sa)) .setBaseHardwareAccelerated(bool(targetSdk >= Build.VERSION_CODES.ICE_CREAM_SANDWICH, R.styleable.AndroidManifestApplication_hardwareAccelerated, sa)) diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml index d6e200afc029..28eb98b07690 100644 --- a/core/res/res/values/attrs_manifest.xml +++ b/core/res/res/values/attrs_manifest.xml @@ -1827,19 +1827,11 @@ <attr name="gwpAsanMode" /> - <!-- If {@code true} allow requesting that its permissions don't get automatically - revoked when the app is unused for an extended amount of time. - - The default value is {@code false}. --> - <attr name="requestAutoRevokePermissionsExemption" format="boolean" /> - - <!-- If {@code true} its permissions shouldn't get automatically - revoked when the app is unused for an extended amount of time. - - This implies {@code requestDontAutoRevokePermissions=true} - - The default value is {@code false}. --> - <attr name="allowAutoRevokePermissionsExemption" format="boolean" /> + <attr name="autoRevokePermissions"> + <enum name="allowed" value="0" /> + <enum name="discouraged" value="1" /> + <enum name="disallowed" value="2" /> + </attr> </declare-styleable> <!-- An attribution is a logical part of an app and is identified by a tag. diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index f02d54f48d29..e694e160009e 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -3014,8 +3014,7 @@ <!-- @hide @SystemApi --> <public name="minExtensionVersion" /> <public name="allowNativeHeapPointerTagging" /> - <public name="requestAutoRevokePermissionsExemption" /> - <public name="allowAutoRevokePermissionsExemption" /> + <public name="autoRevokePermissions" /> <public name="preserveLegacyExternalStorage" /> <public name="mimeGroup" /> <public name="gwpAsanMode" /> diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index e605eeba4d98..58a9d9c5f6bf 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -24487,7 +24487,8 @@ public class PackageManagerService extends IPackageManager.Stub } else { synchronized (mLock) { boolean manifestWhitelisted = - mPackages.get(packageName).isAllowDontAutoRevokePermmissions(); + mPackages.get(packageName).getAutoRevokePermissions() + == ApplicationInfo.AUTO_REVOKE_DISALLOWED; return manifestWhitelisted; } } diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index 79d0c2db4448..04c965e69588 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -21,6 +21,8 @@ import static android.Manifest.permission.READ_EXTERNAL_STORAGE; import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; import static android.app.AppOpsManager.MODE_ALLOWED; import static android.app.AppOpsManager.MODE_IGNORED; +import static android.content.pm.ApplicationInfo.AUTO_REVOKE_DISALLOWED; +import static android.content.pm.ApplicationInfo.AUTO_REVOKE_DISCOURAGED; import static android.content.pm.PackageManager.FLAGS_PERMISSION_RESTRICTION_ANY_EXEMPT; import static android.content.pm.PackageManager.FLAG_PERMISSION_APPLY_RESTRICTION; import static android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT; @@ -3238,31 +3240,25 @@ public class PermissionManagerService extends IPermissionManager.Stub { @Override public List<String> getAutoRevokeExemptionRequestedPackages(int userId) { - mContext.enforceCallingPermission(Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, - "Must hold " + Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY); - - List<String> result = new ArrayList<>(); - mPackageManagerInt.forEachInstalledPackage(pkg -> { - if (pkg.isDontAutoRevokePermmissions()) { - result.add(pkg.getPackageName()); - } - }, userId); - - return result; + return getPackagesWithAutoRevokePolicy(AUTO_REVOKE_DISCOURAGED, userId); } @Override public List<String> getAutoRevokeExemptionGrantedPackages(int userId) { + return getPackagesWithAutoRevokePolicy(AUTO_REVOKE_DISALLOWED, userId); + } + + @NonNull + private List<String> getPackagesWithAutoRevokePolicy(int autoRevokePolicy, int userId) { mContext.enforceCallingPermission(Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, "Must hold " + Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY); List<String> result = new ArrayList<>(); mPackageManagerInt.forEachInstalledPackage(pkg -> { - if (pkg.isAllowDontAutoRevokePermmissions()) { + if (pkg.getAutoRevokePermissions() == autoRevokePolicy) { result.add(pkg.getPackageName()); } }, userId); - return result; } |