diff options
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"> |