diff options
4 files changed, 266 insertions, 209 deletions
diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java index d2abc69ad6f2..bd32d03f8b2c 100644 --- a/services/core/java/com/android/server/pm/PackageSetting.java +++ b/services/core/java/com/android/server/pm/PackageSetting.java @@ -29,10 +29,8 @@ import android.content.pm.PackageManager; import android.content.pm.SharedLibraryInfo; import android.content.pm.SigningDetails; import android.content.pm.SigningInfo; -import android.content.pm.SuspendDialogInfo; import android.content.pm.UserInfo; import android.content.pm.overlay.OverlayPaths; -import android.os.PersistableBundle; import android.os.UserHandle; import android.service.pm.PackageProto; import android.util.ArrayMap; @@ -50,7 +48,6 @@ import com.android.server.pm.pkg.AndroidPackageApi; import com.android.server.pm.pkg.PackageState; import com.android.server.pm.pkg.PackageStateInternal; import com.android.server.pm.pkg.PackageStateUnserialized; -import com.android.server.pm.pkg.PackageUserState; import com.android.server.pm.pkg.PackageUserStateImpl; import com.android.server.pm.pkg.PackageUserStateInternal; import com.android.server.pm.pkg.SuspendParams; @@ -662,10 +659,10 @@ public class PackageSetting extends SettingBase implements PackageStateInternal usesStaticLibrariesVersions = other.usesStaticLibrariesVersions != null ? Arrays.copyOf(other.usesStaticLibrariesVersions, other.usesStaticLibrariesVersions.length) : null; - mUserStates.clear(); for (int i = 0; i < other.mUserStates.size(); i++) { - mUserStates.put(other.mUserStates.keyAt(i), other.mUserStates.valueAt(i)); + mUserStates.put(other.mUserStates.keyAt(i), + new PackageUserStateImpl(this, other.mUserStates.valueAt(i))); } if (mOldCodePaths != null) { @@ -686,7 +683,7 @@ public class PackageSetting extends SettingBase implements PackageStateInternal PackageUserStateImpl modifyUserState(int userId) { PackageUserStateImpl state = mUserStates.get(userId); if (state == null) { - state = new PackageUserStateImpl(); + state = new PackageUserStateImpl(this); mUserStates.put(userId, state); onChanged(); } @@ -696,7 +693,7 @@ public class PackageSetting extends SettingBase implements PackageStateInternal public PackageUserStateImpl getOrCreateUserState(@UserIdInt int userId) { PackageUserStateImpl state = mUserStates.get(userId); if (state == null) { - state = new PackageUserStateImpl(); + state = new PackageUserStateImpl(this); mUserStates.put(userId, state); } return state; @@ -1491,10 +1488,10 @@ public class PackageSetting extends SettingBase implements PackageStateInternal } @DataClass.Generated( - time = 1640923794772L, + time = 1643648635766L, codegenVersion = "1.0.23", sourceFile = "frameworks/base/services/core/java/com/android/server/pm/PackageSetting.java", - 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[] usesSdkLibraries\nprivate @android.annotation.Nullable long[] usesSdkLibrariesVersionsMajor\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.Nullable 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 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 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 setFirstInstallTimeFromReplaced(com.android.server.pm.pkg.PackageStateInternal,int[])\npublic com.android.server.pm.PackageSetting setFirstInstallTime(long,int)\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,android.util.ArraySet<java.lang.String>)\npublic com.android.server.pm.PackageSetting setPkg(com.android.server.pm.parsing.pkg.AndroidPackage)\npublic com.android.server.pm.PackageSetting setPkgStateLibraryFiles(java.util.Collection<java.lang.String>)\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 com.android.server.pm.pkg.PackageUserStateImpl getOrCreateUserState(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 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,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,long)\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)\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 isLoading()\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[] getUsesSdkLibraries()\npublic @android.annotation.NonNull @java.lang.Override long[] getUsesSdkLibrariesVersionsMajor()\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 setUsesSdkLibraries(java.lang.String[])\npublic com.android.server.pm.PackageSetting setUsesSdkLibrariesVersionsMajor(long[])\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)") + 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[] usesSdkLibraries\nprivate @android.annotation.Nullable long[] usesSdkLibrariesVersionsMajor\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.Nullable 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 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 final @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 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 setFirstInstallTimeFromReplaced(com.android.server.pm.pkg.PackageStateInternal,int[])\npublic com.android.server.pm.PackageSetting setFirstInstallTime(long,int)\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,android.util.ArraySet<java.lang.String>)\npublic com.android.server.pm.PackageSetting setPkg(com.android.server.pm.parsing.pkg.AndroidPackage)\npublic com.android.server.pm.PackageSetting setPkgStateLibraryFiles(java.util.Collection<java.lang.String>)\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 com.android.server.pm.pkg.PackageUserStateImpl getOrCreateUserState(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 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 @android.annotation.NonNull android.content.pm.overlay.OverlayPaths getOverlayPaths(int)\n boolean setOverlayPathsForLibrary(java.lang.String,android.content.pm.overlay.OverlayPaths,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)\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,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,long)\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 com.android.server.pm.PackageSetting setPath(java.io.File)\npublic @com.android.internal.annotations.VisibleForTesting boolean overrideNonLocalizedLabelAndIcon(android.content.ComponentName,java.lang.String,java.lang.Integer,int)\npublic void resetOverrideComponentLabelIcon(int)\npublic @android.annotation.Nullable java.lang.String getSplashScreenTheme(int)\npublic boolean isLoading()\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 int getSharedUserId()\npublic @android.annotation.NonNull android.content.pm.SigningInfo getSigningInfo()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String[] getUsesSdkLibraries()\npublic @android.annotation.NonNull @java.lang.Override long[] getUsesSdkLibrariesVersionsMajor()\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 setUsesSdkLibraries(java.lang.String[])\npublic com.android.server.pm.PackageSetting setUsesSdkLibrariesVersionsMajor(long[])\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/pkg/PackageUserStateImpl.java b/services/core/java/com/android/server/pm/pkg/PackageUserStateImpl.java index 25abcb3bec35..efb6144af9a8 100644 --- a/services/core/java/com/android/server/pm/pkg/PackageUserStateImpl.java +++ b/services/core/java/com/android/server/pm/pkg/PackageUserStateImpl.java @@ -30,13 +30,13 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; import com.android.internal.util.CollectionUtils; import com.android.internal.util.DataClass; +import com.android.server.utils.Watchable; import java.util.Objects; @DataClass(genConstructor = false, genBuilder = false, genEqualsHashCode = true) @DataClass.Suppress({"mOverlayPathsLock", "mOverlayPaths", "mSharedLibraryOverlayPathsLock", - "mSharedLibraryOverlayPaths", "setOverlayPaths", "mCachedOverlayPathsLock", - "mCachedOverlayPaths", "setCachedOverlayPaths"}) + "mSharedLibraryOverlayPaths", "setOverlayPaths", "setCachedOverlayPaths"}) public class PackageUserStateImpl implements PackageUserStateInternal { @Nullable @@ -72,31 +72,37 @@ public class PackageUserStateImpl implements PackageUserStateInternal { @Nullable private String mSplashScreenTheme; - /** Suspending package to suspend params */ + /** + * Suspending package to suspend params + */ @Nullable private ArrayMap<String, SuspendParams> mSuspendParams; @Nullable - private OverlayPaths mCachedOverlayPaths; - - @Nullable private ArrayMap<ComponentName, Pair<String, Integer>> mComponentLabelIconOverrideMap; private long mFirstInstallTime; + @Nullable + private final Watchable mWatchable; + public PackageUserStateImpl() { super(); + mWatchable = null; } - public PackageUserStateImpl(PackageUserStateImpl other) { + public PackageUserStateImpl(@NonNull Watchable watchable) { + mWatchable = watchable; + } + + public PackageUserStateImpl(@NonNull Watchable watchable, PackageUserStateImpl other) { + mWatchable = watchable; mDisabledComponents = ArrayUtils.cloneOrNull(other.mDisabledComponents); mEnabledComponents = ArrayUtils.cloneOrNull(other.mEnabledComponents); mOverlayPaths = other.mOverlayPaths; if (other.mSharedLibraryOverlayPaths != null) { mSharedLibraryOverlayPaths = new ArrayMap<>(other.mSharedLibraryOverlayPaths); } - mDisabledComponents = other.mDisabledComponents; - mEnabledComponents = other.mEnabledComponents; mCeDataInode = other.mCeDataInode; mInstalled = other.mInstalled; mStopped = other.mStopped; @@ -110,16 +116,22 @@ public class PackageUserStateImpl implements PackageUserStateInternal { mUninstallReason = other.mUninstallReason; mHarmfulAppWarning = other.mHarmfulAppWarning; mLastDisableAppCaller = other.mLastDisableAppCaller; - mOverlayPaths = other.mOverlayPaths; - mSharedLibraryOverlayPaths = other.mSharedLibraryOverlayPaths; mSplashScreenTheme = other.mSplashScreenTheme; mSuspendParams = other.mSuspendParams == null ? null : new ArrayMap<>(other.mSuspendParams); mComponentLabelIconOverrideMap = other.mComponentLabelIconOverrideMap == null ? null : new ArrayMap<>(other.mComponentLabelIconOverrideMap); + mFirstInstallTime = other.mFirstInstallTime; + } + + private void onChanged() { + if (mWatchable != null) { + mWatchable.dispatchChange(mWatchable); + } } /** * Sets the path of overlays currently enabled for this package and user combination. + * * @return true if the path contents differ than what they were previously */ @Nullable @@ -132,7 +144,7 @@ public class PackageUserStateImpl implements PackageUserStateInternal { return false; } mOverlayPaths = paths; - mCachedOverlayPaths = null; + onChanged(); return true; } @@ -150,11 +162,13 @@ public class PackageUserStateImpl implements PackageUserStateInternal { if (Objects.equals(paths, currentPaths)) { return false; } - mCachedOverlayPaths = null; if (paths == null || paths.isEmpty()) { - return mSharedLibraryOverlayPaths.remove(library) != null; + boolean returnValue = mSharedLibraryOverlayPaths.remove(library) != null; + onChanged(); + return returnValue; } else { mSharedLibraryOverlayPaths.put(library, paths); + onChanged(); return true; } } @@ -233,16 +247,18 @@ public class PackageUserStateImpl implements PackageUserStateInternal { mComponentLabelIconOverrideMap.put(component, Pair.create(nonLocalizedLabel, icon)); } + onChanged(); } return changed; } /** - * Clears all values previously set by {@link #overrideLabelAndIcon(ComponentName, - * String, Integer)}. - * - * This is done when the package is updated as the components and resource IDs may have changed. + * Clears all values previously set by {@link #overrideLabelAndIcon(ComponentName, String, + * Integer)}. + * <p> + * This is done when the package is updated as the components and resource IDs may have + * changed. */ public void resetOverrideComponentLabelIcon() { mComponentLabelIconOverrideMap = null; @@ -263,21 +279,157 @@ public class PackageUserStateImpl implements PackageUserStateInternal { } public PackageUserStateImpl putSuspendParams(@NonNull String suspendingPackage, - @NonNull SuspendParams suspendParams) { + @Nullable SuspendParams suspendParams) { if (mSuspendParams == null) { mSuspendParams = new ArrayMap<>(); } - mSuspendParams.put(suspendingPackage, suspendParams); + if (!mSuspendParams.containsKey(suspendingPackage) + || !Objects.equals(mSuspendParams.get(suspendingPackage), suspendParams)) { + mSuspendParams.put(suspendingPackage, suspendParams); + onChanged(); + } + return this; } public PackageUserStateImpl removeSuspension(@NonNull String suspendingPackage) { if (mSuspendParams != null) { mSuspendParams.remove(suspendingPackage); + onChanged(); } return this; } + public @NonNull PackageUserStateImpl setDisabledComponents(@NonNull ArraySet<String> value) { + mDisabledComponents = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setEnabledComponents(@NonNull ArraySet<String> value) { + mEnabledComponents = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setCeDataInode(long value) { + mCeDataInode = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setInstalled(boolean value) { + mInstalled = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setStopped(boolean value) { + mStopped = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setNotLaunched(boolean value) { + mNotLaunched = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setHidden(boolean value) { + mHidden = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setDistractionFlags(int value) { + mDistractionFlags = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setInstantApp(boolean value) { + mInstantApp = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setVirtualPreload(boolean value) { + mVirtualPreload = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setEnabledState(int value) { + mEnabledState = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setInstallReason(@PackageManager.InstallReason int value) { + mInstallReason = value; + com.android.internal.util.AnnotationValidations.validate( + PackageManager.InstallReason.class, null, mInstallReason); + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setUninstallReason( + @PackageManager.UninstallReason int value) { + mUninstallReason = value; + com.android.internal.util.AnnotationValidations.validate( + PackageManager.UninstallReason.class, null, mUninstallReason); + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setHarmfulAppWarning(@NonNull String value) { + mHarmfulAppWarning = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setLastDisableAppCaller(@NonNull String value) { + mLastDisableAppCaller = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setSharedLibraryOverlayPaths( + @NonNull ArrayMap<String, OverlayPaths> value) { + mSharedLibraryOverlayPaths = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setSplashScreenTheme(@NonNull String value) { + mSplashScreenTheme = value; + onChanged(); + return this; + } + + /** + * Suspending package to suspend params + */ + public @NonNull PackageUserStateImpl setSuspendParams( + @NonNull ArrayMap<String, SuspendParams> value) { + mSuspendParams = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setComponentLabelIconOverrideMap( + @NonNull ArrayMap<ComponentName, Pair<String, Integer>> value) { + mComponentLabelIconOverrideMap = value; + onChanged(); + return this; + } + + public @NonNull PackageUserStateImpl setFirstInstallTime(long value) { + mFirstInstallTime = value; + onChanged(); + return this; + } @@ -393,11 +545,6 @@ public class PackageUserStateImpl implements PackageUserStateInternal { } @DataClass.Generated.Member - public @Nullable OverlayPaths getCachedOverlayPaths() { - return mCachedOverlayPaths; - } - - @DataClass.Generated.Member public @Nullable ArrayMap<ComponentName,Pair<String,Integer>> getComponentLabelIconOverrideMap() { return mComponentLabelIconOverrideMap; } @@ -408,130 +555,8 @@ public class PackageUserStateImpl implements PackageUserStateInternal { } @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setDisabledComponents(@NonNull ArraySet<String> value) { - mDisabledComponents = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setEnabledComponents(@NonNull ArraySet<String> value) { - mEnabledComponents = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setCeDataInode( long value) { - mCeDataInode = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setInstalled( boolean value) { - mInstalled = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setStopped( boolean value) { - mStopped = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setNotLaunched( boolean value) { - mNotLaunched = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setHidden( boolean value) { - mHidden = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setDistractionFlags( int value) { - mDistractionFlags = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setInstantApp( boolean value) { - mInstantApp = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setVirtualPreload( boolean value) { - mVirtualPreload = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setEnabledState( int value) { - mEnabledState = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setInstallReason(@PackageManager.InstallReason int value) { - mInstallReason = value; - com.android.internal.util.AnnotationValidations.validate( - PackageManager.InstallReason.class, null, mInstallReason); - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setUninstallReason(@PackageManager.UninstallReason int value) { - mUninstallReason = value; - com.android.internal.util.AnnotationValidations.validate( - PackageManager.UninstallReason.class, null, mUninstallReason); - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setHarmfulAppWarning(@NonNull String value) { - mHarmfulAppWarning = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setLastDisableAppCaller(@NonNull String value) { - mLastDisableAppCaller = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setSharedLibraryOverlayPaths(@NonNull ArrayMap<String,OverlayPaths> value) { - mSharedLibraryOverlayPaths = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setSplashScreenTheme(@NonNull String value) { - mSplashScreenTheme = value; - return this; - } - - /** - * Suspending package to suspend params - */ - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setSuspendParams(@NonNull ArrayMap<String,SuspendParams> value) { - mSuspendParams = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setComponentLabelIconOverrideMap(@NonNull ArrayMap<ComponentName,Pair<String,Integer>> value) { - mComponentLabelIconOverrideMap = value; - return this; - } - - @DataClass.Generated.Member - public @NonNull PackageUserStateImpl setFirstInstallTime( long value) { - mFirstInstallTime = value; - return this; + public @Nullable Watchable getWatchable() { + return mWatchable; } @Override @@ -566,9 +591,9 @@ public class PackageUserStateImpl implements PackageUserStateInternal { && Objects.equals(mSharedLibraryOverlayPaths, that.mSharedLibraryOverlayPaths) && Objects.equals(mSplashScreenTheme, that.mSplashScreenTheme) && Objects.equals(mSuspendParams, that.mSuspendParams) - && Objects.equals(mCachedOverlayPaths, that.mCachedOverlayPaths) && Objects.equals(mComponentLabelIconOverrideMap, that.mComponentLabelIconOverrideMap) - && mFirstInstallTime == that.mFirstInstallTime; + && mFirstInstallTime == that.mFirstInstallTime + && Objects.equals(mWatchable, that.mWatchable); } @Override @@ -597,17 +622,17 @@ public class PackageUserStateImpl implements PackageUserStateInternal { _hash = 31 * _hash + Objects.hashCode(mSharedLibraryOverlayPaths); _hash = 31 * _hash + Objects.hashCode(mSplashScreenTheme); _hash = 31 * _hash + Objects.hashCode(mSuspendParams); - _hash = 31 * _hash + Objects.hashCode(mCachedOverlayPaths); _hash = 31 * _hash + Objects.hashCode(mComponentLabelIconOverrideMap); _hash = 31 * _hash + Long.hashCode(mFirstInstallTime); + _hash = 31 * _hash + Objects.hashCode(mWatchable); return _hash; } @DataClass.Generated( - time = 1640923839971L, + time = 1643854846064L, codegenVersion = "1.0.23", sourceFile = "frameworks/base/services/core/java/com/android/server/pm/pkg/PackageUserStateImpl.java", - inputSignatures = "protected @android.annotation.Nullable android.util.ArraySet<java.lang.String> mDisabledComponents\nprotected @android.annotation.Nullable android.util.ArraySet<java.lang.String> mEnabledComponents\nprivate long mCeDataInode\nprivate boolean mInstalled\nprivate boolean mStopped\nprivate boolean mNotLaunched\nprivate boolean mHidden\nprivate int mDistractionFlags\nprivate boolean mInstantApp\nprivate boolean mVirtualPreload\nprivate int mEnabledState\nprivate @android.content.pm.PackageManager.InstallReason int mInstallReason\nprivate @android.content.pm.PackageManager.UninstallReason int mUninstallReason\nprivate @android.annotation.Nullable java.lang.String mHarmfulAppWarning\nprivate @android.annotation.Nullable java.lang.String mLastDisableAppCaller\nprotected @android.annotation.Nullable android.content.pm.overlay.OverlayPaths mOverlayPaths\nprotected @android.annotation.Nullable android.util.ArrayMap<java.lang.String,android.content.pm.overlay.OverlayPaths> mSharedLibraryOverlayPaths\nprivate @android.annotation.Nullable java.lang.String mSplashScreenTheme\nprivate @android.annotation.Nullable android.util.ArrayMap<java.lang.String,com.android.server.pm.pkg.SuspendParams> mSuspendParams\nprivate @android.annotation.Nullable android.content.pm.overlay.OverlayPaths mCachedOverlayPaths\nprivate @android.annotation.Nullable android.util.ArrayMap<android.content.ComponentName,android.util.Pair<java.lang.String,java.lang.Integer>> mComponentLabelIconOverrideMap\nprivate long mFirstInstallTime\npublic @android.annotation.Nullable boolean setOverlayPaths(android.content.pm.overlay.OverlayPaths)\npublic boolean setSharedLibraryOverlayPaths(java.lang.String,android.content.pm.overlay.OverlayPaths)\npublic @android.annotation.Nullable @java.lang.Override android.util.ArraySet<java.lang.String> getDisabledComponentsNoCopy()\npublic @android.annotation.Nullable @java.lang.Override android.util.ArraySet<java.lang.String> getEnabledComponentsNoCopy()\npublic @java.lang.Override boolean isComponentEnabled(java.lang.String)\npublic @java.lang.Override boolean isComponentDisabled(java.lang.String)\npublic @java.lang.Override android.content.pm.overlay.OverlayPaths getAllOverlayPaths()\npublic @com.android.internal.annotations.VisibleForTesting boolean overrideLabelAndIcon(android.content.ComponentName,java.lang.String,java.lang.Integer)\npublic void resetOverrideComponentLabelIcon()\npublic @android.annotation.Nullable android.util.Pair<java.lang.String,java.lang.Integer> getOverrideLabelIconForComponent(android.content.ComponentName)\npublic @java.lang.Override boolean isSuspended()\npublic com.android.server.pm.pkg.PackageUserStateImpl putSuspendParams(java.lang.String,com.android.server.pm.pkg.SuspendParams)\npublic com.android.server.pm.pkg.PackageUserStateImpl removeSuspension(java.lang.String)\nclass PackageUserStateImpl extends java.lang.Object implements [com.android.server.pm.pkg.PackageUserStateInternal]\n@com.android.internal.util.DataClass(genConstructor=false, genBuilder=false, genEqualsHashCode=true)") + inputSignatures = "protected @android.annotation.Nullable android.util.ArraySet<java.lang.String> mDisabledComponents\nprotected @android.annotation.Nullable android.util.ArraySet<java.lang.String> mEnabledComponents\nprivate long mCeDataInode\nprivate boolean mInstalled\nprivate boolean mStopped\nprivate boolean mNotLaunched\nprivate boolean mHidden\nprivate int mDistractionFlags\nprivate boolean mInstantApp\nprivate boolean mVirtualPreload\nprivate int mEnabledState\nprivate @android.content.pm.PackageManager.InstallReason int mInstallReason\nprivate @android.content.pm.PackageManager.UninstallReason int mUninstallReason\nprivate @android.annotation.Nullable java.lang.String mHarmfulAppWarning\nprivate @android.annotation.Nullable java.lang.String mLastDisableAppCaller\nprotected @android.annotation.Nullable android.content.pm.overlay.OverlayPaths mOverlayPaths\nprotected @android.annotation.Nullable android.util.ArrayMap<java.lang.String,android.content.pm.overlay.OverlayPaths> mSharedLibraryOverlayPaths\nprivate @android.annotation.Nullable java.lang.String mSplashScreenTheme\nprivate @android.annotation.Nullable android.util.ArrayMap<java.lang.String,com.android.server.pm.pkg.SuspendParams> mSuspendParams\nprivate @android.annotation.Nullable android.util.ArrayMap<android.content.ComponentName,android.util.Pair<java.lang.String,java.lang.Integer>> mComponentLabelIconOverrideMap\nprivate long mFirstInstallTime\nprivate final @android.annotation.Nullable com.android.server.utils.Watchable mWatchable\nprivate void onChanged()\npublic @android.annotation.Nullable boolean setOverlayPaths(android.content.pm.overlay.OverlayPaths)\npublic boolean setSharedLibraryOverlayPaths(java.lang.String,android.content.pm.overlay.OverlayPaths)\npublic @android.annotation.Nullable @java.lang.Override android.util.ArraySet<java.lang.String> getDisabledComponentsNoCopy()\npublic @android.annotation.Nullable @java.lang.Override android.util.ArraySet<java.lang.String> getEnabledComponentsNoCopy()\npublic @java.lang.Override boolean isComponentEnabled(java.lang.String)\npublic @java.lang.Override boolean isComponentDisabled(java.lang.String)\npublic @java.lang.Override android.content.pm.overlay.OverlayPaths getAllOverlayPaths()\npublic @com.android.internal.annotations.VisibleForTesting boolean overrideLabelAndIcon(android.content.ComponentName,java.lang.String,java.lang.Integer)\npublic void resetOverrideComponentLabelIcon()\npublic @android.annotation.Nullable android.util.Pair<java.lang.String,java.lang.Integer> getOverrideLabelIconForComponent(android.content.ComponentName)\npublic @java.lang.Override boolean isSuspended()\npublic com.android.server.pm.pkg.PackageUserStateImpl putSuspendParams(java.lang.String,com.android.server.pm.pkg.SuspendParams)\npublic com.android.server.pm.pkg.PackageUserStateImpl removeSuspension(java.lang.String)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setDisabledComponents(android.util.ArraySet<java.lang.String>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setEnabledComponents(android.util.ArraySet<java.lang.String>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setCeDataInode(long)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setInstalled(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setStopped(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setNotLaunched(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setHidden(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setDistractionFlags(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setInstantApp(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setVirtualPreload(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setEnabledState(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setInstallReason(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setUninstallReason(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setHarmfulAppWarning(java.lang.String)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setLastDisableAppCaller(java.lang.String)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setSharedLibraryOverlayPaths(android.util.ArrayMap<java.lang.String,android.content.pm.overlay.OverlayPaths>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setSplashScreenTheme(java.lang.String)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setSuspendParams(android.util.ArrayMap<java.lang.String,com.android.server.pm.pkg.SuspendParams>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setComponentLabelIconOverrideMap(android.util.ArrayMap<android.content.ComponentName,android.util.Pair<java.lang.String,java.lang.Integer>>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setFirstInstallTime(long)\nclass PackageUserStateImpl extends java.lang.Object implements [com.android.server.pm.pkg.PackageUserStateInternal]\n@com.android.internal.util.DataClass(genConstructor=false, genBuilder=false, genEqualsHashCode=true)") @Deprecated private void __metadata() {} 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 ac836426b536..ed4dee1792e5 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java @@ -43,7 +43,6 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.SuspendDialogInfo; import android.content.pm.UserInfo; -import android.content.pm.parsing.FrameworkParsingPackageUtils; import android.os.BaseBundle; import android.os.PersistableBundle; import android.os.Process; @@ -87,7 +86,6 @@ import java.io.FileOutputStream; 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.Set; @@ -671,6 +669,23 @@ public class PackageManagerSettingsTests { null /*usesStaticLibrariesVersions*/, null /*mimeGroups*/, UUID.randomUUID()); + origPkgSetting01.setUserState(0, 100, 1, true, false, false, false, 0, null, false, + false, "lastDisabledCaller", new ArraySet<>(new String[]{"enabledComponent1"}), + new ArraySet<>(new String[]{"disabledComponent1"}), 0, 0, "harmfulAppWarning", + "splashScreenTheme", 1000L); + final PersistableBundle appExtras1 = createPersistableBundle( + PACKAGE_NAME_1, 1L, 0.01, true, "appString1"); + final PersistableBundle launcherExtras1 = createPersistableBundle( + PACKAGE_NAME_1, 10L, 0.1, false, "launcherString1"); + final SuspendDialogInfo dialogInfo1 = new SuspendDialogInfo.Builder() + .setIcon(0x11220001) + .setTitle("String Title") + .setMessage("1st message") + .setNeutralButtonText(0x11220003) + .setNeutralButtonAction(BUTTON_ACTION_MORE_DETAILS) + .build(); + origPkgSetting01.modifyUserState(0).putSuspendParams("suspendingPackage1", + SuspendParams.getInstanceOrNull(dialogInfo1, appExtras1, launcherExtras1)); final PackageSetting testPkgSetting01 = new PackageSetting( PACKAGE_NAME /*pkgName*/, REAL_PACKAGE_NAME /*realPkgName*/, @@ -691,6 +706,8 @@ public class PackageManagerSettingsTests { UUID.randomUUID()); testPkgSetting01.copyPackageSetting(origPkgSetting01); verifySettingCopy(origPkgSetting01, testPkgSetting01); + verifyUserStatesCopy(origPkgSetting01.readUserState(0), + testPkgSetting01.readUserState(0)); } /** Update package */ @@ -724,8 +741,7 @@ public class PackageManagerSettingsTests { 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*/, + verifyUserState(userState, false /*notLaunched*/, false /*stopped*/, false /*installed*/); } @@ -760,11 +776,7 @@ public class PackageManagerSettingsTests { 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 - // new contained objects. For example, this means that changes to the user state - // in testPkgSetting01 will also change the user state in its copy. - verifyUserState(userState, oldUserState, false /*userStateChanged*/, false /*notLaunched*/, + verifyUserState(userState, false /*notLaunched*/, false /*stopped*/, true /*installed*/); } @@ -839,8 +851,7 @@ public class PackageManagerSettingsTests { assertNotSame(testPkgSetting01.getSignatures(), originalSignatures); assertThat(testPkgSetting01.getVersionCode(), is(UPDATED_VERSION_CODE)); final PackageUserState userState = testPkgSetting01.readUserState(0); - verifyUserState(userState, null /*oldUserState*/, false /*userStateChanged*/, - false /*notLaunched*/, false /*stopped*/, true /*installed*/); + verifyUserState(userState, false /*notLaunched*/, false /*stopped*/, true /*installed*/); } /** Create a new non-system PackageSetting */ @@ -880,8 +891,7 @@ public class PackageManagerSettingsTests { assertThat(testPkgSetting01.getVersionCode(), is(INITIAL_VERSION_CODE)); // by default, the package is considered stopped final PackageUserState userState = testPkgSetting01.readUserState(0); - verifyUserState(userState, null /*oldUserState*/, false /*userStateChanged*/, - true /*notLaunched*/, true /*stopped*/, true /*installed*/); + verifyUserState(userState, true /*notLaunched*/, true /*stopped*/, true /*installed*/); } /** Create PackageSetting for a shared user */ @@ -923,8 +933,7 @@ public class PackageManagerSettingsTests { assertThat(testPkgSetting01.getSecondaryCpuAbi(), is("x86")); assertThat(testPkgSetting01.getVersionCode(), is(INITIAL_VERSION_CODE)); final PackageUserState userState = testPkgSetting01.readUserState(0); - verifyUserState(userState, null /*oldUserState*/, false /*userStateChanged*/, - false /*notLaunched*/, false /*stopped*/, true /*installed*/); + verifyUserState(userState, false /*notLaunched*/, false /*stopped*/, true /*installed*/); } /** Create a new PackageSetting based on a disabled package setting */ @@ -968,8 +977,7 @@ public class PackageManagerSettingsTests { assertNotSame(testPkgSetting01.getSignatures(), disabledSignatures); assertThat(testPkgSetting01.getVersionCode(), is(UPDATED_VERSION_CODE)); final PackageUserState userState = testPkgSetting01.readUserState(0); - verifyUserState(userState, null /*oldUserState*/, false /*userStateChanged*/, - false /*notLaunched*/, false /*stopped*/, true /*installed*/); + verifyUserState(userState, false /*notLaunched*/, false /*stopped*/, true /*installed*/); } @Test @@ -1080,29 +1088,8 @@ public class PackageManagerSettingsTests { assertThat(countDownLatch.getCount(), is(0L)); } - private <T> void assertArrayEquals(T[] a, T[] b) { - assertTrue("Expected: " + Arrays.toString(a) + ", actual: " + Arrays.toString(b), - Arrays.equals(a, b)); - } - - private void assertArrayEquals(int[] a, int[] b) { - assertTrue("Expected: " + Arrays.toString(a) + ", actual: " + Arrays.toString(b), - Arrays.equals(a, b)); - } - - private void assertArrayEquals(long[] a, long[] b) { - assertTrue("Expected: " + Arrays.toString(a) + ", actual: " + Arrays.toString(b), - Arrays.equals(a, b)); - } - - private void verifyUserState(PackageUserState userState, PackageUserState oldUserState, - boolean userStateChanged) { - verifyUserState(userState, oldUserState, userStateChanged, false /*notLaunched*/, - false /*stopped*/, true /*installed*/); - } - - private void verifyUserState(PackageUserState userState, PackageUserState oldUserState, - boolean userStateChanged, boolean notLaunched, boolean stopped, boolean installed) { + private void verifyUserState(PackageUserState userState, + boolean notLaunched, boolean stopped, boolean installed) { assertThat(userState.getEnabledState(), is(0)); assertThat(userState.isHidden(), is(false)); assertThat(userState.isInstalled(), is(installed)); @@ -1110,9 +1097,6 @@ public class PackageManagerSettingsTests { assertThat(userState.isStopped(), is(stopped)); assertThat(userState.isSuspended(), is(false)); assertThat(userState.getDistractionFlags(), is(0)); - if (oldUserState != null) { - assertThat(userState.equals(oldUserState), is(not(userStateChanged))); - } } private void verifyKeySetData(PackageKeySetData originalData, PackageKeySetData testData) { @@ -1177,6 +1161,57 @@ public class PackageManagerSettingsTests { assertThat(origPkgSetting.getVolumeUuid(), is(testPkgSetting.getVolumeUuid())); } + private void verifyUserStatesCopy(PackageUserStateInternal origPus, + PackageUserStateInternal testPus) { + assertThat(userStateEquals(origPus, testPus), is(true)); + // Verify suspendParams are copied over + assertThat(origPus.getSuspendParams(), is(notNullValue())); + assertThat(testPus.getSuspendParams(), is(notNullValue())); + SuspendParams origSuspendParams = origPus.getSuspendParams().valueAt(0); + SuspendParams testSuspendParams = testPus.getSuspendParams().valueAt(0); + assertThat(origSuspendParams.getDialogInfo().equals(testSuspendParams.getDialogInfo()), + is(true)); + assertThat(BaseBundle.kindofEquals( + origSuspendParams.getAppExtras(), testSuspendParams.getAppExtras()), is(true)); + assertThat(BaseBundle.kindofEquals(origSuspendParams.getLauncherExtras(), + testSuspendParams.getLauncherExtras()), is(true)); + // Verify that disabledComponents and enabledComponents are copied + assertThat(origPus.getDisabledComponents(), is(notNullValue())); + assertThat(origPus.getDisabledComponents().equals(testPus.getDisabledComponents()), + is(true)); + assertThat(origPus.getEnabledComponents(), is(notNullValue())); + assertThat(origPus.getEnabledComponents().equals(testPus.getEnabledComponents()), + is(true)); + } + + private boolean userStateEquals(PackageUserState userState, PackageUserState oldUserState) { + return userState.isHidden() == oldUserState.isHidden() + && userState.isStopped() == oldUserState.isStopped() + && userState.isInstalled() == oldUserState.isInstalled() + && userState.isSuspended() == oldUserState.isSuspended() + && userState.isNotLaunched() == oldUserState.isNotLaunched() + && userState.isInstantApp() == oldUserState.isInstantApp() + && userState.isVirtualPreload() == oldUserState.isVirtualPreload() + && (userState.getAllOverlayPaths() != null + ? userState.getAllOverlayPaths().equals(oldUserState.getAllOverlayPaths()) + : oldUserState.getOverlayPaths() == null) + && userState.getCeDataInode() == oldUserState.getCeDataInode() + && userState.getDistractionFlags() == oldUserState.getDistractionFlags() + && userState.getFirstInstallTime() == oldUserState.getFirstInstallTime() + && userState.getEnabledState() == oldUserState.getEnabledState() + && userState.getHarmfulAppWarning().equals(oldUserState.getHarmfulAppWarning()) + && userState.getInstallReason() == oldUserState.getInstallReason() + && userState.getLastDisableAppCaller().equals( + oldUserState.getLastDisableAppCaller()) + && (userState.getSharedLibraryOverlayPaths() != null + ? userState.getSharedLibraryOverlayPaths().equals( + oldUserState.getSharedLibraryOverlayPaths()) + : oldUserState.getSharedLibraryOverlayPaths() == null) + && userState.getSplashScreenTheme().equals( + oldUserState.getSplashScreenTheme()) + && userState.getUninstallReason() == oldUserState.getUninstallReason(); + } + private SharedUserSetting createSharedUserSetting(Settings settings, String userName, int sharedUserId, int pkgFlags, int pkgPrivateFlags) { return settings.addSharedUserLPw( diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageUserStateTest.java b/services/tests/servicestests/src/com/android/server/pm/PackageUserStateTest.java index 6c7236993df0..a0edb85e64e1 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageUserStateTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageUserStateTest.java @@ -236,7 +236,7 @@ public class PackageUserStateTest { testUserState1.setSuspendParams(paramsMap1); PackageUserStateImpl testUserState2 = - new PackageUserStateImpl(testUserState1); + new PackageUserStateImpl(null, testUserState1); assertThat(testUserState1.equals(testUserState2), is(true)); testUserState2.setSuspendParams(paramsMap2); // Should not be equal since suspendParams maps are different @@ -250,12 +250,12 @@ public class PackageUserStateTest { userState1.setDistractionFlags(PackageManager.RESTRICTION_HIDE_FROM_SUGGESTIONS); final PackageUserStateImpl copyOfUserState1 = - new PackageUserStateImpl(userState1); + new PackageUserStateImpl(null, userState1); assertThat(userState1.getDistractionFlags(), is(copyOfUserState1.getDistractionFlags())); assertThat(userState1.equals(copyOfUserState1), is(true)); final PackageUserStateImpl userState2 = - new PackageUserStateImpl(userState1); + new PackageUserStateImpl(null, userState1); userState2.setDistractionFlags(PackageManager.RESTRICTION_HIDE_NOTIFICATIONS); assertThat(userState1.equals(userState2), is(false)); } |