summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server/PackageManagerService.java
diff options
context:
space:
mode:
authorSuchi Amalapurapu <asuchitra@google.com>2009-07-13 10:36:15 -0700
committerSuchi Amalapurapu <asuchitra@google.com>2009-07-13 10:57:50 -0700
commitea5c044412f6853d686e93b8bef07f4729b6ad26 (patch)
treee3f2353a4290f3527dac88176d97f31833d2fa27 /services/java/com/android/server/PackageManagerService.java
parentc4ca420625183a8efa619e06287b47f3d2e72283 (diff)
downloadframeworks_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.java26
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;