diff --git a/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java b/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java index 9a1f7c9e80c56..216b3bb5de8e8 100644 --- a/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java +++ b/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java @@ -350,9 +350,6 @@ public class PackageInfoWithoutStateUtils { // TODO(b/135203078): Consolidate the data directory logic, remove initForUser ai.initForUser(userId); - ai.flags = appInfoFlags(pkg); - ai.privateFlags = appInfoPrivateFlags(pkg); - if ((flags & PackageManager.GET_META_DATA) == 0) { ai.metaData = null; } diff --git a/core/java/android/content/pm/parsing/ParsingPackageImpl.java b/core/java/android/content/pm/parsing/ParsingPackageImpl.java index 1a1395ca7e9ec..f932bc250e28e 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageImpl.java +++ b/core/java/android/content/pm/parsing/ParsingPackageImpl.java @@ -850,9 +850,15 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { @Deprecated @Override public ApplicationInfo toAppInfoWithoutState() { - ApplicationInfo appInfo = new ApplicationInfo(); + ApplicationInfo appInfo = toAppInfoWithoutStateWithoutFlags(); appInfo.flags = PackageInfoWithoutStateUtils.appInfoFlags(this); appInfo.privateFlags = PackageInfoWithoutStateUtils.appInfoPrivateFlags(this); + return appInfo; + } + + @Override + public ApplicationInfo toAppInfoWithoutStateWithoutFlags() { + ApplicationInfo appInfo = new ApplicationInfo(); appInfo.appComponentFactory = appComponentFactory; appInfo.backupAgentName = backupAgentName; diff --git a/core/java/android/content/pm/parsing/ParsingPackageRead.java b/core/java/android/content/pm/parsing/ParsingPackageRead.java index 1ded8d40c727d..5b53c18b820cb 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageRead.java +++ b/core/java/android/content/pm/parsing/ParsingPackageRead.java @@ -858,4 +858,9 @@ public interface ParsingPackageRead extends Parcelable { // TODO(b/135203078): Hide and enforce going through PackageInfoUtils ApplicationInfo toAppInfoWithoutState(); + + /** + * same as toAppInfoWithoutState except without flag computation. + */ + ApplicationInfo toAppInfoWithoutStateWithoutFlags(); } diff --git a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java index 137e0aa831d66..09b4f89677296 100644 --- a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java +++ b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java @@ -235,8 +235,9 @@ public class PackageInfoUtils { info.primaryCpuAbi = AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting); info.secondaryCpuAbi = AndroidPackageUtils.getSecondaryCpuAbi(pkg, pkgSetting); - info.flags |= appInfoFlags(pkg, pkgSetting); - info.privateFlags |= appInfoPrivateFlags(pkg, pkgSetting); + info.flags |= appInfoFlags(info.flags, pkgSetting); + info.privateFlags |= appInfoPrivateFlags(info.privateFlags, pkgSetting); + return info; } @@ -455,9 +456,18 @@ public class PackageInfoUtils { public static int appInfoFlags(AndroidPackage pkg, @Nullable PackageSetting pkgSetting) { // TODO(b/135203078): Add setting related state // @formatter:off - int flags = PackageInfoWithoutStateUtils.appInfoFlags(pkg) + int pkgWithoutStateFlags = PackageInfoWithoutStateUtils.appInfoFlags(pkg) | flag(pkg.isSystem(), ApplicationInfo.FLAG_SYSTEM) | flag(pkg.isFactoryTest(), ApplicationInfo.FLAG_FACTORY_TEST); + + return appInfoFlags(pkgWithoutStateFlags, pkgSetting); + // @formatter:on + } + + /** @see ApplicationInfo#flags */ + public static int appInfoFlags(int pkgWithoutStateFlags, @NonNull PackageSetting pkgSetting) { + // @formatter:off + int flags = pkgWithoutStateFlags; if (pkgSetting != null) { flags |= flag(pkgSetting.getPkgState().isUpdatedSystemApp(), ApplicationInfo.FLAG_UPDATED_SYSTEM_APP); } @@ -467,9 +477,8 @@ public class PackageInfoUtils { /** @see ApplicationInfo#privateFlags */ public static int appInfoPrivateFlags(AndroidPackage pkg, @Nullable PackageSetting pkgSetting) { - // TODO(b/135203078): Add setting related state // @formatter:off - return PackageInfoWithoutStateUtils.appInfoPrivateFlags(pkg) + int pkgWithoutStateFlags = PackageInfoWithoutStateUtils.appInfoPrivateFlags(pkg) | flag(pkg.isSystemExt(), ApplicationInfo.PRIVATE_FLAG_SYSTEM_EXT) | flag(pkg.isPrivileged(), ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) | flag(pkg.isOem(), ApplicationInfo.PRIVATE_FLAG_OEM) @@ -477,6 +486,15 @@ public class PackageInfoUtils { | flag(pkg.isProduct(), ApplicationInfo.PRIVATE_FLAG_PRODUCT) | flag(pkg.isOdm(), ApplicationInfo.PRIVATE_FLAG_ODM) | flag(pkg.isSignedWithPlatformKey(), ApplicationInfo.PRIVATE_FLAG_SIGNED_WITH_PLATFORM_KEY); + return appInfoPrivateFlags(pkgWithoutStateFlags, pkgSetting); + // @formatter:on + } + + /** @see ApplicationInfo#privateFlags */ + public static int appInfoPrivateFlags(int pkgWithoutStateFlags, @Nullable PackageSetting pkgSetting) { + // @formatter:off + // TODO: Add state specific flags + return pkgWithoutStateFlags; // @formatter:on } diff --git a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.java b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.java index 46b08df1a52ec..c9e0bb467ce4c 100644 --- a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.java +++ b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.java @@ -300,6 +300,12 @@ public interface AndroidPackage extends PkgAppInfo, PkgPackageInfo, ParsingPacka @NonNull ApplicationInfo toAppInfoWithoutState(); + /** + * Same as toAppInfoWithoutState except it does not compute any flags. + */ + @NonNull + ApplicationInfo toAppInfoWithoutStateWithoutFlags(); + /** * TODO(b/135203078): Remove usages? * @return a mock of what the previous package.applicationInfo would've returned for logging diff --git a/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java b/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java index fee154f65e869..43365fa4b3e6a 100644 --- a/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java +++ b/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java @@ -455,7 +455,7 @@ public final class PackageImpl extends ParsingPackageImpl implements ParsedPacka @Override public ApplicationInfo toAppInfoWithoutState() { - ApplicationInfo appInfo = super.toAppInfoWithoutState(); + ApplicationInfo appInfo = super.toAppInfoWithoutStateWithoutFlags(); appInfo.flags = PackageInfoUtils.appInfoFlags(this, null); appInfo.privateFlags = PackageInfoUtils.appInfoPrivateFlags(this, null); appInfo.nativeLibraryDir = nativeLibraryDir;