summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2018-12-21 13:59:58 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-12-21 13:59:58 +0000
commit7f1c1398e1658ec4fd137696d4985bf3a75f748b (patch)
tree1f5fb47acbe14ee55d8739c7c8756730f9dbb3bb
parenta1c142a87d271b182678ff08c91d0c92281651e8 (diff)
parent8a8ec5a576d00e42feb05277b4a4366a7d7b3f59 (diff)
Merge "Fixes incorrect delete on app update"
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java41
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 {