summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/system-current.txt1
-rw-r--r--core/java/com/android/internal/pm/pkg/component/ParsedPermissionUtils.java16
-rw-r--r--core/java/com/android/internal/pm/pkg/parsing/ParsingPackageUtils.java6
-rw-r--r--core/res/res/values/public-staging.xml3
4 files changed, 19 insertions, 7 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index bc34f5bfe13f..20bcf5fdf6fb 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -442,6 +442,7 @@ package android {
public static final class R.attr {
field public static final int allowClearUserDataOnFailedRestore = 16844288; // 0x1010600
+ field @FlaggedApi("android.permission.flags.replace_body_sensor_permission_enabled") public static final int backgroundPermission;
field @FlaggedApi("android.content.res.manifest_flagging") public static final int featureFlag = 16844428; // 0x101068c
field public static final int gameSessionService = 16844373; // 0x1010655
field public static final int hotwordDetectionService = 16844326; // 0x1010626
diff --git a/core/java/com/android/internal/pm/pkg/component/ParsedPermissionUtils.java b/core/java/com/android/internal/pm/pkg/component/ParsedPermissionUtils.java
index 5651c1ca247f..d4dabf51d4c7 100644
--- a/core/java/com/android/internal/pm/pkg/component/ParsedPermissionUtils.java
+++ b/core/java/com/android/internal/pm/pkg/component/ParsedPermissionUtils.java
@@ -16,6 +16,7 @@
package com.android.internal.pm.pkg.component;
+import static com.android.internal.pm.pkg.parsing.ParsingPackageUtils.PARSE_APK_IN_APEX;
import static com.android.internal.pm.pkg.parsing.ParsingUtils.NOT_SET;
import android.annotation.NonNull;
@@ -26,6 +27,7 @@ import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.os.Build;
+import android.permission.flags.Flags;
import android.util.ArrayMap;
import android.util.EventLog;
import android.util.Slog;
@@ -49,7 +51,7 @@ public class ParsedPermissionUtils {
@NonNull
public static ParseResult<ParsedPermission> parsePermission(ParsingPackage pkg, Resources res,
- XmlResourceParser parser, boolean useRoundIcon, ParseInput input)
+ XmlResourceParser parser, boolean useRoundIcon, ParseInput input, int flags)
throws IOException, XmlPullParserException {
String packageName = pkg.getPackageName();
ParsedPermissionImpl permission = new ParsedPermissionImpl();
@@ -77,12 +79,18 @@ public class ParsedPermissionUtils {
if (sa.hasValue(
R.styleable.AndroidManifestPermission_backgroundPermission)) {
- if ("android".equals(packageName)) {
+ final boolean isApkInApex = (flags & PARSE_APK_IN_APEX) != 0;
+ final boolean canUseBackgroundPermissionAttr =
+ "android".equals(packageName) ||
+ (Flags.replaceBodySensorPermissionEnabled() && isApkInApex);
+ if (canUseBackgroundPermissionAttr) {
permission.setBackgroundPermission(sa.getNonResourceString(
- R.styleable.AndroidManifestPermission_backgroundPermission));
+ R.styleable.AndroidManifestPermission_backgroundPermission));
} else {
+ String allowedPackages = "'android'"
+ + (Flags.replaceBodySensorPermissionEnabled() ? " and APK_IN_APEX" : "");
Slog.w(TAG, packageName + " defines a background permission. Only the "
- + "'android' package can do that.");
+ + allowedPackages + " packages can do that.");
}
}
diff --git a/core/java/com/android/internal/pm/pkg/parsing/ParsingPackageUtils.java b/core/java/com/android/internal/pm/pkg/parsing/ParsingPackageUtils.java
index 44fedb11b043..787006eb214c 100644
--- a/core/java/com/android/internal/pm/pkg/parsing/ParsingPackageUtils.java
+++ b/core/java/com/android/internal/pm/pkg/parsing/ParsingPackageUtils.java
@@ -1090,7 +1090,7 @@ public class ParsingPackageUtils {
case TAG_PERMISSION_GROUP:
return parsePermissionGroup(input, pkg, res, parser);
case TAG_PERMISSION:
- return parsePermission(input, pkg, res, parser);
+ return parsePermission(input, pkg, res, parser, flags);
case TAG_PERMISSION_TREE:
return parsePermissionTree(input, pkg, res, parser);
case TAG_USES_PERMISSION:
@@ -1329,10 +1329,10 @@ public class ParsingPackageUtils {
}
private static ParseResult<ParsingPackage> parsePermission(ParseInput input,
- ParsingPackage pkg, Resources res, XmlResourceParser parser)
+ ParsingPackage pkg, Resources res, XmlResourceParser parser, int flags)
throws XmlPullParserException, IOException {
ParseResult<ParsedPermission> result = ParsedPermissionUtils.parsePermission(
- pkg, res, parser, sUseRoundIcon, input);
+ pkg, res, parser, sUseRoundIcon, input, flags);
if (result.isError()) {
return input.error(result);
}
diff --git a/core/res/res/values/public-staging.xml b/core/res/res/values/public-staging.xml
index b74b41c666c8..81215453b3ef 100644
--- a/core/res/res/values/public-staging.xml
+++ b/core/res/res/values/public-staging.xml
@@ -118,6 +118,9 @@
<public name="languageSettingsActivity"/>
<!-- @FlaggedApi("android.service.controls.flags.Flags.FLAG_HOME_PANEL_DREAM") -->
<public name="dreamCategory"/>
+ <!-- @FlaggedApi("android.permission.flags.replace_body_sensor_permission_enabled")
+ @hide @SystemApi -->
+ <public name="backgroundPermission"/>
</staging-public-group>
<staging-public-group type="id" first-id="0x01b60000">