diff options
| author | 2018-12-21 13:59:58 +0000 | |
|---|---|---|
| committer | 2018-12-21 13:59:58 +0000 | |
| commit | 7f1c1398e1658ec4fd137696d4985bf3a75f748b (patch) | |
| tree | 1f5fb47acbe14ee55d8739c7c8756730f9dbb3bb | |
| parent | a1c142a87d271b182678ff08c91d0c92281651e8 (diff) | |
| parent | 8a8ec5a576d00e42feb05277b4a4366a7d7b3f59 (diff) | |
Merge "Fixes incorrect delete on app update"
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 41 |
1 files changed, 12 insertions, 29 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 90cf94c3ec86..3b7941c7ce5b 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -325,7 +325,6 @@ import dalvik.system.VMRuntime; import libcore.io.IoUtils; import libcore.util.EmptyArray; -import libcore.util.HexEncoding; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -17856,21 +17855,14 @@ public class PackageManagerService extends IPackageManager.Stub public final PackageRemovedInfo outInfo; public final int flags; public final UserHandle user; - /** - * True if this package is an unupdated system app that may be deleted by the system. - * When true, disabledPs will be null. - */ - public final boolean mayDeleteUnupdatedSystemApp; private DeletePackageAction(PackageSetting deletingPs, PackageSetting disabledPs, - PackageRemovedInfo outInfo, int flags, UserHandle user, - boolean mayDeleteUnupdatedSystemApp) { + PackageRemovedInfo outInfo, int flags, UserHandle user) { this.deletingPs = deletingPs; this.disabledPs = disabledPs; this.outInfo = outInfo; this.flags = flags; this.user = user; - this.mayDeleteUnupdatedSystemApp = mayDeleteUnupdatedSystemApp; } } @@ -17886,24 +17878,22 @@ public class PackageManagerService extends IPackageManager.Stub if (ps == null) { return null; } - boolean mayDeleteUnupdatedSystemApp = false; if (isSystemApp(ps)) { if (ps.parentPackageName != null) { Slog.w(TAG, "Attempt to delete child system package " + ps.pkg.packageName); return null; } - if (((flags & PackageManager.DELETE_SYSTEM_APP) != 0) && user != null - && user.getIdentifier() != UserHandle.USER_ALL) { - mayDeleteUnupdatedSystemApp = true; - } else if (disabledPs == null) { - // Confirmed if the system package has been updated - // An updated system app can be deleted. This will also have to restore - // the system pkg from system partition - // reader + final boolean deleteSystem = (flags & PackageManager.DELETE_SYSTEM_APP) != 0; + final boolean deleteAllUsers = + user == null || user.getIdentifier() == UserHandle.USER_ALL; + if ((!deleteSystem || deleteAllUsers) && disabledPs == null) { Slog.w(TAG, "Attempt to delete unknown system package " + ps.pkg.packageName); return null; } + // Confirmed if the system package has been updated + // An updated system app can be deleted. This will also have to restore + // the system pkg from system partition reader } final int parentReferenceCount = (ps.childPackageNames != null) ? ps.childPackageNames.size() : 0; @@ -17918,8 +17908,7 @@ public class PackageManagerService extends IPackageManager.Stub } } } - return new DeletePackageAction(ps, disabledPs, outInfo, flags, user, - mayDeleteUnupdatedSystemApp); + return new DeletePackageAction(ps, disabledPs, outInfo, flags, user); } /* @@ -17993,8 +17982,8 @@ public class PackageManagerService extends IPackageManager.Stub if (ps.getPermissionsState().hasPermission(Manifest.permission.SUSPEND_APPS, userId)) { unsuspendForSuspendingPackage(packageName, userId); } - - if (!systemApp || action.mayDeleteUnupdatedSystemApp) { + if ((!systemApp || (flags & PackageManager.DELETE_SYSTEM_APP) != 0) + && userId != UserHandle.USER_ALL) { // The caller is asking that the package only be deleted for a single // user. To do this, we just mark its uninstalled state and delete // its data. If this is a system app, we only allow this to happen if @@ -18017,13 +18006,7 @@ public class PackageManagerService extends IPackageManager.Stub // We need to set it back to 'installed' so the uninstall // broadcasts will be sent correctly. if (DEBUG_REMOVE) Slog.d(TAG, "Not installed by other users, full delete"); - if (userId != UserHandle.USER_ALL) { - ps.setInstalled(true, userId); - } else { - for (int origUserId : outInfo.origUsers) { - ps.setInstalled(true, origUserId); - } - } + ps.setInstalled(true, userId); mSettings.writeKernelMappingLPr(ps); } } else { |