summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2012-05-16 18:59:04 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-05-16 18:59:04 -0700
commit11e123f7684378578242f5824e14ddba2f68d9ca (patch)
tree1f8707c6fced4aa3f90fd9ee007db6cfa3cad1fd /services
parente54c5f13652166c5896ccfa55f047301a6c8b876 (diff)
parent87b5d7b26e279be7c7a1b4333babcb2ee895ca01 (diff)
downloadframeworks_base-11e123f7684378578242f5824e14ddba2f68d9ca.zip
frameworks_base-11e123f7684378578242f5824e14ddba2f68d9ca.tar.gz
frameworks_base-11e123f7684378578242f5824e14ddba2f68d9ca.tar.bz2
Merge "Check system app before removal" into jb-dev
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/pm/PackageManagerService.java32
1 files changed, 25 insertions, 7 deletions
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index 497ee4b..3936c18 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -1064,7 +1064,7 @@ public class PackageManagerService extends IPackageManager.Stub {
mInstaller.moveFiles();
// Prune any system packages that no longer exist.
- final List<String> possiblyDeletedSystemApps = new ArrayList<String>();
+ final List<String> possiblyDeletedUpdatedSystemApps = new ArrayList<String>();
if (!mOnlyCore) {
Iterator<PackageSetting> psit = mSettings.mPackages.values().iterator();
while (psit.hasNext()) {
@@ -1104,7 +1104,10 @@ public class PackageManagerService extends IPackageManager.Stub {
mInstaller.remove(ps.name, 0);
sUserManager.removePackageForAllUsers(ps.name);
} else {
- possiblyDeletedSystemApps.add(ps.name);
+ final PackageSetting disabledPs = mSettings.getDisabledSystemPkgLPr(ps.name);
+ if (disabledPs.codePath == null || !disabledPs.codePath.exists()) {
+ possiblyDeletedUpdatedSystemApps.add(ps.name);
+ }
}
}
}
@@ -1135,18 +1138,33 @@ public class PackageManagerService extends IPackageManager.Stub {
scanMode, 0);
/**
- * Remove disable package settings for any system apps
- * that were removed via an OTA.
+ * Remove disable package settings for any updated system
+ * apps that were removed via an OTA. If they're not a
+ * previously-updated app, remove them completely.
+ * Otherwise, just revoke their system-level permissions.
*/
- for (String deletedAppName : possiblyDeletedSystemApps) {
+ for (String deletedAppName : possiblyDeletedUpdatedSystemApps) {
PackageParser.Package deletedPkg = mPackages.get(deletedAppName);
- if (deletedPkg != null) {
- mSettings.removeDisabledSystemPackageLPw(deletedAppName);
+ mSettings.removeDisabledSystemPackageLPw(deletedAppName);
+
+ String msg;
+ if (deletedPkg == null) {
+ msg = "Updated system package " + deletedAppName
+ + " no longer exists; wiping its data";
+
+ mInstaller.remove(deletedAppName, 0);
+ sUserManager.removePackageForAllUsers(deletedAppName);
+ } else {
+ msg = "Updated system app + " + deletedAppName
+ + " no longer present; removing system privileges for "
+ + deletedAppName;
+
deletedPkg.applicationInfo.flags &= ~ApplicationInfo.FLAG_SYSTEM;
PackageSetting deletedPs = mSettings.mPackages.get(deletedAppName);
deletedPs.pkgFlags &= ~ApplicationInfo.FLAG_SYSTEM;
}
+ reportSettingsProblem(Log.WARN, msg);
}
} else {
mAppInstallObserver = null;