From f35139be6dd048d881544e7061a92d64a2298d61 Mon Sep 17 00:00:00 2001 From: Songchun Fan Date: Thu, 3 Aug 2023 16:51:30 -0700 Subject: [PATCH] [pm] get data dir without AndroidPackage An app's data dir can still exist even if the APK is deleted and when the corresponding AndroidPackage is null. This CL is to make it possible to get the data dir path without using the AndroidPackage object in PackageSetting. BUG: 288142708 Test: run dumpsys on a package deleted with DELETE_KEEP_DATA and check "dataDir=" in the output Test: after reboot the output is still the same Test: to add a cts test for this in a follow-up CL Test: atest com.android.server.pm.PackageManagerSettingsDeviceTests Change-Id: I8d2777af46d8ac2c541e22a2532195776e145a50 --- .../server/pm/InstallPackageHelper.java | 5 +- .../com/android/server/pm/PackageSetting.java | 23 ++++++- .../android/server/pm/ScanPackageUtils.java | 2 + .../java/com/android/server/pm/Settings.java | 51 ++++++++------- .../server/pm/dex/ArtManagerService.java | 8 +-- .../android/server/pm/dex/ViewCompiler.java | 11 ++-- .../server/pm/parsing/PackageInfoUtils.java | 14 ++-- .../android/server/pm/pkg/PackageState.java | 6 ++ .../server/pm/pkg/PackageStateImpl.java | 65 +++++++++++-------- 9 files changed, 114 insertions(+), 71 deletions(-) diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java index 7e1560ada784..31869b8ea0b5 100644 --- a/services/core/java/com/android/server/pm/InstallPackageHelper.java +++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java @@ -2417,7 +2417,8 @@ final class InstallPackageHelper { final InstallRequest installRequest = reconciledPkg.mInstallRequest; final boolean instantApp = ((installRequest.getScanFlags() & SCAN_AS_INSTANT_APP) != 0); final boolean isApex = ((installRequest.getScanFlags() & SCAN_AS_APEX) != 0); - final AndroidPackage pkg = installRequest.getScannedPackageSetting().getPkg(); + final PackageSetting ps = installRequest.getScannedPackageSetting(); + final AndroidPackage pkg = ps.getPkg(); final String packageName = pkg.getPackageName(); final String codePath = pkg.getPath(); final boolean onIncremental = mIncrementalManager != null @@ -2517,7 +2518,7 @@ final class InstallPackageHelper { // Compile the layout resources. if (SystemProperties.getBoolean(PRECOMPILE_LAYOUTS, false)) { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "compileLayouts"); - mViewCompiler.compileLayouts(pkg); + mViewCompiler.compileLayouts(ps, pkg.getBaseApkPath()); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); } diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java index cf4d1b0439d4..6b8765e375ed 100644 --- a/services/core/java/com/android/server/pm/PackageSetting.java +++ b/services/core/java/com/android/server/pm/PackageSetting.java @@ -176,6 +176,9 @@ public class PackageSetting extends SettingBase implements PackageStateInternal @Nullable private String volumeUuid; + /** @see PackageState#isDefaultToDeviceProtectedStorage() */ + private boolean defaultToDeviceProtectedStorage; + /** @see PackageState#getCategoryOverride() */ private int categoryOverride = ApplicationInfo.CATEGORY_UNDEFINED; @@ -487,6 +490,13 @@ public class PackageSetting extends SettingBase implements PackageStateInternal return this; } + public PackageSetting setDefaultToDeviceProtectedStorage( + boolean defaultToDeviceProtectedStorage) { + this.defaultToDeviceProtectedStorage = defaultToDeviceProtectedStorage; + onChanged(); + return this; + } + @Override public boolean isExternalStorage() { return (getFlags() & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0; @@ -656,6 +666,7 @@ public class PackageSetting extends SettingBase implements PackageStateInternal keySetData = new PackageKeySetData(other.keySetData); installSource = other.installSource; volumeUuid = other.volumeUuid; + defaultToDeviceProtectedStorage = other.defaultToDeviceProtectedStorage; categoryOverride = other.categoryOverride; updateAvailable = other.updateAvailable; forceQueryableOverride = other.forceQueryableOverride; @@ -1598,6 +1609,14 @@ public class PackageSetting extends SettingBase implements PackageStateInternal return volumeUuid; } + /** + * @see PackageState#isDefaultToDeviceProtectedStorage() + */ + @DataClass.Generated.Member + public boolean isDefaultToDeviceProtectedStorage() { + return defaultToDeviceProtectedStorage; + } + /** * @see PackageState#getCategoryOverride() */ @@ -1635,10 +1654,10 @@ public class PackageSetting extends SettingBase implements PackageStateInternal } @DataClass.Generated( - time = 1688743336932L, + time = 1691106047978L, codegenVersion = "1.0.23", sourceFile = "frameworks/base/services/core/java/com/android/server/pm/PackageSetting.java", - inputSignatures = "private int mSharedUserAppId\nprivate @android.annotation.Nullable java.util.Map> mimeGroups\nprivate @java.lang.Deprecated @android.annotation.Nullable java.util.Set 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.AndroidPackageInternal pkg\nprivate @android.annotation.NonNull java.io.File mPath\nprivate @android.annotation.NonNull java.lang.String mPathString\nprivate float mLoadingProgress\nprivate long mLoadingCompletedTime\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 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 @android.annotation.Nullable java.lang.String mAppMetadataFilePath\nprivate final @android.annotation.NonNull com.android.server.utils.SnapshotCache mSnapshot\nprivate com.android.server.utils.SnapshotCache makeCache()\npublic com.android.server.pm.PackageSetting snapshot()\npublic void dumpDebug(android.util.proto.ProtoOutputStream,long,java.util.List,com.android.server.pm.permission.LegacyPermissionDataProvider)\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 setInstallerPackage(java.lang.String,int)\npublic com.android.server.pm.PackageSetting setUpdateOwnerPackage(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)\npublic com.android.server.pm.PackageSetting setPkg(com.android.server.pm.pkg.AndroidPackage)\npublic com.android.server.pm.PackageSetting setPkgStateLibraryFiles(java.util.Collection)\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 void setSharedUserAppId(int)\npublic @java.lang.Override int getSharedUserAppId()\npublic @java.lang.Override boolean hasSharedUser()\npublic @java.lang.Override java.lang.String toString()\nprotected void copyMimeGroups(java.util.Map>)\npublic void updateFrom(com.android.server.pm.PackageSetting)\n com.android.server.pm.PackageSetting updateMimeGroups(java.util.Set)\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,boolean)\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,boolean,boolean,java.lang.String,android.util.ArraySet,android.util.ArraySet,int,int,java.lang.String,java.lang.String,long,com.android.server.pm.pkg.ArchiveState)\n void setUserState(int,com.android.server.pm.pkg.PackageUserStateInternal)\n com.android.server.utils.WatchedArraySet getEnabledComponents(int)\n com.android.server.utils.WatchedArraySet getDisabledComponents(int)\n void setEnabledComponents(com.android.server.utils.WatchedArraySet,int)\n void setDisabledComponents(com.android.server.utils.WatchedArraySet,int)\n void setEnabledComponentsCopy(com.android.server.utils.WatchedArraySet,int)\n void setDisabledComponentsCopy(com.android.server.utils.WatchedArraySet,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,com.android.server.pm.permission.LegacyPermissionDataProvider)\nprotected void writeUsersInfoToProto(android.util.proto.ProtoOutputStream,long)\nprivate static void writeArchiveState(android.util.proto.ProtoOutputStream,com.android.server.pm.pkg.ArchiveState)\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 isIncremental()\npublic boolean isLoading()\npublic com.android.server.pm.PackageSetting setLoadingProgress(float)\npublic com.android.server.pm.PackageSetting setLoadingCompletedTime(long)\npublic com.android.server.pm.PackageSetting setAppMetadataFilePath(java.lang.String)\npublic @android.annotation.NonNull @java.lang.Override long getVersionCode()\npublic @android.annotation.Nullable @java.lang.Override java.util.Map> getMimeGroups()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String getPackageName()\npublic @android.annotation.Nullable @java.lang.Override com.android.server.pm.pkg.AndroidPackage getAndroidPackage()\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 getSharedLibraryDependencies()\npublic @android.annotation.NonNull com.android.server.pm.PackageSetting addUsesLibraryInfo(android.content.pm.SharedLibraryInfo)\npublic @android.annotation.NonNull @java.lang.Override java.util.List getUsesLibraryFiles()\npublic @android.annotation.NonNull com.android.server.pm.PackageSetting addUsesLibraryFile(java.lang.String)\npublic @java.lang.Override boolean isHiddenUntilInstalled()\npublic @android.annotation.NonNull @java.lang.Override long[] getLastPackageUsageTime()\npublic @java.lang.Override boolean isUpdatedSystemApp()\npublic @java.lang.Override boolean isApkInUpdatedApex()\npublic @android.annotation.Nullable @java.lang.Override java.lang.String getApexModuleName()\npublic com.android.server.pm.PackageSetting setDomainSetId(java.util.UUID)\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>)\npublic com.android.server.pm.PackageSetting setOldCodePaths(java.util.Set)\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 com.android.server.pm.PackageSetting setApexModuleName(java.lang.String)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageStateUnserialized getTransientState()\npublic @android.annotation.NonNull android.util.SparseArray getUserStates()\npublic com.android.server.pm.PackageSetting addMimeTypes(java.lang.String,java.util.Set)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageUserState getStateForUser(android.os.UserHandle)\npublic @android.annotation.Nullable java.lang.String getPrimaryCpuAbi()\npublic @android.annotation.Nullable java.lang.String getSecondaryCpuAbi()\npublic @android.annotation.Nullable @java.lang.Override java.lang.String getSeInfo()\npublic @android.annotation.Nullable java.lang.String getPrimaryCpuAbiLegacy()\npublic @android.annotation.Nullable java.lang.String getSecondaryCpuAbiLegacy()\npublic @android.content.pm.ApplicationInfo.HiddenApiEnforcementPolicy @java.lang.Override int getHiddenApiEnforcementPolicy()\npublic @java.lang.Override boolean isApex()\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 mSharedUserAppId\nprivate @android.annotation.Nullable java.util.Map> mimeGroups\nprivate @java.lang.Deprecated @android.annotation.Nullable java.util.Set 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.AndroidPackageInternal pkg\nprivate @android.annotation.NonNull java.io.File mPath\nprivate @android.annotation.NonNull java.lang.String mPathString\nprivate float mLoadingProgress\nprivate long mLoadingCompletedTime\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 mUserStates\nprivate @android.annotation.NonNull com.android.server.pm.InstallSource installSource\nprivate @android.annotation.Nullable java.lang.String volumeUuid\nprivate boolean defaultToDeviceProtectedStorage\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 @android.annotation.Nullable java.lang.String mAppMetadataFilePath\nprivate final @android.annotation.NonNull com.android.server.utils.SnapshotCache mSnapshot\nprivate com.android.server.utils.SnapshotCache makeCache()\npublic com.android.server.pm.PackageSetting snapshot()\npublic void dumpDebug(android.util.proto.ProtoOutputStream,long,java.util.List,com.android.server.pm.permission.LegacyPermissionDataProvider)\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 setInstallerPackage(java.lang.String,int)\npublic com.android.server.pm.PackageSetting setUpdateOwnerPackage(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)\npublic com.android.server.pm.PackageSetting setPkg(com.android.server.pm.pkg.AndroidPackage)\npublic com.android.server.pm.PackageSetting setPkgStateLibraryFiles(java.util.Collection)\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 com.android.server.pm.PackageSetting setDefaultToDeviceProtectedStorage(boolean)\npublic @java.lang.Override boolean isExternalStorage()\npublic com.android.server.pm.PackageSetting setUpdateAvailable(boolean)\npublic void setSharedUserAppId(int)\npublic @java.lang.Override int getSharedUserAppId()\npublic @java.lang.Override boolean hasSharedUser()\npublic @java.lang.Override java.lang.String toString()\nprotected void copyMimeGroups(java.util.Map>)\npublic void updateFrom(com.android.server.pm.PackageSetting)\n com.android.server.pm.PackageSetting updateMimeGroups(java.util.Set)\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,boolean)\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,boolean,boolean,java.lang.String,android.util.ArraySet,android.util.ArraySet,int,int,java.lang.String,java.lang.String,long,int,com.android.server.pm.pkg.ArchiveState)\n void setUserState(int,com.android.server.pm.pkg.PackageUserStateInternal)\n com.android.server.utils.WatchedArraySet getEnabledComponents(int)\n com.android.server.utils.WatchedArraySet getDisabledComponents(int)\n void setEnabledComponents(com.android.server.utils.WatchedArraySet,int)\n void setDisabledComponents(com.android.server.utils.WatchedArraySet,int)\n void setEnabledComponentsCopy(com.android.server.utils.WatchedArraySet,int)\n void setDisabledComponentsCopy(com.android.server.utils.WatchedArraySet,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,com.android.server.pm.permission.LegacyPermissionDataProvider)\nprotected void writeUsersInfoToProto(android.util.proto.ProtoOutputStream,long)\nprivate static void writeArchiveState(android.util.proto.ProtoOutputStream,com.android.server.pm.pkg.ArchiveState)\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 isIncremental()\npublic boolean isLoading()\npublic com.android.server.pm.PackageSetting setLoadingProgress(float)\npublic com.android.server.pm.PackageSetting setLoadingCompletedTime(long)\npublic com.android.server.pm.PackageSetting setAppMetadataFilePath(java.lang.String)\npublic @android.annotation.NonNull @java.lang.Override long getVersionCode()\npublic @android.annotation.Nullable @java.lang.Override java.util.Map> getMimeGroups()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String getPackageName()\npublic @android.annotation.Nullable @java.lang.Override com.android.server.pm.pkg.AndroidPackage getAndroidPackage()\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 getSharedLibraryDependencies()\npublic @android.annotation.NonNull com.android.server.pm.PackageSetting addUsesLibraryInfo(android.content.pm.SharedLibraryInfo)\npublic @android.annotation.NonNull @java.lang.Override java.util.List getUsesLibraryFiles()\npublic @android.annotation.NonNull com.android.server.pm.PackageSetting addUsesLibraryFile(java.lang.String)\npublic @java.lang.Override boolean isHiddenUntilInstalled()\npublic @android.annotation.NonNull @java.lang.Override long[] getLastPackageUsageTime()\npublic @java.lang.Override boolean isUpdatedSystemApp()\npublic @java.lang.Override boolean isApkInUpdatedApex()\npublic @android.annotation.Nullable @java.lang.Override java.lang.String getApexModuleName()\npublic com.android.server.pm.PackageSetting setDomainSetId(java.util.UUID)\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>)\npublic com.android.server.pm.PackageSetting setOldCodePaths(java.util.Set)\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 com.android.server.pm.PackageSetting setApexModuleName(java.lang.String)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageStateUnserialized getTransientState()\npublic @android.annotation.NonNull android.util.SparseArray getUserStates()\npublic com.android.server.pm.PackageSetting addMimeTypes(java.lang.String,java.util.Set)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageUserState getStateForUser(android.os.UserHandle)\npublic @android.annotation.Nullable java.lang.String getPrimaryCpuAbi()\npublic @android.annotation.Nullable java.lang.String getSecondaryCpuAbi()\npublic @android.annotation.Nullable @java.lang.Override java.lang.String getSeInfo()\npublic @android.annotation.Nullable java.lang.String getPrimaryCpuAbiLegacy()\npublic @android.annotation.Nullable java.lang.String getSecondaryCpuAbiLegacy()\npublic @android.content.pm.ApplicationInfo.HiddenApiEnforcementPolicy @java.lang.Override int getHiddenApiEnforcementPolicy()\npublic @java.lang.Override boolean isApex()\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/ScanPackageUtils.java b/services/core/java/com/android/server/pm/ScanPackageUtils.java index 1cd44e62e1f5..f4dca3fe064b 100644 --- a/services/core/java/com/android/server/pm/ScanPackageUtils.java +++ b/services/core/java/com/android/server/pm/ScanPackageUtils.java @@ -462,6 +462,8 @@ final class ScanPackageUtils { + " to " + volumeUuid); pkgSetting.setVolumeUuid(volumeUuid); } + pkgSetting.setDefaultToDeviceProtectedStorage( + parsedPackage.isDefaultToDeviceProtectedStorage()); SharedLibraryInfo sdkLibraryInfo = null; if (!TextUtils.isEmpty(parsedPackage.getSdkLibraryName())) { diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index e5ad01f9880e..c6135e0f582e 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -2914,29 +2914,28 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile FileUtils.setPermissions(fstr.getFD(), 0640, SYSTEM_UID, PACKAGE_INFO_GID); StringBuilder sb = new StringBuilder(); - for (final PackageSetting pkg : mPackages.values()) { + for (final PackageSetting ps : mPackages.values()) { // TODO(b/135203078): This doesn't handle multiple users - final String dataPath = pkg.getPkg() == null ? null : - PackageInfoUtils.getDataDir(pkg.getPkg(), UserHandle.USER_SYSTEM) - .getAbsolutePath(); + final String dataPath = PackageInfoUtils.getDataDir(ps, UserHandle.USER_SYSTEM) + .getAbsolutePath(); - if (pkg.getPkg() == null || dataPath == null) { - if (!"android".equals(pkg.getPackageName())) { - Slog.w(TAG, "Skipping " + pkg + " due to missing metadata"); + if (ps.getPkg() == null || dataPath == null) { + if (!"android".equals(ps.getPackageName())) { + Slog.w(TAG, "Skipping " + ps + " due to missing metadata"); } continue; } - if (pkg.getPkg().isApex()) { + if (ps.getPkg().isApex()) { // Don't persist APEX which doesn't have a valid app id and will cause parsing // error in libpackagelistparser continue; } - final boolean isDebug = pkg.getPkg().isDebuggable(); + final boolean isDebug = ps.getPkg().isDebuggable(); final IntArray gids = new IntArray(); for (final int userId : userIds) { gids.addAll(mPermissionDataProvider.getGidsForUid(UserHandle.getUid(userId, - pkg.getAppId()))); + ps.getAppId()))); } // Avoid any application that has a space in its path. @@ -2964,13 +2963,13 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile // system/core/libpackagelistparser // sb.setLength(0); - sb.append(pkg.getPkg().getPackageName()); + sb.append(ps.getPkg().getPackageName()); sb.append(" "); - sb.append(pkg.getPkg().getUid()); + sb.append(ps.getPkg().getUid()); sb.append(isDebug ? " 1 " : " 0 "); sb.append(dataPath); sb.append(" "); - sb.append(pkg.getSeInfo()); + sb.append(ps.getSeInfo()); sb.append(" "); final int gidsSize = gids.size(); if (gids != null && gids.size() > 0) { @@ -2983,19 +2982,19 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile sb.append("none"); } sb.append(" "); - sb.append(pkg.getPkg().isProfileableByShell() ? "1" : "0"); + sb.append(ps.getPkg().isProfileableByShell() ? "1" : "0"); sb.append(" "); - sb.append(pkg.getPkg().getLongVersionCode()); + sb.append(ps.getPkg().getLongVersionCode()); sb.append(" "); - sb.append(pkg.getPkg().isProfileable() ? "1" : "0"); + sb.append(ps.getPkg().isProfileable() ? "1" : "0"); sb.append(" "); - if (pkg.isSystem()) { + if (ps.isSystem()) { sb.append("@system"); - } else if (pkg.isProduct()) { + } else if (ps.isProduct()) { sb.append("@product"); - } else if (pkg.getInstallSource().mInstallerPackageName != null - && !pkg.getInstallSource().mInstallerPackageName.isEmpty()) { - sb.append(pkg.getInstallSource().mInstallerPackageName); + } else if (ps.getInstallSource().mInstallerPackageName != null + && !ps.getInstallSource().mInstallerPackageName.isEmpty()) { + sb.append(ps.getInstallSource().mInstallerPackageName); } else { sb.append("@null"); } @@ -3123,6 +3122,8 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile if (pkg.getVolumeUuid() != null) { serializer.attribute(null, "volumeUuid", pkg.getVolumeUuid()); } + serializer.attributeBoolean(null, "defaultToDeviceProtectedStorage", + pkg.isDefaultToDeviceProtectedStorage()); if (pkg.getCategoryOverride() != ApplicationInfo.CATEGORY_UNDEFINED) { serializer.attributeInt(null, "categoryHint", pkg.getCategoryOverride()); } @@ -3911,6 +3912,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile String installInitiatingPackageName = null; boolean installInitiatorUninstalled = false; String volumeUuid = null; + boolean defaultToDeviceProtectedStorage = false; boolean updateAvailable = false; int categoryHint = ApplicationInfo.CATEGORY_UNDEFINED; int pkgFlags = 0; @@ -3960,6 +3962,8 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile installInitiatorUninstalled = parser.getAttributeBoolean(null, "installInitiatorUninstalled", false); volumeUuid = parser.getAttributeValue(null, "volumeUuid"); + defaultToDeviceProtectedStorage = parser.getAttributeBoolean( + null, "defaultToDeviceProtectedStorage", false); categoryHint = parser.getAttributeInt(null, "categoryHint", ApplicationInfo.CATEGORY_UNDEFINED); appMetadataFilePath = parser.getAttributeValue(null, "appMetadataFilePath"); @@ -4099,6 +4103,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile installInitiatorUninstalled); packageSetting.setInstallSource(installSource) .setVolumeUuid(volumeUuid) + .setDefaultToDeviceProtectedStorage(defaultToDeviceProtectedStorage) .setCategoryOverride(categoryHint) .setLegacyNativeLibraryPath(legacyNativeLibraryPathStr) .setPrimaryCpuAbi(primaryCpuAbiString) @@ -4886,6 +4891,8 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile pw.print("]"); } pw.println(); + File dataDir = PackageInfoUtils.getDataDir(ps, UserHandle.myUserId()); + pw.print(prefix); pw.print(" dataDir="); pw.println(dataDir.getAbsolutePath()); if (pkg != null) { pw.print(prefix); pw.print(" versionName="); pw.println(pkg.getVersionName()); pw.print(prefix); pw.print(" usesNonSdkApi="); pw.println(pkg.isNonSdkApiRequested()); @@ -4917,8 +4924,6 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile pw.append(prefix).append(" queriesIntents=") .println(ps.getPkg().getQueriesIntents()); } - File dataDir = PackageInfoUtils.getDataDir(pkg, UserHandle.myUserId()); - pw.print(prefix); pw.print(" dataDir="); pw.println(dataDir.getAbsolutePath()); pw.print(prefix); pw.print(" supportsScreens=["); boolean first = true; if (pkg.isSmallScreensSupported()) { diff --git a/services/core/java/com/android/server/pm/dex/ArtManagerService.java b/services/core/java/com/android/server/pm/dex/ArtManagerService.java index d88b66b412e7..31856f1630bb 100644 --- a/services/core/java/com/android/server/pm/dex/ArtManagerService.java +++ b/services/core/java/com/android/server/pm/dex/ArtManagerService.java @@ -61,7 +61,7 @@ import com.android.server.pm.PackageManagerServiceCompilerMapping; import com.android.server.pm.PackageManagerServiceUtils; import com.android.server.pm.parsing.PackageInfoUtils; import com.android.server.pm.pkg.AndroidPackage; -import com.android.server.pm.pkg.PackageState; +import com.android.server.pm.pkg.PackageStateInternal; import dalvik.system.DexFile; import dalvik.system.VMRuntime; @@ -542,14 +542,14 @@ public class ArtManagerService extends android.content.pm.dex.IArtManager.Stub { /** * Compile layout resources in a given package. */ - public boolean compileLayouts(@NonNull PackageState packageState, @NonNull AndroidPackage pkg) { + public boolean compileLayouts(@NonNull PackageStateInternal ps, @NonNull AndroidPackage pkg) { try { final String packageName = pkg.getPackageName(); final String apkPath = pkg.getSplits().get(0).getPath(); // TODO(b/143971007): Use a cross-user directory - File dataDir = PackageInfoUtils.getDataDir(pkg, UserHandle.myUserId()); + File dataDir = PackageInfoUtils.getDataDir(ps, UserHandle.myUserId()); final String outDexFile = dataDir.getAbsolutePath() + "/code_cache/compiled_view.dex"; - if (packageState.isPrivileged() || pkg.isUseEmbeddedDex() + if (ps.isPrivileged() || pkg.isUseEmbeddedDex() || pkg.isDefaultToDeviceProtectedStorage()) { // Privileged apps prefer to load trusted code so they don't use compiled views. // If the app is not privileged but prefers code integrity, also avoid compiling diff --git a/services/core/java/com/android/server/pm/dex/ViewCompiler.java b/services/core/java/com/android/server/pm/dex/ViewCompiler.java index 9ce648f12ffe..6405ea5667d3 100644 --- a/services/core/java/com/android/server/pm/dex/ViewCompiler.java +++ b/services/core/java/com/android/server/pm/dex/ViewCompiler.java @@ -23,7 +23,7 @@ import android.util.Log; import com.android.internal.annotations.GuardedBy; import com.android.server.pm.Installer; import com.android.server.pm.parsing.PackageInfoUtils; -import com.android.server.pm.pkg.AndroidPackage; +import com.android.server.pm.pkg.PackageStateInternal; import java.io.File; @@ -37,12 +37,11 @@ public class ViewCompiler { mInstaller = installer; } - public boolean compileLayouts(AndroidPackage pkg) { + public boolean compileLayouts(PackageStateInternal ps, String apkPath) { try { - final String packageName = pkg.getPackageName(); - final String apkPath = pkg.getBaseApkPath(); + final String packageName = ps.getPackageName(); // TODO(b/143971007): Use a cross-user directory - File dataDir = PackageInfoUtils.getDataDir(pkg, UserHandle.myUserId()); + File dataDir = PackageInfoUtils.getDataDir(ps, UserHandle.myUserId()); final String outDexFile = dataDir.getAbsolutePath() + "/code_cache/compiled_view.dex"; Log.i("PackageManager", "Compiling layouts in " + packageName + " (" + apkPath + ") to " + outDexFile); @@ -50,7 +49,7 @@ public class ViewCompiler { try { synchronized (mInstallLock) { return mInstaller.compileLayouts(apkPath, packageName, outDexFile, - pkg.getUid()); + ps.getAppId()); } } finally { Binder.restoreCallingIdentity(callingId); diff --git a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java index d55f85cde5af..94e959968179 100644 --- a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java +++ b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java @@ -1082,18 +1082,18 @@ public class PackageInfoUtils { } @NonNull - public static File getDataDir(AndroidPackage pkg, int userId) { - if ("android".equals(pkg.getPackageName())) { + public static File getDataDir(PackageStateInternal ps, int userId) { + if ("android".equals(ps.getPackageName())) { return Environment.getDataSystemDirectory(); } - if (pkg.isDefaultToDeviceProtectedStorage() + if (ps.isDefaultToDeviceProtectedStorage() && PackageManager.APPLY_DEFAULT_TO_DEVICE_PROTECTED_STORAGE) { - return Environment.getDataUserDePackageDirectory(pkg.getVolumeUuid(), userId, - pkg.getPackageName()); + return Environment.getDataUserDePackageDirectory(ps.getVolumeUuid(), userId, + ps.getPackageName()); } else { - return Environment.getDataUserCePackageDirectory(pkg.getVolumeUuid(), userId, - pkg.getPackageName()); + return Environment.getDataUserCePackageDirectory(ps.getVolumeUuid(), userId, + ps.getPackageName()); } } diff --git a/services/core/java/com/android/server/pm/pkg/PackageState.java b/services/core/java/com/android/server/pm/pkg/PackageState.java index 2c37876dd261..492e0ce0c9e6 100644 --- a/services/core/java/com/android/server/pm/pkg/PackageState.java +++ b/services/core/java/com/android/server/pm/pkg/PackageState.java @@ -349,6 +349,12 @@ public interface PackageState { @Nullable String getVolumeUuid(); + /** + * @see AndroidPackage#isDefaultToDeviceProtectedStorage() + * @hide + */ + boolean isDefaultToDeviceProtectedStorage(); + /** * @see AndroidPackage#isExternalStorage() * @hide diff --git a/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java b/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java index ba274e046b47..40602712030f 100644 --- a/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java +++ b/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java @@ -17,6 +17,7 @@ package com.android.server.pm.pkg; import android.annotation.IntDef; +import android.annotation.LongDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.pm.ApplicationInfo; @@ -57,7 +58,7 @@ public class PackageStateImpl implements PackageState { } private static class Booleans { - @IntDef({ + @LongDef({ SYSTEM, EXTERNAL_STORAGE, PRIVILEGED, @@ -73,30 +74,32 @@ public class PackageStateImpl implements PackageState { UPDATE_AVAILABLE, UPDATED_SYSTEM_APP, APK_IN_UPDATED_APEX, + DEFAULT_TO_DEVICE_PROTECTED_STORAGE, }) public @interface Flags { } - private static final int SYSTEM = 1; - private static final int EXTERNAL_STORAGE = 1 << 1; - private static final int PRIVILEGED = 1 << 2; - private static final int OEM = 1 << 3; - private static final int VENDOR = 1 << 4; - private static final int PRODUCT = 1 << 5; - private static final int SYSTEM_EXT = 1 << 6; - private static final int REQUIRED_FOR_SYSTEM_USER = 1 << 7; - private static final int ODM = 1 << 8; - private static final int FORCE_QUERYABLE_OVERRIDE = 1 << 9; - private static final int HIDDEN_UNTIL_INSTALLED = 1 << 10; - private static final int INSTALL_PERMISSIONS_FIXED = 1 << 11; - private static final int UPDATE_AVAILABLE = 1 << 12; - private static final int UPDATED_SYSTEM_APP = 1 << 13; - private static final int APK_IN_UPDATED_APEX = 1 << 14; + private static final long SYSTEM = 1; + private static final long EXTERNAL_STORAGE = 1 << 1; + private static final long PRIVILEGED = 1 << 2; + private static final long OEM = 1 << 3; + private static final long VENDOR = 1 << 4; + private static final long PRODUCT = 1 << 5; + private static final long SYSTEM_EXT = 1 << 6; + private static final long REQUIRED_FOR_SYSTEM_USER = 1 << 7; + private static final long ODM = 1 << 8; + private static final long FORCE_QUERYABLE_OVERRIDE = 1 << 9; + private static final long HIDDEN_UNTIL_INSTALLED = 1 << 10; + private static final long INSTALL_PERMISSIONS_FIXED = 1 << 11; + private static final long UPDATE_AVAILABLE = 1 << 12; + private static final long UPDATED_SYSTEM_APP = 1 << 13; + private static final long APK_IN_UPDATED_APEX = 1 << 14; + private static final long DEFAULT_TO_DEVICE_PROTECTED_STORAGE = 1L << 15; } - private int mBooleans; + private long mBooleans; - private void setBoolean(@Booleans.Flags int flag, boolean value) { + private void setBoolean(@Booleans.Flags long flag, boolean value) { if (value) { mBooleans |= flag; } else { @@ -104,7 +107,7 @@ public class PackageStateImpl implements PackageState { } } - private boolean getBoolean(@Booleans.Flags int flag) { + private boolean getBoolean(@Booleans.Flags long flag) { return (mBooleans & flag) != 0; } @@ -145,7 +148,7 @@ public class PackageStateImpl implements PackageState { @NonNull private final long[] mUsesStaticLibrariesVersions; @NonNull - private final List mUsesLibraries; + private final List mSharedLibraryDependencies; @NonNull private final List mUsesLibraryFiles; @NonNull @@ -172,6 +175,8 @@ public class PackageStateImpl implements PackageState { mPackageName = pkgState.getPackageName(); mVolumeUuid = pkgState.getVolumeUuid(); + setBoolean(Booleans.DEFAULT_TO_DEVICE_PROTECTED_STORAGE, + pkgState.isDefaultToDeviceProtectedStorage()); mAppId = pkgState.getAppId(); mCategoryOverride = pkgState.getCategoryOverride(); mCpuAbiOverride = pkgState.getCpuAbiOverride(); @@ -190,7 +195,8 @@ public class PackageStateImpl implements PackageState { mUsesSdkLibrariesVersionsMajor = pkgState.getUsesSdkLibrariesVersionsMajor(); mUsesStaticLibraries = pkgState.getUsesStaticLibraries(); mUsesStaticLibrariesVersions = pkgState.getUsesStaticLibrariesVersions(); - mUsesLibraries = Collections.unmodifiableList(pkgState.getSharedLibraryDependencies()); + mSharedLibraryDependencies = + Collections.unmodifiableList(pkgState.getSharedLibraryDependencies()); mUsesLibraryFiles = Collections.unmodifiableList(pkgState.getUsesLibraryFiles()); setBoolean(Booleans.FORCE_QUERYABLE_OVERRIDE, pkgState.isForceQueryableOverride()); setBoolean(Booleans.HIDDEN_UNTIL_INSTALLED, pkgState.isHiddenUntilInstalled()); @@ -309,6 +315,11 @@ public class PackageStateImpl implements PackageState { return getAndroidPackage() != null && getAndroidPackage().isApex(); } + @Override + public boolean isDefaultToDeviceProtectedStorage() { + return getBoolean(Booleans.DEFAULT_TO_DEVICE_PROTECTED_STORAGE); + } + /** * @hide */ @@ -570,7 +581,7 @@ public class PackageStateImpl implements PackageState { } @DataClass.Generated( - time = 1689171425723L, + time = 1691182986740L, codegenVersion = "1.0.23", sourceFile = "frameworks/base/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java", inputSignatures = "private int mBooleans\nprivate final long mCeDataInode\nprivate final @android.annotation.NonNull android.util.ArraySet mDisabledComponents\nprivate final @android.content.pm.PackageManager.DistractionRestriction int mDistractionFlags\nprivate final @android.annotation.NonNull android.util.ArraySet mEnabledComponents\nprivate final int mEnabledState\nprivate final @android.annotation.Nullable java.lang.String mHarmfulAppWarning\nprivate final @android.content.pm.PackageManager.InstallReason int mInstallReason\nprivate final @android.annotation.Nullable java.lang.String mLastDisableAppCaller\nprivate final @android.annotation.NonNull android.content.pm.overlay.OverlayPaths mOverlayPaths\nprivate final @android.annotation.NonNull java.util.Map mSharedLibraryOverlayPaths\nprivate final @android.content.pm.PackageManager.UninstallReason int mUninstallReason\nprivate final @android.annotation.Nullable java.lang.String mSplashScreenTheme\nprivate final @android.content.pm.PackageManager.UserMinAspectRatio int mMinAspectRatio\nprivate final long mFirstInstallTimeMillis\nprivate final @android.annotation.Nullable com.android.server.pm.pkg.ArchiveState mArchiveState\npublic static com.android.server.pm.pkg.PackageUserState copy(com.android.server.pm.pkg.PackageUserState)\nprivate void setBoolean(int,boolean)\nprivate boolean getBoolean(int)\npublic @java.lang.Override boolean isHidden()\npublic @java.lang.Override boolean isInstalled()\npublic @java.lang.Override boolean isInstantApp()\npublic @java.lang.Override boolean isNotLaunched()\npublic @java.lang.Override boolean isStopped()\npublic @java.lang.Override boolean isSuspended()\npublic @java.lang.Override boolean isVirtualPreload()\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()\nclass UserStateImpl extends java.lang.Object implements [com.android.server.pm.pkg.PackageUserState]\nprivate static final int HIDDEN\nprivate static final int INSTALLED\nprivate static final int INSTANT_APP\nprivate static final int NOT_LAUNCHED\nprivate static final int STOPPED\nprivate static final int SUSPENDED\nprivate static final int VIRTUAL_PRELOAD\nclass Booleans extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false)") @@ -599,7 +610,7 @@ public class PackageStateImpl implements PackageState { @DataClass.Generated.Member - public int getBooleans() { + public long getBooleans() { return mBooleans; } @@ -710,7 +721,7 @@ public class PackageStateImpl implements PackageState { @DataClass.Generated.Member public @NonNull List getSharedLibraryDependencies() { - return mUsesLibraries; + return mSharedLibraryDependencies; } @DataClass.Generated.Member @@ -739,16 +750,16 @@ public class PackageStateImpl implements PackageState { } @DataClass.Generated.Member - public @NonNull PackageStateImpl setBooleans( int value) { + public @NonNull PackageStateImpl setBooleans( long value) { mBooleans = value; return this; } @DataClass.Generated( - time = 1689171425753L, + time = 1691182986772L, codegenVersion = "1.0.23", sourceFile = "frameworks/base/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java", - inputSignatures = "private int mBooleans\nprivate final @android.annotation.Nullable com.android.server.pm.pkg.AndroidPackage mAndroidPackage\nprivate final @android.annotation.NonNull java.lang.String mPackageName\nprivate final @android.annotation.Nullable java.lang.String mVolumeUuid\nprivate final int mAppId\nprivate final int mCategoryOverride\nprivate final @android.annotation.Nullable java.lang.String mCpuAbiOverride\nprivate final @android.content.pm.ApplicationInfo.HiddenApiEnforcementPolicy int mHiddenApiEnforcementPolicy\nprivate final long mLastModifiedTime\nprivate final long mLastUpdateTime\nprivate final long mLongVersionCode\nprivate final @android.annotation.NonNull java.util.Map> mMimeGroups\nprivate final @android.annotation.NonNull java.io.File mPath\nprivate final @android.annotation.Nullable java.lang.String mPrimaryCpuAbi\nprivate final @android.annotation.Nullable java.lang.String mSecondaryCpuAbi\nprivate final @android.annotation.Nullable java.lang.String mSeInfo\nprivate final boolean mHasSharedUser\nprivate final int mSharedUserAppId\nprivate final @android.annotation.NonNull java.lang.String[] mUsesSdkLibraries\nprivate final @android.annotation.NonNull long[] mUsesSdkLibrariesVersionsMajor\nprivate final @android.annotation.NonNull java.lang.String[] mUsesStaticLibraries\nprivate final @android.annotation.NonNull long[] mUsesStaticLibrariesVersions\nprivate final @android.annotation.NonNull java.util.List mUsesLibraries\nprivate final @android.annotation.NonNull java.util.List mUsesLibraryFiles\nprivate final @android.annotation.NonNull long[] mLastPackageUsageTime\nprivate final @android.annotation.NonNull android.content.pm.SigningInfo mSigningInfo\nprivate final @android.annotation.NonNull android.util.SparseArray mUserStates\nprivate final @android.annotation.Nullable java.lang.String mApexModuleName\npublic static com.android.server.pm.pkg.PackageState copy(com.android.server.pm.pkg.PackageStateInternal)\nprivate void setBoolean(int,boolean)\nprivate boolean getBoolean(int)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageUserState getStateForUser(android.os.UserHandle)\npublic @java.lang.Override boolean isExternalStorage()\npublic @java.lang.Override boolean isForceQueryableOverride()\npublic @java.lang.Override boolean isHiddenUntilInstalled()\npublic @java.lang.Override boolean isInstallPermissionsFixed()\npublic @java.lang.Override boolean isOdm()\npublic @java.lang.Override boolean isOem()\npublic @java.lang.Override boolean isPrivileged()\npublic @java.lang.Override boolean isProduct()\npublic @java.lang.Override boolean isRequiredForSystemUser()\npublic @java.lang.Override boolean isSystem()\npublic @java.lang.Override boolean isSystemExt()\npublic @java.lang.Override boolean isUpdateAvailable()\npublic @java.lang.Override boolean isUpdatedSystemApp()\npublic @java.lang.Override boolean isApkInUpdatedApex()\npublic @java.lang.Override boolean isVendor()\npublic @java.lang.Override long getVersionCode()\npublic @java.lang.Override boolean hasSharedUser()\npublic @java.lang.Override boolean isApex()\nclass PackageStateImpl extends java.lang.Object implements [com.android.server.pm.pkg.PackageState]\nprivate static final int SYSTEM\nprivate static final int EXTERNAL_STORAGE\nprivate static final int PRIVILEGED\nprivate static final int OEM\nprivate static final int VENDOR\nprivate static final int PRODUCT\nprivate static final int SYSTEM_EXT\nprivate static final int REQUIRED_FOR_SYSTEM_USER\nprivate static final int ODM\nprivate static final int FORCE_QUERYABLE_OVERRIDE\nprivate static final int HIDDEN_UNTIL_INSTALLED\nprivate static final int INSTALL_PERMISSIONS_FIXED\nprivate static final int UPDATE_AVAILABLE\nprivate static final int UPDATED_SYSTEM_APP\nprivate static final int APK_IN_UPDATED_APEX\nclass Booleans extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false)") + inputSignatures = "private long mBooleans\nprivate final @android.annotation.Nullable com.android.server.pm.pkg.AndroidPackage mAndroidPackage\nprivate final @android.annotation.NonNull java.lang.String mPackageName\nprivate final @android.annotation.Nullable java.lang.String mVolumeUuid\nprivate final int mAppId\nprivate final int mCategoryOverride\nprivate final @android.annotation.Nullable java.lang.String mCpuAbiOverride\nprivate final @android.content.pm.ApplicationInfo.HiddenApiEnforcementPolicy int mHiddenApiEnforcementPolicy\nprivate final long mLastModifiedTime\nprivate final long mLastUpdateTime\nprivate final long mLongVersionCode\nprivate final @android.annotation.NonNull java.util.Map> mMimeGroups\nprivate final @android.annotation.NonNull java.io.File mPath\nprivate final @android.annotation.Nullable java.lang.String mPrimaryCpuAbi\nprivate final @android.annotation.Nullable java.lang.String mSecondaryCpuAbi\nprivate final @android.annotation.Nullable java.lang.String mSeInfo\nprivate final boolean mHasSharedUser\nprivate final int mSharedUserAppId\nprivate final @android.annotation.NonNull java.lang.String[] mUsesSdkLibraries\nprivate final @android.annotation.NonNull long[] mUsesSdkLibrariesVersionsMajor\nprivate final @android.annotation.NonNull java.lang.String[] mUsesStaticLibraries\nprivate final @android.annotation.NonNull long[] mUsesStaticLibrariesVersions\nprivate final @android.annotation.NonNull java.util.List mSharedLibraryDependencies\nprivate final @android.annotation.NonNull java.util.List mUsesLibraryFiles\nprivate final @android.annotation.NonNull long[] mLastPackageUsageTime\nprivate final @android.annotation.NonNull android.content.pm.SigningInfo mSigningInfo\nprivate final @android.annotation.NonNull android.util.SparseArray mUserStates\nprivate final @android.annotation.Nullable java.lang.String mApexModuleName\npublic static com.android.server.pm.pkg.PackageState copy(com.android.server.pm.pkg.PackageStateInternal)\nprivate void setBoolean(long,boolean)\nprivate boolean getBoolean(long)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageUserState getStateForUser(android.os.UserHandle)\npublic @java.lang.Override boolean isExternalStorage()\npublic @java.lang.Override boolean isForceQueryableOverride()\npublic @java.lang.Override boolean isHiddenUntilInstalled()\npublic @java.lang.Override boolean isInstallPermissionsFixed()\npublic @java.lang.Override boolean isOdm()\npublic @java.lang.Override boolean isOem()\npublic @java.lang.Override boolean isPrivileged()\npublic @java.lang.Override boolean isProduct()\npublic @java.lang.Override boolean isRequiredForSystemUser()\npublic @java.lang.Override boolean isSystem()\npublic @java.lang.Override boolean isSystemExt()\npublic @java.lang.Override boolean isUpdateAvailable()\npublic @java.lang.Override boolean isUpdatedSystemApp()\npublic @java.lang.Override boolean isApkInUpdatedApex()\npublic @java.lang.Override boolean isVendor()\npublic @java.lang.Override long getVersionCode()\npublic @java.lang.Override boolean hasSharedUser()\npublic @java.lang.Override boolean isApex()\npublic @java.lang.Override boolean isDefaultToDeviceProtectedStorage()\nclass PackageStateImpl extends java.lang.Object implements [com.android.server.pm.pkg.PackageState]\nprivate static final long SYSTEM\nprivate static final long EXTERNAL_STORAGE\nprivate static final long PRIVILEGED\nprivate static final long OEM\nprivate static final long VENDOR\nprivate static final long PRODUCT\nprivate static final long SYSTEM_EXT\nprivate static final long REQUIRED_FOR_SYSTEM_USER\nprivate static final long ODM\nprivate static final long FORCE_QUERYABLE_OVERRIDE\nprivate static final long HIDDEN_UNTIL_INSTALLED\nprivate static final long INSTALL_PERMISSIONS_FIXED\nprivate static final long UPDATE_AVAILABLE\nprivate static final long UPDATED_SYSTEM_APP\nprivate static final long APK_IN_UPDATED_APEX\nprivate static final long DEFAULT_TO_DEVICE_PROTECTED_STORAGE\nclass Booleans extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false)") @Deprecated private void __metadata() {} -- GitLab