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

Commit 76badfcf authored by Eugene Susla's avatar Eugene Susla
Browse files

Introduce a manifest flag for auto-revoke exemption request

The implementation will filter apps eligible to receive exemption from
permission auto-revoke to just the apps that declare feature usage.

Having the manifest declaration is important for us to be able to
implement a whitelist policy.

Bug: 146513245
Test: lint/presubmit
Change-Id: I87652c276568bf2dd1c48f7cacebbc930334a7c4
parent 3f9ddc30
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -290,6 +290,7 @@ package android {
    field public static final int allowAudioPlaybackCapture = 16844289; // 0x1010601
    field public static final int allowBackup = 16843392; // 0x1010280
    field public static final int allowClearUserData = 16842757; // 0x1010005
    field public static final int allowDontAutoRevokeWhenUnused = 16844310; // 0x1010616
    field public static final int allowEmbedded = 16843765; // 0x10103f5
    field public static final int allowNativeHeapPointerTagging = 16844307; // 0x1010613
    field public static final int allowParallelSyncs = 16843570; // 0x1010332
@@ -538,6 +539,7 @@ package android {
    field public static final int dividerPadding = 16843562; // 0x101032a
    field public static final int dividerVertical = 16843530; // 0x101030a
    field public static final int documentLaunchMode = 16843845; // 0x1010445
    field public static final int dontAutoRevokeWhenUnused = 16844311; // 0x1010617
    field public static final int drawSelectorOnTop = 16843004; // 0x10100fc
    field public static final int drawable = 16843161; // 0x1010199
    field public static final int drawableBottom = 16843118; // 0x101016e
+2 −0
Original line number Diff line number Diff line
@@ -9019,6 +9019,8 @@ package android.permission {
  }
  public final class PermissionManager {
    method @NonNull @RequiresPermission(android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY) public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getAutoRevokeExemptionGrantedPermissions();
    method @NonNull @RequiresPermission(android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY) public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getAutoRevokeExemptionRequestedPermissions();
    method @IntRange(from=0) @RequiresPermission(anyOf={android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, "android.permission.UPGRADE_RUNTIME_PERMISSIONS"}) public int getRuntimePermissionsVersion();
    method @NonNull public java.util.List<android.permission.PermissionManager.SplitPermissionInfo> getSplitPermissions();
    method @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS) public void grantDefaultPermissionsToEnabledCarrierApps(@NonNull String[], @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+4 −0
Original line number Diff line number Diff line
@@ -85,6 +85,10 @@ public interface ParsingPackage extends ParsingPackageRead {

    ParsingPackage addRequestedPermission(String permission);

    ParsingPackage addAutoRevokeExemptionRequestedPermission(String permission);

    ParsingPackage addAutoRevokeExemptionGrantedPermission(String permission);

    ParsingPackage addService(ParsedService parsedService);

    ParsingPackage addUsesLibrary(String libraryName);
+34 −2
Original line number Diff line number Diff line
@@ -217,6 +217,15 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
    @NonNull
    @DataClass.ParcelWith(ForInternedStringList.class)
    private List<String> requestedPermissions = emptyList();

    @NonNull
    @DataClass.ParcelWith(ForInternedStringList.class)
    private List<String> autoRevokeExemptionRequestedPermissions = emptyList();

    @NonNull
    @DataClass.ParcelWith(ForInternedStringList.class)
    private List<String> autoRevokeExemptionGrantedPermissions = emptyList();

    @NonNull
    @DataClass.ParcelWith(ForInternedStringList.class)
    private List<String> implicitPermissions = emptyList();
@@ -586,6 +595,20 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
        return this;
    }

    @Override
    public ParsingPackageImpl addAutoRevokeExemptionRequestedPermission(String permission) {
        this.autoRevokeExemptionRequestedPermissions = CollectionUtils.add(
                this.autoRevokeExemptionRequestedPermissions, TextUtils.safeIntern(permission));
        return this;
    }

    @Override
    public ParsingPackageImpl addAutoRevokeExemptionGrantedPermission(String permission) {
        this.autoRevokeExemptionGrantedPermissions = CollectionUtils.add(
                this.autoRevokeExemptionGrantedPermissions, TextUtils.safeIntern(permission));
        return this;
    }

    @Override
    public ParsingPackageImpl addImplicitPermission(String permission) {
        this.implicitPermissions = CollectionUtils.add(this.implicitPermissions,
@@ -1556,10 +1579,19 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
        return adoptPermissions;
    }

    @NonNull
    @Override
    public List<String> getRequestedPermissions() {
        return requestedPermissions;
        return CollectionUtils.emptyIfNull(requestedPermissions);
    }

    @Override
    public List<String> getAutoRevokeExemptionRequestedPermissions() {
        return CollectionUtils.emptyIfNull(autoRevokeExemptionRequestedPermissions);
    }

    @Override
    public List<String> getAutoRevokeExemptionGrantedPermissions() {
        return CollectionUtils.emptyIfNull(autoRevokeExemptionGrantedPermissions);
    }

    @NonNull
+14 −0
Original line number Diff line number Diff line
@@ -202,6 +202,20 @@ public interface ParsingPackageRead extends Parcelable {
    @NonNull
    List<String> getRequestedPermissions();

    /**
     * Permissions that specified {@code allowDontAutoRevokeWhenUnused=true}
     * in their {@code uses-permission} requests.
     */
    @NonNull
    List<String> getAutoRevokeExemptionRequestedPermissions();

    /**
     * Permissions that specified {@code dontAutoRevokeWhenUnused=true}
     * in their {@code uses-permission} requests.
     */
    @NonNull
    List<String> getAutoRevokeExemptionGrantedPermissions();

    /**
     * Whether or not the app requested explicitly resizeable Activities.
     * A null value means nothing was explicitly requested.
Loading