summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/content/pm/parsing/AndroidPackage.java9
-rw-r--r--core/java/android/content/pm/parsing/ComponentParseUtils.java45
-rw-r--r--core/java/android/content/pm/parsing/PackageImpl.java155
-rw-r--r--core/java/android/content/pm/parsing/PackageInfoUtils.java204
-rw-r--r--core/java/android/content/pm/parsing/library/AndroidTestBaseUpdater.java2
5 files changed, 120 insertions, 295 deletions
diff --git a/core/java/android/content/pm/parsing/AndroidPackage.java b/core/java/android/content/pm/parsing/AndroidPackage.java
index 74a3431e8501..515185eaaf57 100644
--- a/core/java/android/content/pm/parsing/AndroidPackage.java
+++ b/core/java/android/content/pm/parsing/AndroidPackage.java
@@ -23,6 +23,7 @@ import android.content.pm.ConfigurationInfo;
import android.content.pm.FeatureGroupInfo;
import android.content.pm.FeatureInfo;
import android.content.pm.PackageParser;
+import android.content.pm.PackageUserState;
import android.content.pm.SharedLibraryInfo;
import android.content.pm.parsing.ComponentParseUtils.ParsedActivity;
import android.content.pm.parsing.ComponentParseUtils.ParsedActivityIntentInfo;
@@ -452,7 +453,13 @@ public interface AndroidPackage extends Parcelable {
boolean requestsIsolatedSplitLoading();
- ApplicationInfo toAppInfo();
+ /**
+ * Generates an {@link ApplicationInfo} object with only the data available in this object.
+ *
+ * This does not contain any system or user state data, and should be avoided. Prefer
+ * {@link PackageInfoUtils#generateApplicationInfo(AndroidPackage, int, PackageUserState, int)}.
+ */
+ ApplicationInfo toAppInfoWithoutState();
Creator<PackageImpl> CREATOR = new Creator<PackageImpl>() {
@Override
diff --git a/core/java/android/content/pm/parsing/ComponentParseUtils.java b/core/java/android/content/pm/parsing/ComponentParseUtils.java
index 66fcc8ee0e23..5364313f5760 100644
--- a/core/java/android/content/pm/parsing/ComponentParseUtils.java
+++ b/core/java/android/content/pm/parsing/ComponentParseUtils.java
@@ -50,7 +50,6 @@ import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Slog;
-import android.util.SparseArray;
import android.util.TypedValue;
import android.view.Gravity;
@@ -947,7 +946,7 @@ public class ComponentParseUtils {
}
public boolean isRuntime() {
- return protectionLevel == PermissionInfo.PROTECTION_DANGEROUS;
+ return getProtection() == PermissionInfo.PROTECTION_DANGEROUS;
}
public boolean isAppOp() {
@@ -1104,20 +1103,6 @@ public class ComponentParseUtils {
public boolean handleProfiling;
public boolean functionalTest;
- public String sourceDir;
- public String publicSourceDir;
- public String[] splitNames;
- public String[] splitSourceDirs;
- public String[] splitPublicSourceDirs;
- public SparseArray<int[]> splitDependencies;
- public String dataDir;
- public String deviceProtectedDataDir;
- public String credentialProtectedDataDir;
- public String primaryCpuAbi;
- public String secondaryCpuAbi;
- public String nativeLibraryDir;
- public String secondaryNativeLibraryDir;
-
public ParsedInstrumentation() {
}
@@ -1149,42 +1134,14 @@ public class ComponentParseUtils {
dest.writeString(this.targetProcesses);
dest.writeBoolean(this.handleProfiling);
dest.writeBoolean(this.functionalTest);
- dest.writeString(this.sourceDir);
- dest.writeString(this.publicSourceDir);
- dest.writeStringArray(this.splitNames);
- dest.writeStringArray(this.splitSourceDirs);
- dest.writeStringArray(this.splitPublicSourceDirs);
- dest.writeSparseArray(this.splitDependencies);
- dest.writeString(this.dataDir);
- dest.writeString(this.deviceProtectedDataDir);
- dest.writeString(this.credentialProtectedDataDir);
- dest.writeString(this.primaryCpuAbi);
- dest.writeString(this.secondaryCpuAbi);
- dest.writeString(this.nativeLibraryDir);
- dest.writeString(this.secondaryNativeLibraryDir);
}
protected ParsedInstrumentation(Parcel in) {
super(in);
- // We use the boot classloader for all classes that we load.
- final ClassLoader boot = Object.class.getClassLoader();
this.targetPackage = TextUtils.safeIntern(in.readString());
this.targetProcesses = TextUtils.safeIntern(in.readString());
this.handleProfiling = in.readByte() != 0;
this.functionalTest = in.readByte() != 0;
- this.sourceDir = in.readString();
- this.publicSourceDir = in.readString();
- this.splitNames = in.createStringArray();
- this.splitSourceDirs = in.createStringArray();
- this.splitPublicSourceDirs = in.createStringArray();
- this.splitDependencies = in.readSparseArray(boot);
- this.dataDir = in.readString();
- this.deviceProtectedDataDir = in.readString();
- this.credentialProtectedDataDir = in.readString();
- this.primaryCpuAbi = in.readString();
- this.secondaryCpuAbi = in.readString();
- this.nativeLibraryDir = in.readString();
- this.secondaryNativeLibraryDir = in.readString();
}
public static final Creator<ParsedInstrumentation> CREATOR =
diff --git a/core/java/android/content/pm/parsing/PackageImpl.java b/core/java/android/content/pm/parsing/PackageImpl.java
index 363cf80a0a1d..377279e750c6 100644
--- a/core/java/android/content/pm/parsing/PackageImpl.java
+++ b/core/java/android/content/pm/parsing/PackageImpl.java
@@ -2256,75 +2256,96 @@ public final class PackageImpl implements ParsingPackage, ParsedPackage, Android
}
@Override
- public ApplicationInfo toAppInfo() {
+ public ApplicationInfo toAppInfoWithoutState() {
updateFlags();
- ApplicationInfo applicationInfo = new ApplicationInfo();
- applicationInfo.packageName = packageName;
- applicationInfo.flags = flags;
- applicationInfo.privateFlags = privateFlags;
- applicationInfo.sharedLibraryFiles = usesLibraryFiles;
- applicationInfo.sharedLibraryInfos = usesLibraryInfos;
-
- applicationInfo.appComponentFactory = appComponentFactory;
- applicationInfo.backupAgentName = backupAgentName;
- applicationInfo.banner = banner;
- applicationInfo.category = category;
- applicationInfo.classLoaderName = classLoaderName;
- applicationInfo.className = className;
- applicationInfo.compatibleWidthLimitDp = compatibleWidthLimitDp;
- applicationInfo.credentialProtectedDataDir = credentialProtectedDataDir;
- applicationInfo.dataDir = dataDir;
- applicationInfo.descriptionRes = descriptionRes;
- applicationInfo.deviceProtectedDataDir = deviceProtectedDataDir;
- applicationInfo.enabled = enabled;
- applicationInfo.fullBackupContent = fullBackupContent;
- applicationInfo.icon = icon;
- applicationInfo.iconRes = iconRes;
- applicationInfo.installLocation = installLocation;
- applicationInfo.labelRes = labelRes;
- applicationInfo.largestWidthLimitDp = largestWidthLimitDp;
- applicationInfo.logo = logo;
- applicationInfo.manageSpaceActivityName = manageSpaceActivityName;
- applicationInfo.maxAspectRatio = maxAspectRatio;
- applicationInfo.minAspectRatio = minAspectRatio;
- applicationInfo.minSdkVersion = minSdkVersion;
- applicationInfo.name = name;
- applicationInfo.nativeLibraryDir = nativeLibraryDir;
- applicationInfo.nativeLibraryRootDir = nativeLibraryRootDir;
- applicationInfo.nativeLibraryRootRequiresIsa = nativeLibraryRootRequiresIsa;
- applicationInfo.networkSecurityConfigRes = networkSecurityConfigRes;
- applicationInfo.nonLocalizedLabel = nonLocalizedLabel;
- applicationInfo.permission = permission;
- applicationInfo.primaryCpuAbi = primaryCpuAbi;
- applicationInfo.processName = processName;
- applicationInfo.requiresSmallestWidthDp = requiresSmallestWidthDp;
- applicationInfo.roundIconRes = roundIconRes;
- applicationInfo.secondaryCpuAbi = secondaryCpuAbi;
- applicationInfo.secondaryNativeLibraryDir = secondaryNativeLibraryDir;
- applicationInfo.seInfo = seInfo;
- applicationInfo.seInfoUser = seInfoUser;
- applicationInfo.splitClassLoaderNames = splitClassLoaderNames;
- applicationInfo.splitDependencies = splitDependencies;
- applicationInfo.splitNames = splitNames;
- applicationInfo.storageUuid = StorageManager.convert(applicationVolumeUuid);
- applicationInfo.targetSandboxVersion = targetSandboxVersion;
- applicationInfo.targetSdkVersion = targetSdkVersion;
- applicationInfo.taskAffinity = taskAffinity;
- applicationInfo.theme = theme;
- applicationInfo.uid = uid;
- applicationInfo.uiOptions = uiOptions;
- applicationInfo.volumeUuid = applicationVolumeUuid;
- applicationInfo.zygotePreloadName = zygotePreloadName;
-
- applicationInfo.setBaseCodePath(baseCodePath);
- applicationInfo.setBaseResourcePath(applicationInfoBaseResourcePath);
- applicationInfo.setCodePath(applicationInfoCodePath);
- applicationInfo.setResourcePath(applicationInfoResourcePath);
- applicationInfo.setSplitCodePaths(splitCodePaths);
- applicationInfo.setSplitResourcePaths(applicationInfoSplitResourcePaths);
-
- return applicationInfo;
+ ApplicationInfo appInfo = new ApplicationInfo();
+ appInfo.packageName = packageName;
+ appInfo.flags = flags;
+ appInfo.privateFlags = privateFlags;
+
+ appInfo.appComponentFactory = appComponentFactory;
+ appInfo.backupAgentName = backupAgentName;
+ appInfo.banner = banner;
+ appInfo.category = category;
+ appInfo.classLoaderName = classLoaderName;
+ appInfo.className = className;
+ appInfo.compatibleWidthLimitDp = compatibleWidthLimitDp;
+ appInfo.compileSdkVersion = compileSdkVersion;
+ appInfo.compileSdkVersionCodename = compileSdkVersionCodename;
+ appInfo.credentialProtectedDataDir = credentialProtectedDataDir;
+ appInfo.dataDir = dataDir;
+ appInfo.descriptionRes = descriptionRes;
+ appInfo.deviceProtectedDataDir = deviceProtectedDataDir;
+ appInfo.enabled = enabled;
+ appInfo.fullBackupContent = fullBackupContent;
+ appInfo.hiddenUntilInstalled = hiddenUntilInstalled;
+ appInfo.icon = icon;
+ appInfo.iconRes = iconRes;
+ appInfo.installLocation = installLocation;
+ appInfo.labelRes = labelRes;
+ appInfo.largestWidthLimitDp = largestWidthLimitDp;
+ appInfo.logo = logo;
+ appInfo.manageSpaceActivityName = manageSpaceActivityName;
+ appInfo.maxAspectRatio = maxAspectRatio;
+ appInfo.metaData = appMetaData;
+ appInfo.minAspectRatio = minAspectRatio;
+ appInfo.minSdkVersion = minSdkVersion;
+ appInfo.name = name;
+ if (appInfo.name != null) {
+ appInfo.name = appInfo.name.trim();
+ }
+ appInfo.nativeLibraryDir = nativeLibraryDir;
+ appInfo.nativeLibraryRootDir = nativeLibraryRootDir;
+ appInfo.nativeLibraryRootRequiresIsa = nativeLibraryRootRequiresIsa;
+ appInfo.networkSecurityConfigRes = networkSecurityConfigRes;
+ appInfo.nonLocalizedLabel = nonLocalizedLabel;
+ if (appInfo.nonLocalizedLabel != null) {
+ appInfo.nonLocalizedLabel = appInfo.nonLocalizedLabel.toString().trim();
+ }
+ appInfo.packageName = packageName;
+ appInfo.permission = permission;
+ appInfo.primaryCpuAbi = primaryCpuAbi;
+ appInfo.processName = getProcessName();
+ appInfo.requiresSmallestWidthDp = requiresSmallestWidthDp;
+ appInfo.roundIconRes = roundIconRes;
+ appInfo.secondaryCpuAbi = secondaryCpuAbi;
+ appInfo.secondaryNativeLibraryDir = secondaryNativeLibraryDir;
+ appInfo.seInfo = seInfo;
+ appInfo.seInfoUser = seInfoUser;
+ appInfo.sharedLibraryFiles = usesLibraryFiles;
+ appInfo.sharedLibraryInfos = ArrayUtils.isEmpty(usesLibraryInfos) ? null : usesLibraryInfos;
+ appInfo.splitClassLoaderNames = splitClassLoaderNames;
+ appInfo.splitDependencies = splitDependencies;
+ appInfo.splitNames = splitNames;
+ appInfo.storageUuid = StorageManager.convert(volumeUuid);
+ appInfo.targetSandboxVersion = targetSandboxVersion;
+ appInfo.targetSdkVersion = targetSdkVersion;
+ appInfo.taskAffinity = taskAffinity;
+ appInfo.theme = theme;
+ appInfo.uid = uid;
+ appInfo.uiOptions = uiOptions;
+ appInfo.volumeUuid = volumeUuid;
+ appInfo.zygotePreloadName = zygotePreloadName;
+
+ appInfo.setBaseCodePath(baseCodePath);
+ appInfo.setBaseResourcePath(baseCodePath);
+ appInfo.setCodePath(codePath);
+ appInfo.setResourcePath(codePath);
+ appInfo.setSplitCodePaths(splitCodePaths);
+ appInfo.setSplitResourcePaths(splitCodePaths);
+ appInfo.setVersionCode(getLongVersionCode());
+
+ // TODO(b/135203078): Can this be removed? Looks only used in ActivityInfo.
+// appInfo.showUserIcon = pkg.getShowUserIcon();
+ // TODO(b/135203078): Unused?
+// appInfo.resourceDirs = pkg.getResourceDirs();
+ // TODO(b/135203078): Unused?
+// appInfo.enabledSetting = pkg.getEnabledSetting();
+ // TODO(b/135203078): See PackageImpl#getHiddenApiEnforcementPolicy
+// appInfo.mHiddenApiPolicy = pkg.getHiddenApiPolicy();
+
+ return appInfo;
}
@Override
diff --git a/core/java/android/content/pm/parsing/PackageInfoUtils.java b/core/java/android/content/pm/parsing/PackageInfoUtils.java
index 7b329ebc5b83..28f0bc4e431f 100644
--- a/core/java/android/content/pm/parsing/PackageInfoUtils.java
+++ b/core/java/android/content/pm/parsing/PackageInfoUtils.java
@@ -16,8 +16,6 @@
package android.content.pm.parsing;
-import static android.content.pm.ApplicationInfo.FLAG_SUSPENDED;
-
import android.annotation.Nullable;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
@@ -43,8 +41,6 @@ import android.content.pm.parsing.ComponentParseUtils.ParsedActivity;
import android.content.pm.parsing.ComponentParseUtils.ParsedInstrumentation;
import android.content.pm.parsing.ComponentParseUtils.ParsedPermission;
import android.content.pm.parsing.ComponentParseUtils.ParsedPermissionGroup;
-import android.os.Bundle;
-import android.os.UserHandle;
import com.android.internal.util.ArrayUtils;
@@ -213,7 +209,7 @@ public class PackageInfoUtils {
pi.instrumentation = new InstrumentationInfo[N];
for (int i = 0; i < N; i++) {
pi.instrumentation[i] = generateInstrumentationInfo(
- pkg.getInstrumentations().get(i), flags);
+ pkg.getInstrumentations().get(i), pkg, flags);
}
}
}
@@ -281,93 +277,7 @@ public class PackageInfoUtils {
return pi;
}
- // TODO(b/135203078): Remove this in favor of AndroidPackage.toAppInfo()
- private static ApplicationInfo appInfoFromFinalPackage(AndroidPackage pkg) {
- ApplicationInfo appInfo = new ApplicationInfo();
- appInfo.name = pkg.getName();
- if (appInfo.name != null) appInfo.name = appInfo.name.trim();
- appInfo.packageName = pkg.getPackageName();
- appInfo.labelRes = pkg.getLabelRes();
- appInfo.nonLocalizedLabel = pkg.getNonLocalizedLabel();
- if (appInfo.nonLocalizedLabel != null) {
- appInfo.nonLocalizedLabel = appInfo.nonLocalizedLabel.toString().trim();
- }
- appInfo.icon = pkg.getIcon();
- appInfo.banner = pkg.getBanner();
- appInfo.logo = pkg.getLogo();
- appInfo.metaData = pkg.getMetaData();
-
- // TODO(b/135203078): Can this be removed? Looks only used in ActivityInfo.
-// appInfo.showUserIcon = pkg.getShowUserIcon();
-
- appInfo.taskAffinity = pkg.getTaskAffinity();
- appInfo.permission = pkg.getPermission();
- appInfo.processName = pkg.getProcessName();
- appInfo.className = pkg.getClassName();
- appInfo.theme = pkg.getTheme();
- appInfo.flags = pkg.getFlags();
- appInfo.privateFlags = pkg.getPrivateFlags();
- appInfo.requiresSmallestWidthDp = pkg.getRequiresSmallestWidthDp();
- appInfo.compatibleWidthLimitDp = pkg.getCompatibleWidthLimitDp();
- appInfo.largestWidthLimitDp = pkg.getLargestWidthLimitDp();
- appInfo.volumeUuid = pkg.getVolumeUuid();
- appInfo.storageUuid = pkg.getStorageUuid();
- appInfo.scanSourceDir = pkg.getScanSourceDir();
- appInfo.scanPublicSourceDir = pkg.getScanPublicSourceDir();
- appInfo.sourceDir = pkg.getBaseCodePath();
- appInfo.publicSourceDir = pkg.getPublicSourceDir();
- appInfo.splitNames = pkg.getSplitNames();
- appInfo.splitSourceDirs = pkg.getSplitCodePaths();
- appInfo.splitPublicSourceDirs = pkg.getSplitPublicSourceDirs();
- appInfo.splitDependencies = pkg.getSplitDependencies();
- appInfo.nativeLibraryDir = pkg.getNativeLibraryDir();
- appInfo.secondaryNativeLibraryDir = pkg.getSecondaryNativeLibraryDir();
- appInfo.nativeLibraryRootDir = pkg.getNativeLibraryRootDir();
- appInfo.nativeLibraryRootRequiresIsa = pkg.isNativeLibraryRootRequiresIsa();
- appInfo.primaryCpuAbi = pkg.getPrimaryCpuAbi();
- appInfo.secondaryCpuAbi = pkg.getSecondaryCpuAbi();
-
- // TODO(b/135203078): Unused?
-// appInfo.resourceDirs = pkg.getResourceDirs();
- appInfo.seInfo = pkg.getSeInfo();
- appInfo.seInfoUser = pkg.getSeInfoUser();
- appInfo.sharedLibraryFiles = pkg.getUsesLibraryFiles();
- appInfo.sharedLibraryInfos = pkg.getUsesLibraryInfos();
- appInfo.dataDir = pkg.getDataDir();
- appInfo.deviceProtectedDataDir = pkg.getDeviceProtectedDataDir();
- appInfo.credentialProtectedDataDir = pkg.getCredentialProtectedDataDir();
- appInfo.uid = pkg.getUid();
- appInfo.minSdkVersion = pkg.getMinSdkVersion();
- appInfo.targetSdkVersion = pkg.getTargetSdkVersion();
- appInfo.setVersionCode(pkg.getLongVersionCode());
- appInfo.enabled = pkg.isEnabled();
-
- // TODO(b/135203078): Unused?
-// appInfo.enabledSetting = pkg.getEnabledSetting();
- appInfo.installLocation = pkg.getInstallLocation();
- appInfo.manageSpaceActivityName = pkg.getManageSpaceActivityName();
- appInfo.descriptionRes = pkg.getDescriptionRes();
- appInfo.uiOptions = pkg.getUiOptions();
- appInfo.backupAgentName = pkg.getBackupAgentName();
- appInfo.fullBackupContent = pkg.getFullBackupContent();
- appInfo.networkSecurityConfigRes = pkg.getNetworkSecurityConfigRes();
- appInfo.category = pkg.getCategory();
- appInfo.targetSandboxVersion = pkg.getTargetSandboxVersion();
- appInfo.classLoaderName = pkg.getClassLoaderName();
- appInfo.splitClassLoaderNames = pkg.getSplitClassLoaderNames();
- appInfo.appComponentFactory = pkg.getAppComponentFactory();
- appInfo.iconRes = pkg.getIconRes();
- appInfo.roundIconRes = pkg.getRoundIconRes();
- appInfo.compileSdkVersion = pkg.getCompileSdkVersion();
- appInfo.compileSdkVersionCodename = pkg.getCompileSdkVersionCodeName();
-
- // TODO(b/135203078): See PackageImpl#getHiddenApiEnforcementPolicy
-// appInfo.mHiddenApiPolicy = pkg.getHiddenApiPolicy();
- appInfo.hiddenUntilInstalled = pkg.isHiddenUntilInstalled();
- appInfo.zygotePreloadName = pkg.getZygotePreloadName();
- return appInfo;
- }
-
+ @Nullable
public static ApplicationInfo generateApplicationInfo(AndroidPackage pkg,
@PackageManager.ApplicationInfoFlags int flags, PackageUserState state, int userId) {
@@ -375,34 +285,16 @@ public class PackageInfoUtils {
if (!checkUseInstalledOrHidden(pkg, state, flags) || !pkg.isMatch(flags)) {
return null;
}
- if (!copyNeeded(flags, pkg, state, null, userId)
- && ((flags & PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS) == 0
- || state.enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED)) {
- // TODO(b/135203078): This isn't applicable anymore, as AppInfo isn't cached and
- // always built new in toAppInfo(). Remove entire copyNeeded flow? Or find a way to
- // transiently cache AppInfo, since multiple calls in quick secession probably need
- // the same AppInfo.
- // In this case it is safe to directly modify the internal ApplicationInfo state:
- // - CompatibilityMode is global state, so will be the same for every call.
- // - We only come in to here if the app should reported as installed; this is the
- // default state, and we will do a copy otherwise.
- // - The enable state will always be reported the same for the application across
- // calls; the only exception is for the UNTIL_USED mode, and in that case we will
- // be doing a copy.
- ApplicationInfo applicationInfo = pkg.toAppInfo();
- updateApplicationInfo(applicationInfo, flags, state);
- return applicationInfo;
- }
// Make shallow copy so we can store the metadata/libraries safely
- ApplicationInfo ai = appInfoFromFinalPackage(pkg);
+ ApplicationInfo ai = pkg.toAppInfoWithoutState();
ai.initForUser(userId);
- if ((flags & PackageManager.GET_META_DATA) != 0) {
- ai.metaData = pkg.getAppMetaData();
+ if ((flags & PackageManager.GET_META_DATA) == 0) {
+ ai.metaData = null;
}
- if ((flags & PackageManager.GET_SHARED_LIBRARY_FILES) != 0) {
- ai.sharedLibraryFiles = pkg.getUsesLibraryFiles();
- ai.sharedLibraryInfos = pkg.getUsesLibraryInfos();
+ if ((flags & PackageManager.GET_SHARED_LIBRARY_FILES) == 0) {
+ ai.sharedLibraryFiles = null;
+ ai.sharedLibraryInfos = null;
}
if (state.stopped) {
ai.flags |= ApplicationInfo.FLAG_STOPPED;
@@ -424,9 +316,6 @@ public class PackageInfoUtils {
if (applicationInfo == null) {
applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
}
- if (!copyNeeded(flags, pkg, state, a.metaData, userId)) {
- updateApplicationInfo(applicationInfo, flags, state);
- }
// Make shallow copies so we can store the metadata safely
ActivityInfo ai = new ActivityInfo();
assignSharedFieldsForComponentInfo(ai, a);
@@ -475,9 +364,6 @@ public class PackageInfoUtils {
if (applicationInfo == null) {
applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
}
- if (!copyNeeded(flags, pkg, state, s.metaData, userId)) {
- updateApplicationInfo(applicationInfo, flags, state);
- }
// Make shallow copies so we can store the metadata safely
ServiceInfo si = new ServiceInfo();
assignSharedFieldsForComponentInfo(si, s);
@@ -508,11 +394,6 @@ public class PackageInfoUtils {
if (applicationInfo == null) {
applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
}
- if (!copyNeeded(flags, pkg, state, p.metaData, userId)
- && ((flags & PackageManager.GET_URI_PERMISSION_PATTERNS) != 0
- || p.uriPermissionPatterns == null)) {
- updateApplicationInfo(applicationInfo, flags, state);
- }
// Make shallow copies so we can store the metadata safely
ProviderInfo pi = new ProviderInfo();
assignSharedFieldsForComponentInfo(pi, p);
@@ -544,7 +425,7 @@ public class PackageInfoUtils {
}
public static InstrumentationInfo generateInstrumentationInfo(ParsedInstrumentation i,
- @PackageManager.ComponentInfoFlags int flags) {
+ AndroidPackage pkg, @PackageManager.ComponentInfoFlags int flags) {
if (i == null) return null;
InstrumentationInfo ii = new InstrumentationInfo();
@@ -554,19 +435,19 @@ public class PackageInfoUtils {
ii.handleProfiling = i.handleProfiling;
ii.functionalTest = i.functionalTest;
- ii.sourceDir = i.sourceDir;
- ii.publicSourceDir = i.publicSourceDir;
- ii.splitNames = i.splitNames;
- ii.splitSourceDirs = i.splitSourceDirs;
- ii.splitPublicSourceDirs = i.splitPublicSourceDirs;
- ii.splitDependencies = i.splitDependencies;
- ii.dataDir = i.dataDir;
- ii.deviceProtectedDataDir = i.deviceProtectedDataDir;
- ii.credentialProtectedDataDir = i.credentialProtectedDataDir;
- ii.primaryCpuAbi = i.primaryCpuAbi;
- ii.secondaryCpuAbi = i.secondaryCpuAbi;
- ii.nativeLibraryDir = i.nativeLibraryDir;
- ii.secondaryNativeLibraryDir = i.secondaryNativeLibraryDir;
+ ii.sourceDir = pkg.getBaseCodePath();
+ ii.publicSourceDir = pkg.getCodePath();
+ ii.splitNames = pkg.getSplitNames();
+ ii.splitSourceDirs = pkg.getSplitCodePaths();
+ ii.splitPublicSourceDirs = pkg.getSplitCodePaths();
+ ii.splitDependencies = pkg.getSplitDependencies();
+ ii.dataDir = pkg.getDataDir();
+ ii.deviceProtectedDataDir = pkg.getDeviceProtectedDataDir();
+ ii.credentialProtectedDataDir = pkg.getCredentialProtectedDataDir();
+ ii.primaryCpuAbi = pkg.getPrimaryCpuAbi();
+ ii.secondaryCpuAbi = pkg.getSecondaryCpuAbi();
+ ii.nativeLibraryDir = pkg.getNativeLibraryDir();
+ ii.secondaryNativeLibraryDir = pkg.getSecondaryNativeLibraryDir();
if ((flags & PackageManager.GET_META_DATA) == 0) {
return ii;
@@ -615,47 +496,6 @@ public class PackageInfoUtils {
return pgi;
}
- private static boolean copyNeeded(@PackageManager.ComponentInfoFlags int flags,
- AndroidPackage pkg, PackageUserState state, Bundle metaData, int userId) {
- if (userId != UserHandle.USER_SYSTEM) {
- // We always need to copy for other users, since we need
- // to fix up the uid.
- return true;
- }
- if (state.enabled != PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) {
- boolean enabled = state.enabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
- if (pkg.isEnabled() != enabled) {
- return true;
- }
- }
- boolean suspended = (pkg.getFlags() & FLAG_SUSPENDED) != 0;
- if (state.suspended != suspended) {
- return true;
- }
- if (!state.installed || state.hidden) {
- return true;
- }
- if (state.stopped) {
- return true;
- }
- if (state.instantApp != pkg.isInstantApp()) {
- return true;
- }
- if ((flags & PackageManager.GET_META_DATA) != 0
- && (metaData != null || pkg.getAppMetaData() != null)) {
- return true;
- }
- if ((flags & PackageManager.GET_SHARED_LIBRARY_FILES) != 0
- && pkg.getUsesLibraryFiles() != null) {
- return true;
- }
- if ((flags & PackageManager.GET_SHARED_LIBRARY_FILES) != 0
- && pkg.getUsesLibraryInfos() != null) {
- return true;
- }
- return pkg.getStaticSharedLibName() != null;
- }
-
private static void updateApplicationInfo(ApplicationInfo ai,
@PackageManager.ApplicationInfoFlags int flags,
PackageUserState state) {
diff --git a/core/java/android/content/pm/parsing/library/AndroidTestBaseUpdater.java b/core/java/android/content/pm/parsing/library/AndroidTestBaseUpdater.java
index 034c6de1e597..5fbe5b9c7250 100644
--- a/core/java/android/content/pm/parsing/library/AndroidTestBaseUpdater.java
+++ b/core/java/android/content/pm/parsing/library/AndroidTestBaseUpdater.java
@@ -63,7 +63,7 @@ public class AndroidTestBaseUpdater extends PackageSharedLibraryUpdater {
ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE));
try {
return platformCompat.isChangeEnabled(REMOVE_ANDROID_TEST_BASE,
- pkg.toAppInfo());
+ pkg.toAppInfoWithoutState());
} catch (RemoteException | NullPointerException e) {
Log.e(TAG, "Failed to get a response from PLATFORM_COMPAT_SERVICE", e);
}