summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Song Chun Fan <schfan@google.com> 2024-02-09 21:04:00 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-02-09 21:04:00 +0000
commitc695aa4be887a02e915283b8645e8a276e2c7937 (patch)
treef6edbe256cb67c06c920e6dfe129cda531268d70
parent9a9bb3808e5f14df1f23ec6495f3b848393afcdb (diff)
parent7a05562225c7a7117b0d903684953160162431e0 (diff)
Merge "[pm] do not delete data dir for uninstalls with -k" into main
-rw-r--r--services/core/java/com/android/server/pm/AppDataHelper.java7
1 files changed, 5 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/pm/AppDataHelper.java b/services/core/java/com/android/server/pm/AppDataHelper.java
index 79d17534ab26..1dd790502486 100644
--- a/services/core/java/com/android/server/pm/AppDataHelper.java
+++ b/services/core/java/com/android/server/pm/AppDataHelper.java
@@ -50,6 +50,7 @@ import com.android.server.pm.dex.ArtManagerService;
import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageStateInternal;
+import com.android.server.pm.pkg.PackageUserStateInternal;
import com.android.server.pm.pkg.SELinuxUtil;
import dalvik.system.VMRuntime;
@@ -502,6 +503,7 @@ public class AppDataHelper {
private void assertPackageStorageValid(@NonNull Computer snapshot, String volumeUuid,
String packageName, int userId) throws PackageManagerException {
final PackageStateInternal packageState = snapshot.getPackageStateInternal(packageName);
+ final PackageUserStateInternal userState = packageState.getUserStateOrDefault(userId);
if (packageState == null) {
throw PackageManagerException.ofInternalError("Package " + packageName + " is unknown",
PackageManagerException.INTERNAL_ERROR_STORAGE_INVALID_PACKAGE_UNKNOWN);
@@ -510,9 +512,10 @@ public class AppDataHelper {
"Package " + packageName + " found on unknown volume " + volumeUuid
+ "; expected volume " + packageState.getVolumeUuid(),
PackageManagerException.INTERNAL_ERROR_STORAGE_INVALID_VOLUME_UNKNOWN);
- } else if (!packageState.getUserStateOrDefault(userId).isInstalled()) {
+ } else if (!userState.isInstalled() && !userState.dataExists()) {
throw PackageManagerException.ofInternalError(
- "Package " + packageName + " not installed for user " + userId,
+ "Package " + packageName + " not installed for user " + userId
+ + " or was deleted without DELETE_KEEP_DATA",
PackageManagerException.INTERNAL_ERROR_STORAGE_INVALID_NOT_INSTALLED_FOR_USER);
} else if (packageState.getPkg() != null
&& !shouldHaveAppStorage(packageState.getPkg())) {