diff options
| author | 2024-02-09 21:04:00 +0000 | |
|---|---|---|
| committer | 2024-02-09 21:04:00 +0000 | |
| commit | c695aa4be887a02e915283b8645e8a276e2c7937 (patch) | |
| tree | f6edbe256cb67c06c920e6dfe129cda531268d70 | |
| parent | 9a9bb3808e5f14df1f23ec6495f3b848393afcdb (diff) | |
| parent | 7a05562225c7a7117b0d903684953160162431e0 (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.java | 7 |
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())) { |