diff options
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(), |