diff options
author | Kenny Root <kroot@google.com> | 2012-05-16 18:59:04 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-05-16 18:59:04 -0700 |
commit | 11e123f7684378578242f5824e14ddba2f68d9ca (patch) | |
tree | 1f8707c6fced4aa3f90fd9ee007db6cfa3cad1fd /services | |
parent | e54c5f13652166c5896ccfa55f047301a6c8b876 (diff) | |
parent | 87b5d7b26e279be7c7a1b4333babcb2ee895ca01 (diff) | |
download | frameworks_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.java | 32 |
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; |