diff options
author | Suchi Amalapurapu <asuchitra@google.com> | 2009-07-13 10:36:15 -0700 |
---|---|---|
committer | Suchi Amalapurapu <asuchitra@google.com> | 2009-07-13 10:57:50 -0700 |
commit | ea5c044412f6853d686e93b8bef07f4729b6ad26 (patch) | |
tree | e3f2353a4290f3527dac88176d97f31833d2fa27 /services/java/com/android/server/PackageManagerService.java | |
parent | c4ca420625183a8efa619e06287b47f3d2e72283 (diff) | |
download | frameworks_base-ea5c044412f6853d686e93b8bef07f4729b6ad26.zip frameworks_base-ea5c044412f6853d686e93b8bef07f4729b6ad26.tar.gz frameworks_base-ea5c044412f6853d686e93b8bef07f4729b6ad26.tar.bz2 |
When apps switch between system and data partition the code and
resource paths should also be updated based on which version
is being picked up. update the code and resource paths when a path change
is detected
Diffstat (limited to 'services/java/com/android/server/PackageManagerService.java')
-rw-r--r-- | services/java/com/android/server/PackageManagerService.java | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index 0d190ca..b85cf2c 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -60,6 +60,7 @@ import android.net.Uri; import android.os.Binder; import android.os.Build; import android.os.Bundle; +import android.os.Debug; import android.os.HandlerThread; import android.os.Parcel; import android.os.RemoteException; @@ -2046,8 +2047,9 @@ class PackageManagerService extends IPackageManager.Stub { + suid.userId + "): packages=" + suid.packages); } } - - // Just create the setting, don't add it yet + + // Just create the setting, don't add it yet. For already existing packages + // the PkgSetting exists already and doesn't have to be created. pkgSetting = mSettings.getPackageLP(pkg, suid, destCodeFile, destResourceFile, pkg.applicationInfo.flags, true, false); if (pkgSetting == null) { @@ -2272,7 +2274,7 @@ class PackageManagerService extends IPackageManager.Stub { // Add the new setting to mSettings mSettings.insertPackageSettingLP(pkgSetting, pkg.packageName, suid); // Add the new setting to mPackages - mPackages.put(pkg.applicationInfo.packageName, pkg); + mPackages.put(pkg.applicationInfo.packageName, pkg); int N = pkg.providers.size(); StringBuilder r = null; int i; @@ -5422,10 +5424,10 @@ class PackageManagerService extends IPackageManager.Stub { */ static class PackageSettingBase extends GrantedPermissions { final String name; - final File codePath; - final String codePathString; - final File resourcePath; - final String resourcePathString; + File codePath; + String codePathString; + File resourcePath; + String resourcePathString; private long timeStamp; private String timeStampString = "0"; final int versionCode; @@ -5823,11 +5825,16 @@ class PackageManagerService extends IPackageManager.Stub { // and data partition. Just let the most recent version // take precedence. return p; - } else if ((p.pkg != null) && (p.pkg.applicationInfo != null)) { + } else { // Let the app continue with previous uid if code path changes. reportSettingsProblem(Log.WARN, "Package " + name + " codePath changed from " + p.codePath - + " to " + codePath + "; Retaining data and using new code"); + + " to " + codePath + "; Retaining data and using new code from " + + codePath); + p.codePath = codePath; + p.resourcePath = resourcePath; + p.codePathString = codePath.toString(); + p.resourcePathString = resourcePath.toString(); } } else if (p.sharedUser != sharedUser) { reportSettingsProblem(Log.WARN, @@ -5851,6 +5858,7 @@ class PackageManagerService extends IPackageManager.Stub { if (sharedUser != null) { p.userId = sharedUser.userId; } else if (MULTIPLE_APPLICATION_UIDS) { + // Assign new user id p.userId = newUserIdLP(p); } else { p.userId = FIRST_APPLICATION_UID; |