summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/pm/ComputerEngine.java4
-rw-r--r--services/core/java/com/android/server/pm/DeletePackageHelper.java2
-rw-r--r--services/core/java/com/android/server/pm/InstallPackageHelper.java13
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java22
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerServiceUtils.java4
-rw-r--r--services/core/java/com/android/server/pm/PackageSetting.java110
-rw-r--r--services/core/java/com/android/server/pm/ScanPackageHelper.java22
-rw-r--r--services/core/java/com/android/server/pm/SettingBase.java37
-rw-r--r--services/core/java/com/android/server/pm/Settings.java154
-rw-r--r--services/core/java/com/android/server/pm/SharedUserSetting.java14
-rw-r--r--services/core/java/com/android/server/pm/pkg/PackageStateInternal.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java5
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java80
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/PackageSettingBuilder.java6
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/ScanTests.java4
15 files changed, 251 insertions, 230 deletions
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java
index 93c92c04f10d..3f3cfd60b563 100644
--- a/services/core/java/com/android/server/pm/ComputerEngine.java
+++ b/services/core/java/com/android/server/pm/ComputerEngine.java
@@ -1499,8 +1499,8 @@ public class ComputerEngine implements Computer {
ai.primaryCpuAbi = ps.getPrimaryCpuAbi();
ai.secondaryCpuAbi = ps.getSecondaryCpuAbi();
ai.setVersionCode(ps.getVersionCode());
- ai.flags = ps.getPkgFlags();
- ai.privateFlags = ps.getPkgPrivateFlags();
+ ai.flags = ps.getFlags();
+ ai.privateFlags = ps.getPrivateFlags();
pi.applicationInfo = PackageInfoWithoutStateUtils.generateDelegateApplicationInfo(
ai, flags, state, userId);
diff --git a/services/core/java/com/android/server/pm/DeletePackageHelper.java b/services/core/java/com/android/server/pm/DeletePackageHelper.java
index b792a17d21e3..930674198782 100644
--- a/services/core/java/com/android/server/pm/DeletePackageHelper.java
+++ b/services/core/java/com/android/server/pm/DeletePackageHelper.java
@@ -829,7 +829,7 @@ final class DeletePackageHelper {
}
final String packageName = ps.getPkg().getPackageName();
// Skip over if system app or static shared library
- if ((ps.pkgFlags & ApplicationInfo.FLAG_SYSTEM) != 0
+ if ((ps.getFlags() & ApplicationInfo.FLAG_SYSTEM) != 0
|| !TextUtils.isEmpty(ps.getPkg().getStaticSharedLibName())) {
continue;
}
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java
index 1175ca816a92..2e5a6ea242eb 100644
--- a/services/core/java/com/android/server/pm/InstallPackageHelper.java
+++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java
@@ -2192,15 +2192,16 @@ final class InstallPackageHelper {
reconciledPkg.mPrepareResult.mExistingPackage.getPackageName());
if ((reconciledPkg.mInstallArgs.mInstallFlags & PackageManager.DONT_KILL_APP)
== 0) {
- if (ps1.mOldCodePaths == null) {
- ps1.mOldCodePaths = new ArraySet<>();
+ if (ps1.getOldCodePaths() == null) {
+ ps1.setOldCodePaths(new ArraySet<>());
}
- Collections.addAll(ps1.mOldCodePaths, oldPackage.getBaseApkPath());
+ Collections.addAll(ps1.getOldCodePaths(), oldPackage.getBaseApkPath());
if (oldPackage.getSplitCodePaths() != null) {
- Collections.addAll(ps1.mOldCodePaths, oldPackage.getSplitCodePaths());
+ Collections.addAll(ps1.getOldCodePaths(),
+ oldPackage.getSplitCodePaths());
}
} else {
- ps1.mOldCodePaths = null;
+ ps1.setOldCodePaths(null);
}
if (reconciledPkg.mInstallResult.mReturnCode
@@ -3600,7 +3601,7 @@ final class InstallPackageHelper {
* If this is not a system app, it can't be a
* disable system app.
*/
- if ((ps.pkgFlags & ApplicationInfo.FLAG_SYSTEM) == 0) {
+ if (!ps.isSystem()) {
continue;
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 88e1a7a9118d..aa005a3e91ce 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -2071,7 +2071,7 @@ public class PackageManagerService extends IPackageManager.Stub
int size = packageSettings.size();
for (int i = 0; i < size; i++) {
final PackageSetting ps = packageSettings.valueAt(i);
- if ((ps.pkgFlags & ApplicationInfo.FLAG_SYSTEM) != 0) {
+ if ((ps.getFlags() & ApplicationInfo.FLAG_SYSTEM) != 0) {
continue;
}
ps.disableComponentLPw(PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME,
@@ -3370,11 +3370,11 @@ public class PackageManagerService extends IPackageManager.Stub
final String libName = libInfo.getName();
if (libInfo.isStatic()) {
- final int libIdx = ArrayUtils.indexOf(ps.usesStaticLibraries, libName);
+ final int libIdx = ArrayUtils.indexOf(ps.getUsesStaticLibraries(), libName);
if (libIdx < 0) {
continue;
}
- if (ps.usesStaticLibrariesVersions[libIdx] != libInfo.getLongVersion()) {
+ if (ps.getUsesStaticLibrariesVersions()[libIdx] != libInfo.getLongVersion()) {
continue;
}
if (shouldFilterApplicationLocked(ps, callingUid, userId)) {
@@ -4046,13 +4046,13 @@ public class PackageManagerService extends IPackageManager.Stub
if (shouldFilterApplicationLocked(sus, callingUid, callingUserId)) {
return 0;
}
- return sus.pkgFlags;
+ return sus.getFlags();
} else if (obj instanceof PackageSetting) {
final PackageSetting ps = (PackageSetting) obj;
if (shouldFilterApplicationLocked(ps, callingUid, callingUserId)) {
return 0;
}
- return ps.pkgFlags;
+ return ps.getFlags();
}
}
return 0;
@@ -4073,13 +4073,13 @@ public class PackageManagerService extends IPackageManager.Stub
if (shouldFilterApplicationLocked(sus, callingUid, callingUserId)) {
return 0;
}
- return sus.pkgPrivateFlags;
+ return sus.getPrivateFlags();
} else if (obj instanceof PackageSetting) {
final PackageSetting ps = (PackageSetting) obj;
if (shouldFilterApplicationLocked(ps, callingUid, callingUserId)) {
return 0;
}
- return ps.pkgPrivateFlags;
+ return ps.getPrivateFlags();
}
}
return 0;
@@ -6867,9 +6867,11 @@ public class PackageManagerService extends IPackageManager.Stub
return false;
}
if (systemUserApp) {
- ps.pkgPrivateFlags |= ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER;
+ ps.setPrivateFlags(ps.getPrivateFlags()
+ | ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER);
} else {
- ps.pkgPrivateFlags &= ~ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER;
+ ps.setPrivateFlags(ps.getPrivateFlags()
+ & ~ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER);
}
writeSettingsLPrTEMP();
}
@@ -7800,7 +7802,7 @@ public class PackageManagerService extends IPackageManager.Stub
: "Unknown package: " + packageName);
}
if (callingUid == Process.SHELL_UID
- && (pkgSetting.pkgFlags & ApplicationInfo.FLAG_TEST_ONLY) == 0) {
+ && (pkgSetting.getFlags() & ApplicationInfo.FLAG_TEST_ONLY) == 0) {
// Shell can only change whole packages between ENABLED and DISABLED_USER states
// unless it is a test package.
final int oldState = pkgSetting.getEnabled(userId);
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
index 098c42e31309..d13a554aaa11 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
@@ -989,11 +989,11 @@ public class PackageManagerServiceUtils {
}
public static boolean isSystemApp(PackageSetting ps) {
- return (ps.pkgFlags & ApplicationInfo.FLAG_SYSTEM) != 0;
+ return (ps.getFlags() & ApplicationInfo.FLAG_SYSTEM) != 0;
}
public static boolean isUpdatedSystemApp(PackageSetting ps) {
- return (ps.pkgFlags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0;
+ return (ps.getFlags() & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0;
}
// Static to give access to ComputeEngine
diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java
index 64fb6309b9f0..de9c7324d9a3 100644
--- a/services/core/java/com/android/server/pm/PackageSetting.java
+++ b/services/core/java/com/android/server/pm/PackageSetting.java
@@ -84,31 +84,20 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
* shared user setting with the package setting. The shared user ID lets us link the
* two objects.
*/
- protected int sharedUserId;
+ private int sharedUserId;
- /**
- * @see PackageState#getMimeGroups()
- */
@Nullable
- Map<String, ArraySet<String>> mimeGroups;
+ private Map<String, Set<String>> mimeGroups;
- /**
- * Non-persisted value. During an "upgrade without restart", we need the set
- * of all previous code paths so we can surgically add the new APKs to the
- * active classloader. If at any point an application is upgraded with a
- * restart, this field will be cleared since the classloader would be created
- * using the full set of code paths when the package's process is started.
- * TODO: Remove
- */
@Deprecated
@Nullable
- Set<String> mOldCodePaths;
+ private Set<String> mOldCodePaths;
@Nullable
- String[] usesStaticLibraries;
+ private String[] usesStaticLibraries;
@Nullable
- long[] usesStaticLibrariesVersions;
+ private long[] usesStaticLibrariesVersions;
/**
* The path under which native libraries have been unpacked. This path is
@@ -220,7 +209,7 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
String secondaryCpuAbi, String cpuAbiOverride,
long longVersionCode, int pkgFlags, int pkgPrivateFlags,
int sharedUserId, String[] usesStaticLibraries,
- long[] usesStaticLibrariesVersions, Map<String, ArraySet<String>> mimeGroups,
+ long[] usesStaticLibrariesVersions, Map<String, Set<String>> mimeGroups,
@NonNull UUID domainSetId) {
super(pkgFlags, pkgPrivateFlags);
this.mName = name;
@@ -322,7 +311,7 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
}
public List<String> getMimeGroup(String mimeGroup) {
- ArraySet<String> mimeTypes = getMimeGroupInternal(mimeGroup);
+ Set<String> mimeTypes = getMimeGroupInternal(mimeGroup);
if (mimeTypes == null) {
throw new IllegalArgumentException("Unknown MIME group " + mimeGroup
+ " for package " + mName);
@@ -330,7 +319,7 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
return new ArrayList<>(mimeTypes);
}
- private ArraySet<String> getMimeGroupInternal(String mimeGroup) {
+ private Set<String> getMimeGroupInternal(String mimeGroup) {
return mimeGroups != null ? mimeGroups.get(mimeGroup) : null;
}
@@ -411,7 +400,7 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
}
public boolean setMimeGroup(String mimeGroup, List<String> mimeTypes) {
- ArraySet<String> oldMimeTypes = getMimeGroupInternal(mimeGroup);
+ Set<String> oldMimeTypes = getMimeGroupInternal(mimeGroup);
if (oldMimeTypes == null) {
throw new IllegalArgumentException("Unknown MIME group " + mimeGroup
+ " for package " + mName);
@@ -458,7 +447,7 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
@Override
public boolean isExternalStorage() {
- return (pkgFlags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
+ return (getFlags() & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
}
public PackageSetting setUpdateAvailable(boolean updateAvailable) {
@@ -481,7 +470,7 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
+ " " + mName + "/" + mAppId + "}";
}
- protected void copyMimeGroups(@Nullable Map<String, ArraySet<String>> newMimeGroups) {
+ protected void copyMimeGroups(@Nullable Map<String, Set<String>> newMimeGroups) {
if (newMimeGroups == null) {
mimeGroups = null;
return;
@@ -489,7 +478,7 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
mimeGroups = new ArrayMap<>(newMimeGroups.size());
for (String mimeGroup : newMimeGroups.keySet()) {
- ArraySet<String> mimeTypes = newMimeGroups.get(mimeGroup);
+ Set<String> mimeTypes = newMimeGroups.get(mimeGroup);
if (mimeTypes != null) {
mimeGroups.put(mimeGroup, new ArraySet<>(mimeTypes));
@@ -524,7 +513,7 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
mimeGroups = Collections.emptyMap();
}
- ArrayMap<String, ArraySet<String>> updatedMimeGroups =
+ ArrayMap<String, Set<String>> updatedMimeGroups =
new ArrayMap<>(newMimeGroupNames.size());
for (String mimeGroup : newMimeGroupNames) {
@@ -553,36 +542,36 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
}
public boolean isPrivileged() {
- return (pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0;
+ return (getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0;
}
public boolean isOem() {
- return (pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_OEM) != 0;
+ return (getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_OEM) != 0;
}
public boolean isVendor() {
- return (pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_VENDOR) != 0;
+ return (getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_VENDOR) != 0;
}
public boolean isProduct() {
- return (pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_PRODUCT) != 0;
+ return (getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_PRODUCT) != 0;
}
@Override
public boolean isRequiredForSystemUser() {
- return (pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER) != 0;
+ return (getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER) != 0;
}
public boolean isSystemExt() {
- return (pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_SYSTEM_EXT) != 0;
+ return (getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_SYSTEM_EXT) != 0;
}
public boolean isOdm() {
- return (pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_ODM) != 0;
+ return (getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_ODM) != 0;
}
public boolean isSystem() {
- return (pkgFlags & ApplicationInfo.FLAG_SYSTEM) != 0;
+ return (getFlags() & ApplicationInfo.FLAG_SYSTEM) != 0;
}
public SigningDetails getSigningDetails() {
@@ -1210,6 +1199,9 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
return versionCode;
}
+ /**
+ * @see PackageState#getMimeGroups()
+ */
@Nullable
@Override
public Map<String, Set<String>> getMimeGroups() {
@@ -1305,6 +1297,30 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
return this;
}
+ public PackageSetting setMimeGroups(@NonNull Map<String, Set<String>> mimeGroups) {
+ this.mimeGroups = mimeGroups;
+ onChanged();
+ return this;
+ }
+
+ public PackageSetting setOldCodePaths(Set<String> oldCodePaths) {
+ mOldCodePaths = oldCodePaths;
+ onChanged();
+ return this;
+ }
+
+ public PackageSetting setUsesStaticLibraries(String[] usesStaticLibraries) {
+ this.usesStaticLibraries = usesStaticLibraries;
+ onChanged();
+ return this;
+ }
+
+ public PackageSetting setUsesStaticLibrariesVersions(long[] usesStaticLibrariesVersions) {
+ this.usesStaticLibrariesVersions = usesStaticLibrariesVersions;
+ onChanged();
+ return this;
+ }
+
@NonNull
@Override
public PackageStateUnserialized getTransientState() {
@@ -1316,14 +1332,18 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
return mUserStates;
}
- @Override
- public int getPkgFlags() {
- return pkgFlags;
- }
+ public PackageSetting addMimeTypes(String mimeGroup, Set<String> mimeTypes) {
+ if (mimeGroups == null) {
+ mimeGroups = new ArrayMap<>();
+ }
- @Override
- public int getPkgPrivateFlags() {
- return pkgPrivateFlags;
+ Set<String> existingMimeTypes = mimeGroups.get(mimeGroup);
+ if (existingMimeTypes == null) {
+ existingMimeTypes = new ArraySet<>();
+ mimeGroups.put(mimeGroup, existingMimeTypes);
+ }
+ existingMimeTypes.addAll(mimeTypes);
+ return this;
}
@@ -1341,14 +1361,6 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
//@formatter:off
- /**
- * Non-persisted value. During an "upgrade without restart", we need the set
- * of all previous code paths so we can surgically add the new APKs to the
- * active classloader. If at any point an application is upgraded with a
- * restart, this field will be cleared since the classloader would be created
- * using the full set of code paths when the package's process is started.
- * TODO: Remove
- */
@DataClass.Generated.Member
public @Deprecated @Nullable Set<String> getOldCodePaths() {
return mOldCodePaths;
@@ -1504,10 +1516,10 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
}
@DataClass.Generated(
- time = 1635392392447L,
+ time = 1636652483231L,
codegenVersion = "1.0.23",
sourceFile = "frameworks/base/services/core/java/com/android/server/pm/PackageSetting.java",
- inputSignatures = "protected int sharedUserId\n @android.annotation.Nullable java.util.Map<java.lang.String,android.util.ArraySet<java.lang.String>> mimeGroups\n @java.lang.Deprecated @android.annotation.Nullable java.util.Set<java.lang.String> mOldCodePaths\n @android.annotation.Nullable java.lang.String[] usesStaticLibraries\n @android.annotation.Nullable long[] usesStaticLibrariesVersions\nprivate @android.annotation.Nullable @java.lang.Deprecated java.lang.String legacyNativeLibraryPath\nprivate @android.annotation.NonNull java.lang.String mName\nprivate @android.annotation.NonNull java.lang.String mRealName\nprivate int mAppId\nprivate @android.annotation.Nullable com.android.server.pm.parsing.pkg.AndroidPackage pkg\nprivate @android.annotation.Nullable com.android.server.pm.SharedUserSetting sharedUser\nprivate @android.annotation.NonNull java.io.File mPath\nprivate @android.annotation.NonNull java.lang.String mPathString\nprivate float mLoadingProgress\nprivate @android.annotation.Nullable java.lang.String mPrimaryCpuAbi\nprivate @android.annotation.Nullable java.lang.String mSecondaryCpuAbi\nprivate @android.annotation.Nullable java.lang.String mCpuAbiOverride\nprivate long mLastModifiedTime\nprivate long firstInstallTime\nprivate long lastUpdateTime\nprivate long versionCode\nprivate @android.annotation.NonNull com.android.server.pm.PackageSignatures signatures\nprivate boolean installPermissionsFixed\nprivate @android.annotation.NonNull com.android.server.pm.PackageKeySetData keySetData\nprivate final @android.annotation.NonNull android.util.SparseArray<com.android.server.pm.pkg.PackageUserStateImpl> mUserStates\nprivate @android.annotation.NonNull com.android.server.pm.InstallSource installSource\nprivate @android.annotation.Nullable java.lang.String volumeUuid\nprivate int categoryOverride\nprivate boolean updateAvailable\nprivate boolean forceQueryableOverride\nprivate @android.annotation.NonNull com.android.server.pm.pkg.PackageStateUnserialized pkgState\nprivate @android.annotation.NonNull java.util.UUID mDomainSetId\nprivate final @android.annotation.NonNull com.android.server.utils.SnapshotCache<com.android.server.pm.PackageSetting> mSnapshot\nprivate com.android.server.utils.SnapshotCache<com.android.server.pm.PackageSetting> makeCache()\npublic com.android.server.pm.PackageSetting snapshot()\npublic void dumpDebug(android.util.proto.ProtoOutputStream,long,java.util.List<android.content.pm.UserInfo>,com.android.server.pm.permission.LegacyPermissionDataProvider)\npublic java.util.List<java.lang.String> getMimeGroup(java.lang.String)\nprivate android.util.ArraySet<java.lang.String> getMimeGroupInternal(java.lang.String)\npublic boolean isSharedUser()\npublic com.android.server.pm.PackageSetting setAppId(int)\npublic com.android.server.pm.PackageSetting setCpuAbiOverride(java.lang.String)\npublic com.android.server.pm.PackageSetting setFirstInstallTime(long)\npublic com.android.server.pm.PackageSetting setForceQueryableOverride(boolean)\npublic com.android.server.pm.PackageSetting setInstallerPackageName(java.lang.String)\npublic com.android.server.pm.PackageSetting setInstallSource(com.android.server.pm.InstallSource)\n com.android.server.pm.PackageSetting removeInstallerPackage(java.lang.String)\npublic com.android.server.pm.PackageSetting setIsOrphaned(boolean)\npublic com.android.server.pm.PackageSetting setKeySetData(com.android.server.pm.PackageKeySetData)\npublic com.android.server.pm.PackageSetting setLastModifiedTime(long)\npublic com.android.server.pm.PackageSetting setLastUpdateTime(long)\npublic com.android.server.pm.PackageSetting setLongVersionCode(long)\npublic boolean setMimeGroup(java.lang.String,java.util.List<java.lang.String>)\npublic com.android.server.pm.PackageSetting setPkg(com.android.server.pm.parsing.pkg.AndroidPackage)\npublic com.android.server.pm.PackageSetting setPrimaryCpuAbi(java.lang.String)\npublic com.android.server.pm.PackageSetting setSecondaryCpuAbi(java.lang.String)\npublic com.android.server.pm.PackageSetting setSignatures(com.android.server.pm.PackageSignatures)\npublic com.android.server.pm.PackageSetting setVolumeUuid(java.lang.String)\npublic @java.lang.Override boolean isExternalStorage()\npublic com.android.server.pm.PackageSetting setUpdateAvailable(boolean)\npublic int getSharedUserIdInt()\npublic @java.lang.Override java.lang.String toString()\nprotected void copyMimeGroups(java.util.Map<java.lang.String,android.util.ArraySet<java.lang.String>>)\npublic void updateFrom(com.android.server.pm.PackageSetting)\n com.android.server.pm.PackageSetting updateMimeGroups(java.util.Set<java.lang.String>)\npublic @java.lang.Deprecated @java.lang.Override com.android.server.pm.permission.LegacyPermissionState getLegacyPermissionState()\npublic com.android.server.pm.PackageSetting setInstallPermissionsFixed(boolean)\npublic boolean isPrivileged()\npublic boolean isOem()\npublic boolean isVendor()\npublic boolean isProduct()\npublic @java.lang.Override boolean isRequiredForSystemUser()\npublic boolean isSystemExt()\npublic boolean isOdm()\npublic boolean isSystem()\npublic android.content.pm.SigningDetails getSigningDetails()\npublic com.android.server.pm.PackageSetting setSigningDetails(android.content.pm.SigningDetails)\npublic void copyPackageSetting(com.android.server.pm.PackageSetting)\n @com.android.internal.annotations.VisibleForTesting com.android.server.pm.pkg.PackageUserStateImpl modifyUserState(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateInternal readUserState(int)\n void setEnabled(int,int,java.lang.String)\n int getEnabled(int)\n java.lang.String getLastDisabledAppCaller(int)\n void setInstalled(boolean,int)\n boolean getInstalled(int)\n int getInstallReason(int)\n void setInstallReason(int,int)\n int getUninstallReason(int)\n void setUninstallReason(int,int)\n boolean setOverlayPaths(android.content.pm.overlay.OverlayPaths,int)\n @android.annotation.NonNull android.content.pm.overlay.OverlayPaths getOverlayPaths(int)\n boolean setOverlayPathsForLibrary(java.lang.String,android.content.pm.overlay.OverlayPaths,int)\n @android.annotation.NonNull java.util.Map<java.lang.String,android.content.pm.overlay.OverlayPaths> getOverlayPathsForLibrary(int)\n boolean isAnyInstalled(int[])\n int[] queryInstalledUsers(int[],boolean)\n long getCeDataInode(int)\n void setCeDataInode(long,int)\n boolean getStopped(int)\n void setStopped(boolean,int)\n boolean getNotLaunched(int)\n void setNotLaunched(boolean,int)\n boolean getHidden(int)\n void setHidden(boolean,int)\n int getDistractionFlags(int)\n void setDistractionFlags(int,int)\n boolean getSuspended(int)\n boolean isSuspendedBy(java.lang.String,int)\n boolean addOrUpdateSuspension(java.lang.String,android.content.pm.SuspendDialogInfo,android.os.PersistableBundle,android.os.PersistableBundle,int)\n boolean removeSuspension(java.lang.String,int)\n void removeSuspension(java.util.function.Predicate<java.lang.String>,int)\npublic boolean getInstantApp(int)\n void setInstantApp(boolean,int)\n boolean getVirtualPreload(int)\n void setVirtualPreload(boolean,int)\n void setUserState(int,long,int,boolean,boolean,boolean,boolean,int,boolean,android.util.ArrayMap<java.lang.String,com.android.server.pm.pkg.SuspendParams>,boolean,boolean,java.lang.String,android.util.ArraySet<java.lang.String>,android.util.ArraySet<java.lang.String>,int,int,java.lang.String,java.lang.String)\n void setUserState(int,com.android.server.pm.pkg.PackageUserStateInternal)\n android.util.ArraySet<java.lang.String> getEnabledComponents(int)\n android.util.ArraySet<java.lang.String> getDisabledComponents(int)\n void setEnabledComponents(android.util.ArraySet<java.lang.String>,int)\n void setDisabledComponents(android.util.ArraySet<java.lang.String>,int)\n void setEnabledComponentsCopy(android.util.ArraySet<java.lang.String>,int)\n void setDisabledComponentsCopy(android.util.ArraySet<java.lang.String>,int)\n com.android.server.pm.pkg.PackageUserStateImpl modifyUserStateComponents(int,boolean,boolean)\n void addDisabledComponent(java.lang.String,int)\n void addEnabledComponent(java.lang.String,int)\n boolean enableComponentLPw(java.lang.String,int)\n boolean disableComponentLPw(java.lang.String,int)\n boolean restoreComponentLPw(java.lang.String,int)\n int getCurrentEnabledStateLPr(java.lang.String,int)\n void removeUser(int)\npublic int[] getNotInstalledUserIds()\n void writePackageUserPermissionsProto(android.util.proto.ProtoOutputStream,long,java.util.List<android.content.pm.UserInfo>,com.android.server.pm.permission.LegacyPermissionDataProvider)\nprotected void writeUsersInfoToProto(android.util.proto.ProtoOutputStream,long)\n void setHarmfulAppWarning(int,java.lang.String)\n java.lang.String getHarmfulAppWarning(int)\n com.android.server.pm.PackageSetting setPath(java.io.File)\n java.lang.String getPathString()\npublic @com.android.internal.annotations.VisibleForTesting boolean overrideNonLocalizedLabelAndIcon(android.content.ComponentName,java.lang.String,java.lang.Integer,int)\npublic void resetOverrideComponentLabelIcon(int)\npublic void setSplashScreenTheme(int,java.lang.String)\npublic @android.annotation.Nullable java.lang.String getSplashScreenTheme(int)\npublic boolean isPackageLoading()\npublic com.android.server.pm.PackageSetting setLoadingProgress(float)\npublic @android.annotation.NonNull @java.lang.Override long getVersionCode()\npublic @android.annotation.Nullable @java.lang.Override java.util.Map<java.lang.String,java.util.Set<java.lang.String>> getMimeGroups()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String getPackageName()\npublic @android.annotation.Nullable @java.lang.Override com.android.server.pm.pkg.AndroidPackageApi getAndroidPackage()\npublic @android.annotation.Nullable @java.lang.Override java.lang.Integer getSharedUserId()\npublic @android.annotation.NonNull android.content.pm.SigningInfo getSigningInfo()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String[] getUsesStaticLibraries()\npublic @android.annotation.NonNull @java.lang.Override long[] getUsesStaticLibrariesVersions()\npublic @android.annotation.NonNull @java.lang.Override java.util.List<android.content.pm.SharedLibraryInfo> getUsesLibraryInfos()\npublic @android.annotation.NonNull @java.lang.Override java.util.List<java.lang.String> getUsesLibraryFiles()\npublic @java.lang.Override boolean isHiddenUntilInstalled()\npublic @android.annotation.NonNull @java.lang.Override long[] getLastPackageUsageTime()\npublic @java.lang.Override boolean isUpdatedSystemApp()\npublic com.android.server.pm.PackageSetting setDomainSetId(java.util.UUID)\npublic com.android.server.pm.PackageSetting setSharedUser(com.android.server.pm.SharedUserSetting)\npublic com.android.server.pm.PackageSetting setCategoryOverride(int)\npublic com.android.server.pm.PackageSetting setLegacyNativeLibraryPath(java.lang.String)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageStateUnserialized getTransientState()\npublic @android.annotation.NonNull android.util.SparseArray<? extends PackageUserStateInternal> getUserStates()\npublic @java.lang.Override int getPkgFlags()\npublic @java.lang.Override int getPkgPrivateFlags()\nclass PackageSetting extends com.android.server.pm.SettingBase implements [com.android.server.pm.pkg.PackageStateInternal]\n@com.android.internal.util.DataClass(genGetters=true, genConstructor=false, genSetters=false, genBuilder=false)")
+ inputSignatures = "private int sharedUserId\nprivate @android.annotation.Nullable java.util.Map<java.lang.String,java.util.Set<java.lang.String>> mimeGroups\nprivate @java.lang.Deprecated @android.annotation.Nullable java.util.Set<java.lang.String> mOldCodePaths\nprivate @android.annotation.Nullable java.lang.String[] usesStaticLibraries\nprivate @android.annotation.Nullable long[] usesStaticLibrariesVersions\nprivate @android.annotation.Nullable @java.lang.Deprecated java.lang.String legacyNativeLibraryPath\nprivate @android.annotation.NonNull java.lang.String mName\nprivate @android.annotation.NonNull java.lang.String mRealName\nprivate int mAppId\nprivate @android.annotation.Nullable com.android.server.pm.parsing.pkg.AndroidPackage pkg\nprivate @android.annotation.Nullable com.android.server.pm.SharedUserSetting sharedUser\nprivate @android.annotation.NonNull java.io.File mPath\nprivate @android.annotation.NonNull java.lang.String mPathString\nprivate float mLoadingProgress\nprivate @android.annotation.Nullable java.lang.String mPrimaryCpuAbi\nprivate @android.annotation.Nullable java.lang.String mSecondaryCpuAbi\nprivate @android.annotation.Nullable java.lang.String mCpuAbiOverride\nprivate long mLastModifiedTime\nprivate long firstInstallTime\nprivate long lastUpdateTime\nprivate long versionCode\nprivate @android.annotation.NonNull com.android.server.pm.PackageSignatures signatures\nprivate boolean installPermissionsFixed\nprivate @android.annotation.NonNull com.android.server.pm.PackageKeySetData keySetData\nprivate final @android.annotation.NonNull android.util.SparseArray<com.android.server.pm.pkg.PackageUserStateImpl> mUserStates\nprivate @android.annotation.NonNull com.android.server.pm.InstallSource installSource\nprivate @android.annotation.Nullable java.lang.String volumeUuid\nprivate int categoryOverride\nprivate boolean updateAvailable\nprivate boolean forceQueryableOverride\nprivate @android.annotation.NonNull com.android.server.pm.pkg.PackageStateUnserialized pkgState\nprivate @android.annotation.NonNull java.util.UUID mDomainSetId\nprivate final @android.annotation.NonNull com.android.server.utils.SnapshotCache<com.android.server.pm.PackageSetting> mSnapshot\nprivate com.android.server.utils.SnapshotCache<com.android.server.pm.PackageSetting> makeCache()\npublic com.android.server.pm.PackageSetting snapshot()\npublic void dumpDebug(android.util.proto.ProtoOutputStream,long,java.util.List<android.content.pm.UserInfo>,com.android.server.pm.permission.LegacyPermissionDataProvider)\npublic java.util.List<java.lang.String> getMimeGroup(java.lang.String)\nprivate java.util.Set<java.lang.String> getMimeGroupInternal(java.lang.String)\npublic boolean isSharedUser()\npublic com.android.server.pm.PackageSetting setAppId(int)\npublic com.android.server.pm.PackageSetting setCpuAbiOverride(java.lang.String)\npublic com.android.server.pm.PackageSetting setFirstInstallTime(long)\npublic com.android.server.pm.PackageSetting setForceQueryableOverride(boolean)\npublic com.android.server.pm.PackageSetting setInstallerPackageName(java.lang.String)\npublic com.android.server.pm.PackageSetting setInstallSource(com.android.server.pm.InstallSource)\n com.android.server.pm.PackageSetting removeInstallerPackage(java.lang.String)\npublic com.android.server.pm.PackageSetting setIsOrphaned(boolean)\npublic com.android.server.pm.PackageSetting setKeySetData(com.android.server.pm.PackageKeySetData)\npublic com.android.server.pm.PackageSetting setLastModifiedTime(long)\npublic com.android.server.pm.PackageSetting setLastUpdateTime(long)\npublic com.android.server.pm.PackageSetting setLongVersionCode(long)\npublic boolean setMimeGroup(java.lang.String,java.util.List<java.lang.String>)\npublic com.android.server.pm.PackageSetting setPkg(com.android.server.pm.parsing.pkg.AndroidPackage)\npublic com.android.server.pm.PackageSetting setPrimaryCpuAbi(java.lang.String)\npublic com.android.server.pm.PackageSetting setSecondaryCpuAbi(java.lang.String)\npublic com.android.server.pm.PackageSetting setSignatures(com.android.server.pm.PackageSignatures)\npublic com.android.server.pm.PackageSetting setVolumeUuid(java.lang.String)\npublic @java.lang.Override boolean isExternalStorage()\npublic com.android.server.pm.PackageSetting setUpdateAvailable(boolean)\npublic int getSharedUserIdInt()\npublic @java.lang.Override java.lang.String toString()\nprotected void copyMimeGroups(java.util.Map<java.lang.String,java.util.Set<java.lang.String>>)\npublic void updateFrom(com.android.server.pm.PackageSetting)\n com.android.server.pm.PackageSetting updateMimeGroups(java.util.Set<java.lang.String>)\npublic @java.lang.Deprecated @java.lang.Override com.android.server.pm.permission.LegacyPermissionState getLegacyPermissionState()\npublic com.android.server.pm.PackageSetting setInstallPermissionsFixed(boolean)\npublic boolean isPrivileged()\npublic boolean isOem()\npublic boolean isVendor()\npublic boolean isProduct()\npublic @java.lang.Override boolean isRequiredForSystemUser()\npublic boolean isSystemExt()\npublic boolean isOdm()\npublic boolean isSystem()\npublic android.content.pm.SigningDetails getSigningDetails()\npublic com.android.server.pm.PackageSetting setSigningDetails(android.content.pm.SigningDetails)\npublic void copyPackageSetting(com.android.server.pm.PackageSetting)\n @com.android.internal.annotations.VisibleForTesting com.android.server.pm.pkg.PackageUserStateImpl modifyUserState(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateInternal readUserState(int)\n void setEnabled(int,int,java.lang.String)\n int getEnabled(int)\n java.lang.String getLastDisabledAppCaller(int)\n void setInstalled(boolean,int)\n boolean getInstalled(int)\n int getInstallReason(int)\n void setInstallReason(int,int)\n int getUninstallReason(int)\n void setUninstallReason(int,int)\n boolean setOverlayPaths(android.content.pm.overlay.OverlayPaths,int)\n @android.annotation.NonNull android.content.pm.overlay.OverlayPaths getOverlayPaths(int)\n boolean setOverlayPathsForLibrary(java.lang.String,android.content.pm.overlay.OverlayPaths,int)\n @android.annotation.NonNull java.util.Map<java.lang.String,android.content.pm.overlay.OverlayPaths> getOverlayPathsForLibrary(int)\n boolean isAnyInstalled(int[])\n int[] queryInstalledUsers(int[],boolean)\n long getCeDataInode(int)\n void setCeDataInode(long,int)\n boolean getStopped(int)\n void setStopped(boolean,int)\n boolean getNotLaunched(int)\n void setNotLaunched(boolean,int)\n boolean getHidden(int)\n void setHidden(boolean,int)\n int getDistractionFlags(int)\n void setDistractionFlags(int,int)\n boolean getSuspended(int)\n boolean isSuspendedBy(java.lang.String,int)\n boolean addOrUpdateSuspension(java.lang.String,android.content.pm.SuspendDialogInfo,android.os.PersistableBundle,android.os.PersistableBundle,int)\n boolean removeSuspension(java.lang.String,int)\n void removeSuspension(java.util.function.Predicate<java.lang.String>,int)\npublic boolean getInstantApp(int)\n void setInstantApp(boolean,int)\n boolean getVirtualPreload(int)\n void setVirtualPreload(boolean,int)\n void setUserState(int,long,int,boolean,boolean,boolean,boolean,int,boolean,android.util.ArrayMap<java.lang.String,com.android.server.pm.pkg.SuspendParams>,boolean,boolean,java.lang.String,android.util.ArraySet<java.lang.String>,android.util.ArraySet<java.lang.String>,int,int,java.lang.String,java.lang.String)\n void setUserState(int,com.android.server.pm.pkg.PackageUserStateInternal)\n android.util.ArraySet<java.lang.String> getEnabledComponents(int)\n android.util.ArraySet<java.lang.String> getDisabledComponents(int)\n void setEnabledComponents(android.util.ArraySet<java.lang.String>,int)\n void setDisabledComponents(android.util.ArraySet<java.lang.String>,int)\n void setEnabledComponentsCopy(android.util.ArraySet<java.lang.String>,int)\n void setDisabledComponentsCopy(android.util.ArraySet<java.lang.String>,int)\n com.android.server.pm.pkg.PackageUserStateImpl modifyUserStateComponents(int,boolean,boolean)\n void addDisabledComponent(java.lang.String,int)\n void addEnabledComponent(java.lang.String,int)\n boolean enableComponentLPw(java.lang.String,int)\n boolean disableComponentLPw(java.lang.String,int)\n boolean restoreComponentLPw(java.lang.String,int)\n int getCurrentEnabledStateLPr(java.lang.String,int)\n void removeUser(int)\npublic int[] getNotInstalledUserIds()\n void writePackageUserPermissionsProto(android.util.proto.ProtoOutputStream,long,java.util.List<android.content.pm.UserInfo>,com.android.server.pm.permission.LegacyPermissionDataProvider)\nprotected void writeUsersInfoToProto(android.util.proto.ProtoOutputStream,long)\n void setHarmfulAppWarning(int,java.lang.String)\n java.lang.String getHarmfulAppWarning(int)\n com.android.server.pm.PackageSetting setPath(java.io.File)\n java.lang.String getPathString()\npublic @com.android.internal.annotations.VisibleForTesting boolean overrideNonLocalizedLabelAndIcon(android.content.ComponentName,java.lang.String,java.lang.Integer,int)\npublic void resetOverrideComponentLabelIcon(int)\npublic void setSplashScreenTheme(int,java.lang.String)\npublic @android.annotation.Nullable java.lang.String getSplashScreenTheme(int)\npublic boolean isPackageLoading()\npublic com.android.server.pm.PackageSetting setLoadingProgress(float)\npublic @android.annotation.NonNull @java.lang.Override long getVersionCode()\npublic @android.annotation.Nullable @java.lang.Override java.util.Map<java.lang.String,java.util.Set<java.lang.String>> getMimeGroups()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String getPackageName()\npublic @android.annotation.Nullable @java.lang.Override com.android.server.pm.pkg.AndroidPackageApi getAndroidPackage()\npublic @android.annotation.Nullable @java.lang.Override java.lang.Integer getSharedUserId()\npublic @android.annotation.NonNull android.content.pm.SigningInfo getSigningInfo()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String[] getUsesStaticLibraries()\npublic @android.annotation.NonNull @java.lang.Override long[] getUsesStaticLibrariesVersions()\npublic @android.annotation.NonNull @java.lang.Override java.util.List<android.content.pm.SharedLibraryInfo> getUsesLibraryInfos()\npublic @android.annotation.NonNull @java.lang.Override java.util.List<java.lang.String> getUsesLibraryFiles()\npublic @java.lang.Override boolean isHiddenUntilInstalled()\npublic @android.annotation.NonNull @java.lang.Override long[] getLastPackageUsageTime()\npublic @java.lang.Override boolean isUpdatedSystemApp()\npublic com.android.server.pm.PackageSetting setDomainSetId(java.util.UUID)\npublic com.android.server.pm.PackageSetting setSharedUser(com.android.server.pm.SharedUserSetting)\npublic com.android.server.pm.PackageSetting setCategoryOverride(int)\npublic com.android.server.pm.PackageSetting setLegacyNativeLibraryPath(java.lang.String)\npublic com.android.server.pm.PackageSetting setMimeGroups(java.util.Map<java.lang.String,java.util.Set<java.lang.String>>)\npublic com.android.server.pm.PackageSetting setOldCodePaths(java.util.Set<java.lang.String>)\npublic com.android.server.pm.PackageSetting setUsesStaticLibraries(java.lang.String[])\npublic com.android.server.pm.PackageSetting setUsesStaticLibrariesVersions(long[])\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageStateUnserialized getTransientState()\npublic @android.annotation.NonNull android.util.SparseArray<? extends PackageUserStateInternal> getUserStates()\npublic com.android.server.pm.PackageSetting addMimeTypes(java.lang.String,java.util.Set<java.lang.String>)\nclass PackageSetting extends com.android.server.pm.SettingBase implements [com.android.server.pm.pkg.PackageStateInternal]\n@com.android.internal.util.DataClass(genGetters=true, genConstructor=false, genSetters=false, genBuilder=false)")
@Deprecated
private void __metadata() {}
diff --git a/services/core/java/com/android/server/pm/ScanPackageHelper.java b/services/core/java/com/android/server/pm/ScanPackageHelper.java
index abe13ad6f258..6cc94ce1f657 100644
--- a/services/core/java/com/android/server/pm/ScanPackageHelper.java
+++ b/services/core/java/com/android/server/pm/ScanPackageHelper.java
@@ -534,10 +534,10 @@ final class ScanPackageHelper {
}
pkgSetting.setLastModifiedTime(scanFileTime);
// TODO(b/135203078): Remove, move to constructor
- pkgSetting.setPkg(parsedPackage);
- pkgSetting.pkgFlags = PackageInfoUtils.appInfoFlags(parsedPackage, pkgSetting);
- pkgSetting.pkgPrivateFlags =
- PackageInfoUtils.appInfoPrivateFlags(parsedPackage, pkgSetting);
+ pkgSetting.setPkg(parsedPackage)
+ .setFlags(PackageInfoUtils.appInfoFlags(parsedPackage, pkgSetting))
+ .setPrivateFlags(
+ PackageInfoUtils.appInfoPrivateFlags(parsedPackage, pkgSetting));
if (parsedPackage.getLongVersionCode() != pkgSetting.getVersionCode()) {
pkgSetting.setLongVersionCode(parsedPackage.getLongVersionCode());
}
@@ -603,27 +603,27 @@ final class ScanPackageHelper {
if (systemPkgSetting != null) {
// updated system application, must at least have SCAN_AS_SYSTEM
scanFlags |= SCAN_AS_SYSTEM;
- if ((systemPkgSetting.pkgPrivateFlags
+ if ((systemPkgSetting.getPrivateFlags()
& ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0) {
scanFlags |= SCAN_AS_PRIVILEGED;
}
- if ((systemPkgSetting.pkgPrivateFlags
+ if ((systemPkgSetting.getPrivateFlags()
& ApplicationInfo.PRIVATE_FLAG_OEM) != 0) {
scanFlags |= SCAN_AS_OEM;
}
- if ((systemPkgSetting.pkgPrivateFlags
+ if ((systemPkgSetting.getPrivateFlags()
& ApplicationInfo.PRIVATE_FLAG_VENDOR) != 0) {
scanFlags |= SCAN_AS_VENDOR;
}
- if ((systemPkgSetting.pkgPrivateFlags
+ if ((systemPkgSetting.getPrivateFlags()
& ApplicationInfo.PRIVATE_FLAG_PRODUCT) != 0) {
scanFlags |= SCAN_AS_PRODUCT;
}
- if ((systemPkgSetting.pkgPrivateFlags
+ if ((systemPkgSetting.getPrivateFlags()
& ApplicationInfo.PRIVATE_FLAG_SYSTEM_EXT) != 0) {
scanFlags |= SCAN_AS_SYSTEM_EXT;
}
- if ((systemPkgSetting.pkgPrivateFlags
+ if ((systemPkgSetting.getPrivateFlags()
& ApplicationInfo.PRIVATE_FLAG_ODM) != 0) {
scanFlags |= SCAN_AS_ODM;
}
@@ -1056,7 +1056,7 @@ final class ScanPackageHelper {
@GuardedBy("mPm.mLock")
private boolean verifyPackageUpdateLPr(PackageSetting oldPkg, AndroidPackage newPkg) {
- if ((oldPkg.pkgFlags & ApplicationInfo.FLAG_SYSTEM) == 0) {
+ if ((oldPkg.getFlags() & ApplicationInfo.FLAG_SYSTEM) == 0) {
Slog.w(TAG, "Unable to update from " + oldPkg.getPackageName()
+ " to " + newPkg.getPackageName()
+ ": old package not in system partition");
diff --git a/services/core/java/com/android/server/pm/SettingBase.java b/services/core/java/com/android/server/pm/SettingBase.java
index 22e6ecea4b4b..ed85ff9fa291 100644
--- a/services/core/java/com/android/server/pm/SettingBase.java
+++ b/services/core/java/com/android/server/pm/SettingBase.java
@@ -29,15 +29,11 @@ import com.android.server.utils.Watcher;
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
public abstract class SettingBase implements Watchable, Snappable {
- // TODO: make this variable protected, or even private with a getter and setter.
- // Simply making it protected or private requires that the name be changed to conformm
- // to the Android naming convention, and that touches quite a few files.
- int pkgFlags;
- // TODO: make this variable protected, or even private with a getter and setter.
- // Simply making it protected or private requires that the name be changed to conformm
- // to the Android naming convention, and that touches quite a few files.
- int pkgPrivateFlags;
+ // TODO: Remove in favor of individual boolean APIs. It's not clear what flag values are saved
+ // and bugs exist where callers query for an unsaved flag.
+ private int mPkgFlags;
+ private int mPkgPrivateFlags;
/**
* Watchable machinery
@@ -115,8 +111,8 @@ public abstract class SettingBase implements Watchable, Snappable {
}
public final void copySettingBase(SettingBase orig) {
- pkgFlags = orig.pkgFlags;
- pkgPrivateFlags = orig.pkgPrivateFlags;
+ mPkgFlags = orig.mPkgFlags;
+ mPkgPrivateFlags = orig.mPkgPrivateFlags;
mLegacyPermissionsState.copyFrom(orig.mLegacyPermissionsState);
onChanged();
}
@@ -126,15 +122,17 @@ public abstract class SettingBase implements Watchable, Snappable {
return mLegacyPermissionsState;
}
- void setFlags(int pkgFlags) {
- this.pkgFlags = pkgFlags
+ SettingBase setFlags(int pkgFlags) {
+ this.mPkgFlags = pkgFlags
& (ApplicationInfo.FLAG_SYSTEM
- | ApplicationInfo.FLAG_EXTERNAL_STORAGE);
+ | ApplicationInfo.FLAG_EXTERNAL_STORAGE
+ | ApplicationInfo.FLAG_TEST_ONLY);
onChanged();
+ return this;
}
- void setPrivateFlags(int pkgPrivateFlags) {
- this.pkgPrivateFlags = pkgPrivateFlags
+ SettingBase setPrivateFlags(int pkgPrivateFlags) {
+ this.mPkgPrivateFlags = pkgPrivateFlags
& (ApplicationInfo.PRIVATE_FLAG_PRIVILEGED
| ApplicationInfo.PRIVATE_FLAG_OEM
| ApplicationInfo.PRIVATE_FLAG_VENDOR
@@ -143,5 +141,14 @@ public abstract class SettingBase implements Watchable, Snappable {
| ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER
| ApplicationInfo.PRIVATE_FLAG_ODM);
onChanged();
+ return this;
+ }
+
+ public int getFlags() {
+ return mPkgFlags;
+ }
+
+ public int getPrivateFlags() {
+ return mPkgPrivateFlags;
}
}
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 3d6467e871cc..7eec7918550a 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -154,6 +154,7 @@ import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@@ -825,8 +826,8 @@ public final class Settings implements Watchable, Snappable {
PackageSetting ret = addPackageLPw(name, p.getRealName(), p.getPath(),
p.getLegacyNativeLibraryPath(), p.getPrimaryCpuAbi(),
p.getSecondaryCpuAbi(), p.getCpuAbiOverride(),
- p.getAppId(), p.getVersionCode(), p.pkgFlags, p.pkgPrivateFlags,
- p.usesStaticLibraries, p.usesStaticLibrariesVersions, p.mimeGroups,
+ p.getAppId(), p.getVersionCode(), p.getFlags(), p.getPrivateFlags(),
+ p.getUsesStaticLibraries(), p.getUsesStaticLibrariesVersions(), p.getMimeGroups(),
mDomainVerificationManager.generateNewId());
if (ret != null) {
ret.getPkgState().setUpdatedSystemApp(false);
@@ -851,7 +852,7 @@ public final class Settings implements Watchable, Snappable {
String legacyNativeLibraryPathString, String primaryCpuAbiString,
String secondaryCpuAbiString, String cpuAbiOverrideString, int uid, long vc, int
pkgFlags, int pkgPrivateFlags, String[] usesStaticLibraries,
- long[] usesStaticLibraryNames, Map<String, ArraySet<String>> mimeGroups,
+ long[] usesStaticLibraryNames, Map<String, Set<String>> mimeGroups,
@NonNull UUID domainSetId) {
PackageSetting p = mPackages.get(name);
if (p != null) {
@@ -931,22 +932,22 @@ public final class Settings implements Watchable, Snappable {
if (originalPkg != null) {
if (PackageManagerService.DEBUG_UPGRADE) Log.v(PackageManagerService.TAG, "Package "
+ pkgName + " is adopting original package " + originalPkg.getPackageName());
- pkgSetting = new PackageSetting(originalPkg, pkgName /*realPkgName*/);
- pkgSetting.setPath(codePath);
- pkgSetting.setLegacyNativeLibraryPath(legacyNativeLibraryPath);
- pkgSetting.pkgFlags = pkgFlags;
- pkgSetting.pkgPrivateFlags = pkgPrivateFlags;
- pkgSetting.setPrimaryCpuAbi(primaryCpuAbi);
- pkgSetting.setSecondaryCpuAbi(secondaryCpuAbi);
- // NOTE: Create a deeper copy of the package signatures so we don't
- // overwrite the signatures in the original package setting.
- pkgSetting.setSignatures(new PackageSignatures());
- pkgSetting.setLongVersionCode(versionCode);
- pkgSetting.usesStaticLibraries = usesStaticLibraries;
- pkgSetting.usesStaticLibrariesVersions = usesStaticLibrariesVersions;
- // Update new package state.
- pkgSetting.setLastModifiedTime(codePath.lastModified());
- pkgSetting.setDomainSetId(domainSetId);
+ pkgSetting = new PackageSetting(originalPkg, pkgName /*realPkgName*/)
+ .setPath(codePath)
+ .setLegacyNativeLibraryPath(legacyNativeLibraryPath)
+ .setPrimaryCpuAbi(primaryCpuAbi)
+ .setSecondaryCpuAbi(secondaryCpuAbi)
+ // NOTE: Create a deeper copy of the package signatures so we don't
+ // overwrite the signatures in the original package setting.
+ .setSignatures(new PackageSignatures())
+ .setLongVersionCode(versionCode)
+ .setUsesStaticLibraries(usesStaticLibraries)
+ .setUsesStaticLibrariesVersions(usesStaticLibrariesVersions)
+ // Update new package state.
+ .setLastModifiedTime(codePath.lastModified())
+ .setDomainSetId(domainSetId);
+ pkgSetting.setFlags(pkgFlags)
+ .setPrivateFlags(pkgPrivateFlags);
} else {
pkgSetting = new PackageSetting(pkgName, realPkgName, codePath,
legacyNativeLibraryPath, primaryCpuAbi, secondaryCpuAbi,
@@ -1028,7 +1029,7 @@ public final class Settings implements Watchable, Snappable {
return pkgSetting;
}
- private static Map<String, ArraySet<String>> createMimeGroups(Set<String> mimeGroupNames) {
+ private static Map<String, Set<String>> createMimeGroups(Set<String> mimeGroupNames) {
if (mimeGroupNames == null) {
return null;
}
@@ -1090,42 +1091,40 @@ public final class Settings implements Watchable, Snappable {
}
pkgSetting.setPath(codePath);
}
- // If what we are scanning is a system (and possibly privileged) package,
- // then make it so, regardless of whether it was previously installed only
- // in the data partition. Reset first.
- pkgSetting.pkgFlags &= ~ApplicationInfo.FLAG_SYSTEM;
- pkgSetting.pkgPrivateFlags &= ~(ApplicationInfo.PRIVATE_FLAG_PRIVILEGED
- | ApplicationInfo.PRIVATE_FLAG_OEM
- | ApplicationInfo.PRIVATE_FLAG_VENDOR
- | ApplicationInfo.PRIVATE_FLAG_PRODUCT
- | ApplicationInfo.PRIVATE_FLAG_SYSTEM_EXT
- | ApplicationInfo.PRIVATE_FLAG_ODM);
- pkgSetting.pkgFlags |= pkgFlags & ApplicationInfo.FLAG_SYSTEM;
- pkgSetting.pkgPrivateFlags |=
- pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED;
- pkgSetting.pkgPrivateFlags |=
- pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_OEM;
- pkgSetting.pkgPrivateFlags |=
- pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_VENDOR;
- pkgSetting.pkgPrivateFlags |=
- pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_PRODUCT;
- pkgSetting.pkgPrivateFlags |=
- pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_SYSTEM_EXT;
- pkgSetting.pkgPrivateFlags |=
- pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_ODM;
- pkgSetting.setPrimaryCpuAbi(primaryCpuAbi);
- pkgSetting.setSecondaryCpuAbi(secondaryCpuAbi);
+
+ pkgSetting.setPrimaryCpuAbi(primaryCpuAbi)
+ .setSecondaryCpuAbi(secondaryCpuAbi)
+ .updateMimeGroups(mimeGroupNames)
+ .setDomainSetId(domainSetId);
// Update static shared library dependencies if needed
if (usesStaticLibraries != null && usesStaticLibrariesVersions != null
&& usesStaticLibraries.length == usesStaticLibrariesVersions.length) {
- pkgSetting.usesStaticLibraries = usesStaticLibraries;
- pkgSetting.usesStaticLibrariesVersions = usesStaticLibrariesVersions;
+ pkgSetting.setUsesStaticLibraries(usesStaticLibraries)
+ .setUsesStaticLibrariesVersions(usesStaticLibrariesVersions);
} else {
- pkgSetting.usesStaticLibraries = null;
- pkgSetting.usesStaticLibrariesVersions = null;
+ pkgSetting.setUsesStaticLibraries(null)
+ .setUsesStaticLibrariesVersions(null);
}
- pkgSetting.updateMimeGroups(mimeGroupNames);
- pkgSetting.setDomainSetId(domainSetId);
+
+ // These two flags are preserved from the existing PackageSetting. Copied from prior code,
+ // unclear if this is actually necessary.
+ boolean wasExternalStorage = (pkgSetting.getFlags()
+ & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
+ if (wasExternalStorage) {
+ pkgFlags |= ApplicationInfo.FLAG_EXTERNAL_STORAGE;
+ } else {
+ pkgFlags &= ~ApplicationInfo.FLAG_EXTERNAL_STORAGE;
+ }
+ boolean wasRequiredForSystemUser = (pkgSetting.getPrivateFlags()
+ & ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER) != 0;
+ if (wasRequiredForSystemUser) {
+ pkgPrivateFlags |= ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER;
+ } else {
+ pkgPrivateFlags &= ~ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER;
+ }
+
+ pkgSetting.setFlags(pkgFlags)
+ .setPrivateFlags(pkgPrivateFlags);
}
/**
@@ -2175,10 +2174,10 @@ public final class Settings implements Watchable, Snappable {
long libVersion = parser.getAttributeLong(null, ATTR_VERSION, -1);
if (libName != null && libVersion >= 0) {
- outPs.usesStaticLibraries = ArrayUtils.appendElement(String.class,
- outPs.usesStaticLibraries, libName);
- outPs.usesStaticLibrariesVersions = ArrayUtils.appendLong(
- outPs.usesStaticLibrariesVersions, libVersion);
+ outPs.setUsesStaticLibraries(ArrayUtils.appendElement(String.class,
+ outPs.getUsesStaticLibraries(), libName));
+ outPs.setUsesStaticLibrariesVersions(ArrayUtils.appendLong(
+ outPs.getUsesStaticLibrariesVersions(), libVersion));
}
XmlUtils.skipCurrentTag(parser);
@@ -2709,7 +2708,8 @@ public final class Settings implements Watchable, Snappable {
}
serializer.attributeFloat(null, "loadingProgress", pkg.getLoadingProgress());
- writeUsesStaticLibLPw(serializer, pkg.usesStaticLibraries, pkg.usesStaticLibrariesVersions);
+ writeUsesStaticLibLPw(serializer, pkg.getUsesStaticLibraries(),
+ pkg.getUsesStaticLibrariesVersions());
serializer.endTag(null, "updated-package");
}
@@ -2736,8 +2736,8 @@ public final class Settings implements Watchable, Snappable {
serializer.attribute(null, "cpuAbiOverride", pkg.getCpuAbiOverride());
}
- serializer.attributeInt(null, "publicFlags", pkg.pkgFlags);
- serializer.attributeInt(null, "privateFlags", pkg.pkgPrivateFlags);
+ serializer.attributeInt(null, "publicFlags", pkg.getFlags());
+ serializer.attributeInt(null, "privateFlags", pkg.getPrivateFlags());
serializer.attributeLongHex(null, "ft", pkg.getLastModifiedTime());
serializer.attributeLongHex(null, "it", pkg.getFirstInstallTime());
serializer.attributeLongHex(null, "ut", pkg.getLastUpdateTime());
@@ -2786,7 +2786,8 @@ public final class Settings implements Watchable, Snappable {
serializer.attribute(null, "domainSetId", pkg.getDomainSetId().toString());
- writeUsesStaticLibLPw(serializer, pkg.usesStaticLibraries, pkg.usesStaticLibrariesVersions);
+ writeUsesStaticLibLPw(serializer, pkg.getUsesStaticLibraries(),
+ pkg.getUsesStaticLibrariesVersions());
pkg.getSignatures().writeXml(serializer, "sigs", mPastSignatures.untrackedStorage());
@@ -2798,7 +2799,7 @@ public final class Settings implements Watchable, Snappable {
writeSigningKeySetLPr(serializer, pkg.getKeySetData());
writeUpgradeKeySetsLPr(serializer, pkg.getKeySetData());
writeKeySetAliasesLPr(serializer, pkg.getKeySetData());
- writeMimeGroupLPr(serializer, pkg.mimeGroups);
+ writeMimeGroupLPr(serializer, pkg.getMimeGroups());
serializer.endTag(null, "package");
}
@@ -3071,7 +3072,7 @@ public final class Settings implements Watchable, Snappable {
final PackageManagerInternal pmInternal =
LocalServices.getService(PackageManagerInternal.class);
for (PackageSetting ps : mPackages.values()) {
- if ((ps.pkgFlags & ApplicationInfo.FLAG_SYSTEM) != 0 && ps.getPkg() != null
+ if ((ps.getFlags() & ApplicationInfo.FLAG_SYSTEM) != 0 && ps.getPkg() != null
&& !ps.getPkg().getPreferredActivityFilters().isEmpty()) {
List<Pair<String, ParsedIntentInfo>> intents
= ps.getPkg().getPreferredActivityFilters();
@@ -3786,7 +3787,11 @@ public final class Settings implements Watchable, Snappable {
Log.d(TAG, "Read domain verification for package: " + ivi.getPackageName());
}
} else if (tagName.equals(TAG_MIME_GROUP)) {
- packageSetting.mimeGroups = readMimeGroupLPw(parser, packageSetting.mimeGroups);
+ final Pair<String, Set<String>> groupToMimeTypes = readMimeGroupLPw(parser);
+ if (groupToMimeTypes != null) {
+ packageSetting.addMimeTypes(groupToMimeTypes.first,
+ groupToMimeTypes.second);
+ }
} else if (tagName.equals(TAG_USES_STATIC_LIB)) {
readUsesStaticLibLPw(parser, packageSetting);
} else {
@@ -3812,23 +3817,16 @@ public final class Settings implements Watchable, Snappable {
}
}
- private Map<String, ArraySet<String>> readMimeGroupLPw(TypedXmlPullParser parser,
- Map<String, ArraySet<String>> mimeGroups) throws XmlPullParserException, IOException {
+ @Nullable
+ private Pair<String, Set<String>> readMimeGroupLPw(TypedXmlPullParser parser)
+ throws XmlPullParserException, IOException {
String groupName = parser.getAttributeValue(null, ATTR_NAME);
if (groupName == null) {
XmlUtils.skipCurrentTag(parser);
- return mimeGroups;
- }
-
- if (mimeGroups == null) {
- mimeGroups = new ArrayMap<>();
+ return null;
}
- ArraySet<String> mimeTypes = mimeGroups.get(groupName);
- if (mimeTypes == null) {
- mimeTypes = new ArraySet<>();
- mimeGroups.put(groupName, mimeTypes);
- }
+ Set<String> mimeTypes = new ArraySet<>();
int outerDepth = parser.getDepth();
int type;
while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
@@ -3850,11 +3848,11 @@ public final class Settings implements Watchable, Snappable {
}
}
- return mimeGroups;
+ return Pair.create(groupName, mimeTypes);
}
private void writeMimeGroupLPr(TypedXmlSerializer serializer,
- Map<String, ArraySet<String>> mimeGroups) throws IOException {
+ Map<String, Set<String>> mimeGroups) throws IOException {
if (mimeGroups == null) {
return;
}
@@ -4477,7 +4475,7 @@ public final class Settings implements Watchable, Snappable {
pw.print(prefix); pw.print(" legacyNativeLibraryDir=");
pw.println(ps.getLegacyNativeLibraryPath());
pw.print(prefix); pw.print(" extractNativeLibs=");
- pw.println((ps.pkgFlags & ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS) != 0
+ pw.println((ps.getFlags() & ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS) != 0
? "true" : "false");
pw.print(prefix); pw.print(" primaryCpuAbi="); pw.println(ps.getPrimaryCpuAbi());
pw.print(prefix); pw.print(" secondaryCpuAbi="); pw.println(ps.getSecondaryCpuAbi());
@@ -4687,7 +4685,7 @@ public final class Settings implements Watchable, Snappable {
pw.print(prefix); pw.print(" installPermissionsFixed=");
pw.print(ps.isInstallPermissionsFixed());
pw.println();
- pw.print(prefix); pw.print(" pkgFlags="); printFlags(pw, ps.pkgFlags, FLAG_DUMP_SPEC);
+ pw.print(prefix); pw.print(" pkgFlags="); printFlags(pw, ps.getFlags(), FLAG_DUMP_SPEC);
pw.println();
if (pkg != null && pkg.getOverlayTarget() != null) {
diff --git a/services/core/java/com/android/server/pm/SharedUserSetting.java b/services/core/java/com/android/server/pm/SharedUserSetting.java
index 3387737c35b8..7487e81a185d 100644
--- a/services/core/java/com/android/server/pm/SharedUserSetting.java
+++ b/services/core/java/com/android/server/pm/SharedUserSetting.java
@@ -147,17 +147,17 @@ public final class SharedUserSetting extends SettingBase {
return false;
}
// recalculate the pkgFlags for this shared user if needed
- if ((this.pkgFlags & packageSetting.pkgFlags) != 0) {
+ if ((this.getFlags() & packageSetting.getFlags()) != 0) {
int aggregatedFlags = uidFlags;
for (PackageSetting ps : packages) {
- aggregatedFlags |= ps.pkgFlags;
+ aggregatedFlags |= ps.getFlags();
}
setFlags(aggregatedFlags);
}
- if ((this.pkgPrivateFlags & packageSetting.pkgPrivateFlags) != 0) {
+ if ((this.getPrivateFlags() & packageSetting.getPrivateFlags()) != 0) {
int aggregatedPrivateFlags = uidPrivateFlags;
for (PackageSetting ps : packages) {
- aggregatedPrivateFlags |= ps.pkgPrivateFlags;
+ aggregatedPrivateFlags |= ps.getPrivateFlags();
}
setPrivateFlags(aggregatedPrivateFlags);
}
@@ -174,8 +174,8 @@ public final class SharedUserSetting extends SettingBase {
seInfoTargetSdkVersion = packageSetting.getPkg().getTargetSdkVersion();
}
if (packages.add(packageSetting)) {
- setFlags(this.pkgFlags | packageSetting.pkgFlags);
- setPrivateFlags(this.pkgPrivateFlags | packageSetting.pkgPrivateFlags);
+ setFlags(this.getFlags() | packageSetting.getFlags());
+ setPrivateFlags(this.getPrivateFlags() | packageSetting.getPrivateFlags());
onChanged();
}
if (packageSetting.getPkg() != null) {
@@ -201,7 +201,7 @@ public final class SharedUserSetting extends SettingBase {
}
public boolean isPrivileged() {
- return (this.pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0;
+ return (this.getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0;
}
/**
diff --git a/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java b/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java
index 11551324f34f..ce5a2e8df965 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java
@@ -53,8 +53,8 @@ public interface PackageStateInternal extends PackageState {
SharedUserSetting getSharedUser();
// TODO: Remove this in favor of boolean APIs
- int getPkgFlags();
- int getPkgPrivateFlags();
+ int getFlags();
+ int getPrivateFlags();
@NonNull
SparseArray<? extends PackageUserStateInternal> getUserStates();
diff --git a/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java b/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java
index f91661b565ab..0f6dfda4bf63 100644
--- a/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java
@@ -36,11 +36,8 @@ import android.content.pm.UserInfo;
import android.content.pm.parsing.ParsingPackage;
import android.content.pm.parsing.component.ParsedActivity;
import android.content.pm.parsing.component.ParsedActivityImpl;
-import android.content.pm.parsing.component.ParsedInstrumentation;
import android.content.pm.parsing.component.ParsedInstrumentationImpl;
-import android.content.pm.parsing.component.ParsedIntentInfo;
import android.content.pm.parsing.component.ParsedIntentInfoImpl;
-import android.content.pm.parsing.component.ParsedProvider;
import android.content.pm.parsing.component.ParsedProviderImpl;
import android.os.Build;
import android.os.Process;
@@ -958,7 +955,7 @@ public class AppsFilterTest {
PackageSetting targetSetting = simulateAddPackage(appsFilter, target, DUMMY_TARGET_APPID);
SharedUserSetting actorSharedSetting = new SharedUserSetting("actorSharedUser",
- targetSetting.pkgFlags, targetSetting.pkgPrivateFlags);
+ targetSetting.getFlags(), targetSetting.getPrivateFlags());
PackageSetting overlaySetting =
simulateAddPackage(appsFilter, overlay, DUMMY_OVERLAY_APPID);
simulateAddPackage(appsFilter, actorOne, DUMMY_ACTOR_APPID,
diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
index b0f8d406ff20..c1cf0076bf9b 100644
--- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
+++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
@@ -82,7 +82,10 @@ import java.io.IOException;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.UUID;
@RunWith(AndroidJUnit4.class)
@@ -439,14 +442,14 @@ public class PackageManagerSettingsTests {
.setUid(ps2.getAppId())
.hideAsFinal());
- ps1.usesStaticLibraries = new String[] { "com.example.shared.one" };
- ps1.usesStaticLibrariesVersions = new long[] { 12 };
- ps1.setFlags(ps1.pkgFlags | ApplicationInfo.FLAG_SYSTEM);
+ ps1.setUsesStaticLibraries(new String[] { "com.example.shared.one" });
+ ps1.setUsesStaticLibrariesVersions(new long[] { 12 });
+ ps1.setFlags(ps1.getFlags() | ApplicationInfo.FLAG_SYSTEM);
settingsUnderTest.mPackages.put(PACKAGE_NAME_1, ps1);
assertThat(settingsUnderTest.disableSystemPackageLPw(PACKAGE_NAME_1, false), is(true));
- ps2.usesStaticLibraries = new String[] { "com.example.shared.two" };
- ps2.usesStaticLibrariesVersions = new long[] { 34 };
+ ps2.setUsesStaticLibraries(new String[] { "com.example.shared.two" });
+ ps2.setUsesStaticLibrariesVersions(new long[] { 34 });
settingsUnderTest.mPackages.put(PACKAGE_NAME_2, ps2);
settingsUnderTest.writeLPr();
@@ -460,32 +463,32 @@ public class PackageManagerSettingsTests {
PackageSetting readPs2 = settingsUnderTest.getPackageLPr(PACKAGE_NAME_2);
Truth.assertThat(readPs1).isNotNull();
- Truth.assertThat(readPs1.usesStaticLibraries).isNotNull();
- Truth.assertThat(readPs1.usesStaticLibrariesVersions).isNotNull();
+ Truth.assertThat(readPs1.getUsesStaticLibraries()).isNotNull();
+ Truth.assertThat(readPs1.getUsesStaticLibrariesVersions()).isNotNull();
Truth.assertThat(readPs2).isNotNull();
- Truth.assertThat(readPs2.usesStaticLibraries).isNotNull();
- Truth.assertThat(readPs2.usesStaticLibrariesVersions).isNotNull();
+ Truth.assertThat(readPs2.getUsesStaticLibraries()).isNotNull();
+ Truth.assertThat(readPs2.getUsesStaticLibrariesVersions()).isNotNull();
List<Long> ps1VersionsAsList = new ArrayList<>();
- for (long version : ps1.usesStaticLibrariesVersions) {
+ for (long version : ps1.getUsesStaticLibrariesVersions()) {
ps1VersionsAsList.add(version);
}
List<Long> ps2VersionsAsList = new ArrayList<>();
- for (long version : ps2.usesStaticLibrariesVersions) {
+ for (long version : ps2.getUsesStaticLibrariesVersions()) {
ps2VersionsAsList.add(version);
}
- Truth.assertThat(readPs1.usesStaticLibraries).asList()
- .containsExactlyElementsIn(ps1.usesStaticLibraries).inOrder();
+ Truth.assertThat(readPs1.getUsesStaticLibraries()).asList()
+ .containsExactlyElementsIn(ps1.getUsesStaticLibraries()).inOrder();
- Truth.assertThat(readPs1.usesStaticLibrariesVersions).asList()
+ Truth.assertThat(readPs1.getUsesStaticLibrariesVersions()).asList()
.containsExactlyElementsIn(ps1VersionsAsList).inOrder();
- Truth.assertThat(readPs2.usesStaticLibraries).asList()
- .containsExactlyElementsIn(ps2.usesStaticLibraries).inOrder();
+ Truth.assertThat(readPs2.getUsesStaticLibraries()).asList()
+ .containsExactlyElementsIn(ps2.getUsesStaticLibraries()).inOrder();
- Truth.assertThat(readPs2.usesStaticLibrariesVersions).asList()
+ Truth.assertThat(readPs2.getUsesStaticLibrariesVersions()).asList()
.containsExactlyElementsIn(ps2VersionsAsList).inOrder();
}
@@ -615,8 +618,8 @@ public class PackageManagerSettingsTests {
final PackageSetting testPkgSetting01 =
createPackageSetting(0 /*sharedUserId*/, 0 /*pkgFlags*/);
testPkgSetting01.setInstalled(false /*installed*/, 0 /*userId*/);
- assertThat(testPkgSetting01.pkgFlags, is(0));
- assertThat(testPkgSetting01.pkgPrivateFlags, is(0));
+ assertThat(testPkgSetting01.getFlags(), is(0));
+ assertThat(testPkgSetting01.getPrivateFlags(), is(0));
final PackageSetting oldPkgSetting01 = new PackageSetting(testPkgSetting01);
Settings.updatePackageSetting(
testPkgSetting01,
@@ -635,8 +638,8 @@ public class PackageManagerSettingsTests {
UUID.randomUUID());
assertThat(testPkgSetting01.getPrimaryCpuAbi(), is("arm64-v8a"));
assertThat(testPkgSetting01.getSecondaryCpuAbi(), is("armeabi"));
- assertThat(testPkgSetting01.pkgFlags, is(0));
- assertThat(testPkgSetting01.pkgPrivateFlags, is(0));
+ assertThat(testPkgSetting01.getFlags(), is(0));
+ assertThat(testPkgSetting01.getPrivateFlags(), is(0));
final PackageUserState userState = testPkgSetting01.readUserState(0);
final PackageUserState oldUserState = oldPkgSetting01.readUserState(0);
verifyUserState(userState, oldUserState, false /*userStateChanged*/, false /*notLaunched*/,
@@ -649,8 +652,8 @@ public class PackageManagerSettingsTests {
final PackageSetting testPkgSetting01 =
createPackageSetting(0 /*sharedUserId*/, 0 /*pkgFlags*/);
testPkgSetting01.setInstalled(false /*installed*/, 0 /*userId*/);
- assertThat(testPkgSetting01.pkgFlags, is(0));
- assertThat(testPkgSetting01.pkgPrivateFlags, is(0));
+ assertThat(testPkgSetting01.getFlags(), is(0));
+ assertThat(testPkgSetting01.getPrivateFlags(), is(0));
final PackageSetting oldPkgSetting01 = new PackageSetting(testPkgSetting01);
Settings.updatePackageSetting(
testPkgSetting01,
@@ -669,8 +672,8 @@ public class PackageManagerSettingsTests {
UUID.randomUUID());
assertThat(testPkgSetting01.getPrimaryCpuAbi(), is("arm64-v8a"));
assertThat(testPkgSetting01.getSecondaryCpuAbi(), is("armeabi"));
- assertThat(testPkgSetting01.pkgFlags, is(ApplicationInfo.FLAG_SYSTEM));
- assertThat(testPkgSetting01.pkgPrivateFlags, is(ApplicationInfo.PRIVATE_FLAG_PRIVILEGED));
+ assertThat(testPkgSetting01.getFlags(), is(ApplicationInfo.FLAG_SYSTEM));
+ assertThat(testPkgSetting01.getPrivateFlags(), is(ApplicationInfo.PRIVATE_FLAG_PRIVILEGED));
final PackageUserState userState = testPkgSetting01.readUserState(0);
final PackageUserState oldUserState = oldPkgSetting01.readUserState(0);
// WARNING: When creating a shallow copy of the PackageSetting we do NOT create
@@ -739,8 +742,8 @@ public class PackageManagerSettingsTests {
UUID.randomUUID());
assertThat(testPkgSetting01.getPath(), is(UPDATED_CODE_PATH));
assertThat(testPkgSetting01.getPackageName(), is(PACKAGE_NAME));
- assertThat(testPkgSetting01.pkgFlags, is(ApplicationInfo.FLAG_SYSTEM));
- assertThat(testPkgSetting01.pkgPrivateFlags, is(ApplicationInfo.PRIVATE_FLAG_PRIVILEGED));
+ assertThat(testPkgSetting01.getFlags(), is(ApplicationInfo.FLAG_SYSTEM));
+ assertThat(testPkgSetting01.getPrivateFlags(), is(ApplicationInfo.PRIVATE_FLAG_PRIVILEGED));
assertThat(testPkgSetting01.getPrimaryCpuAbi(), is("arm64-v8a"));
assertThat(testPkgSetting01.getSecondaryCpuAbi(), is("armeabi"));
// signatures object must be different
@@ -779,8 +782,8 @@ public class PackageManagerSettingsTests {
assertThat(testPkgSetting01.getAppId(), is(0));
assertThat(testPkgSetting01.getPath(), is(INITIAL_CODE_PATH));
assertThat(testPkgSetting01.getPackageName(), is(PACKAGE_NAME));
- assertThat(testPkgSetting01.pkgFlags, is(0));
- assertThat(testPkgSetting01.pkgPrivateFlags, is(0));
+ assertThat(testPkgSetting01.getFlags(), is(0));
+ assertThat(testPkgSetting01.getPrivateFlags(), is(0));
assertThat(testPkgSetting01.getPrimaryCpuAbi(), is("x86_64"));
assertThat(testPkgSetting01.getSecondaryCpuAbi(), is("x86"));
assertThat(testPkgSetting01.getVersionCode(), is(INITIAL_VERSION_CODE));
@@ -821,8 +824,8 @@ public class PackageManagerSettingsTests {
assertThat(testPkgSetting01.getAppId(), is(10064));
assertThat(testPkgSetting01.getPath(), is(INITIAL_CODE_PATH));
assertThat(testPkgSetting01.getPackageName(), is(PACKAGE_NAME));
- assertThat(testPkgSetting01.pkgFlags, is(0));
- assertThat(testPkgSetting01.pkgPrivateFlags, is(0));
+ assertThat(testPkgSetting01.getFlags(), is(0));
+ assertThat(testPkgSetting01.getPrivateFlags(), is(0));
assertThat(testPkgSetting01.getPrimaryCpuAbi(), is("x86_64"));
assertThat(testPkgSetting01.getSecondaryCpuAbi(), is("x86"));
assertThat(testPkgSetting01.getVersionCode(), is(INITIAL_VERSION_CODE));
@@ -863,8 +866,8 @@ public class PackageManagerSettingsTests {
assertThat(testPkgSetting01.getAppId(), is(10064));
assertThat(testPkgSetting01.getPath(), is(UPDATED_CODE_PATH));
assertThat(testPkgSetting01.getPackageName(), is(PACKAGE_NAME));
- assertThat(testPkgSetting01.pkgFlags, is(0));
- assertThat(testPkgSetting01.pkgPrivateFlags, is(0));
+ assertThat(testPkgSetting01.getFlags(), is(0));
+ assertThat(testPkgSetting01.getPrivateFlags(), is(0));
assertThat(testPkgSetting01.getPrimaryCpuAbi(), is("arm64-v8a"));
assertThat(testPkgSetting01.getSecondaryCpuAbi(), is("armeabi"));
assertNotSame(testPkgSetting01.getSignatures(), disabledSignatures);
@@ -930,10 +933,11 @@ public class PackageManagerSettingsTests {
testPkgSetting.getLegacyNativeLibraryPath());
assertThat(origPkgSetting.getLegacyNativeLibraryPath(),
is(testPkgSetting.getLegacyNativeLibraryPath()));
- if (origPkgSetting.mimeGroups != null) {
- assertNotSame(origPkgSetting.mimeGroups, testPkgSetting.mimeGroups);
+ if (origPkgSetting.getMimeGroups() != null
+ && origPkgSetting.getMimeGroups() != Collections.<String, Set<String>>emptyMap()) {
+ assertNotSame(origPkgSetting.getMimeGroups(), testPkgSetting.getMimeGroups());
}
- assertThat(origPkgSetting.mimeGroups, is(testPkgSetting.mimeGroups));
+ assertThat(origPkgSetting.getMimeGroups(), is(testPkgSetting.getMimeGroups()));
assertNotSame(origPkgSetting.mLegacyPermissionsState,
testPkgSetting.mLegacyPermissionsState);
assertThat(origPkgSetting.mLegacyPermissionsState,
@@ -945,8 +949,8 @@ public class PackageManagerSettingsTests {
assertSame(origPkgSetting.getPkg(), testPkgSetting.getPkg());
// No equals() method for this object
// assertThat(origPkgSetting.pkg, is(testPkgSetting.pkg));
- assertThat(origPkgSetting.pkgFlags, is(testPkgSetting.pkgFlags));
- assertThat(origPkgSetting.pkgPrivateFlags, is(testPkgSetting.pkgPrivateFlags));
+ assertThat(origPkgSetting.getFlags(), is(testPkgSetting.getFlags()));
+ assertThat(origPkgSetting.getPrivateFlags(), is(testPkgSetting.getPrivateFlags()));
assertSame(origPkgSetting.getPrimaryCpuAbi(), testPkgSetting.getPrimaryCpuAbi());
assertThat(origPkgSetting.getPrimaryCpuAbi(), is(testPkgSetting.getPrimaryCpuAbi()));
assertThat(origPkgSetting.getRealName(), is(testPkgSetting.getRealName()));
diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageSettingBuilder.java b/services/tests/servicestests/src/com/android/server/pm/PackageSettingBuilder.java
index 55937630e79a..21460705fd52 100644
--- a/services/tests/servicestests/src/com/android/server/pm/PackageSettingBuilder.java
+++ b/services/tests/servicestests/src/com/android/server/pm/PackageSettingBuilder.java
@@ -17,7 +17,6 @@
package com.android.server.pm;
import android.content.pm.SigningDetails;
-import android.util.ArraySet;
import android.util.SparseArray;
import com.android.server.pm.parsing.pkg.AndroidPackage;
@@ -25,6 +24,7 @@ import com.android.server.pm.pkg.PackageUserStateImpl;
import java.io.File;
import java.util.Map;
+import java.util.Set;
import java.util.UUID;
public class PackageSettingBuilder {
@@ -46,7 +46,7 @@ public class PackageSettingBuilder {
private InstallSource mInstallSource;
private String[] mUsesStaticLibraries;
private long[] mUsesStaticLibrariesVersions;
- private Map<String, ArraySet<String>> mMimeGroups;
+ private Map<String, Set<String>> mMimeGroups;
private SigningDetails mSigningDetails;
private UUID mDomainSetId = UUID.randomUUID();
@@ -127,7 +127,7 @@ public class PackageSettingBuilder {
return this;
}
- public PackageSettingBuilder setMimeGroups(Map<String, ArraySet<String>> mimeGroups) {
+ public PackageSettingBuilder setMimeGroups(Map<String, Set<String>> mimeGroups) {
this.mMimeGroups = mimeGroups;
return this;
}
diff --git a/services/tests/servicestests/src/com/android/server/pm/ScanTests.java b/services/tests/servicestests/src/com/android/server/pm/ScanTests.java
index 82ee3307d91f..cfdbb5b7b30b 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ScanTests.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ScanTests.java
@@ -554,9 +554,9 @@ public class ScanTests {
String packageName, boolean isInstant, PackageSetting pkgSetting) {
assertThat(pkgSetting.getPkg().getPackageName(), is(packageName));
assertThat(pkgSetting.getInstantApp(0), is(isInstant));
- assertThat(pkgSetting.usesStaticLibraries,
+ assertThat(pkgSetting.getUsesStaticLibraries(),
arrayContaining("some.static.library", "some.other.static.library"));
- assertThat(pkgSetting.usesStaticLibrariesVersions, is(new long[]{234L, 456L}));
+ assertThat(pkgSetting.getUsesStaticLibrariesVersions(), is(new long[]{234L, 456L}));
assertThat(pkgSetting.getPkg(), is(scanResult.mRequest.mParsedPackage));
assertThat(pkgSetting.getPath(), is(new File(createCodePath(packageName))));
assertThat(pkgSetting.getVersionCode(),