summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2011-01-14 13:05:53 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2011-01-14 13:05:53 -0800
commitb220d62bf3032c5c8b2a36a00cd6e6d6b63c7db5 (patch)
tree918f11ed24056d73685afb5ff34eadf473ce7e39 /services
parentfae55508d04344a97830bbf38ca02214642f7b7e (diff)
parentea6bf3628140283df24f2652b686d083b0d31ed9 (diff)
downloadframeworks_base-b220d62bf3032c5c8b2a36a00cd6e6d6b63c7db5.zip
frameworks_base-b220d62bf3032c5c8b2a36a00cd6e6d6b63c7db5.tar.gz
frameworks_base-b220d62bf3032c5c8b2a36a00cd6e6d6b63c7db5.tar.bz2
am ea6bf362: Deep clone settings for system package update DO NOT MERGE
* commit 'ea6bf3628140283df24f2652b686d083b0d31ed9': Deep clone settings for system package update DO NOT MERGE
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/PackageManagerService.java82
1 files changed, 70 insertions, 12 deletions
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index d00c043..39c7540 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -7408,6 +7408,12 @@ class PackageManagerService extends IPackageManager.Stub {
static class PackageSignatures {
private Signature[] mSignatures;
+ PackageSignatures(PackageSignatures orig) {
+ if (orig != null && orig.mSignatures != null) {
+ mSignatures = orig.mSignatures.clone();
+ }
+ }
+
PackageSignatures(Signature[] sigs) {
assignSignatures(sigs);
}
@@ -7743,6 +7749,15 @@ class PackageManagerService extends IPackageManager.Stub {
setFlags(pkgFlags);
}
+ GrantedPermissions(GrantedPermissions base) {
+ pkgFlags = base.pkgFlags;
+ grantedPermissions = (HashSet<String>) base.grantedPermissions.clone();
+
+ if (base.gids != null) {
+ gids = base.gids.clone();
+ }
+ }
+
void setFlags(int pkgFlags) {
this.pkgFlags = pkgFlags & (
ApplicationInfo.FLAG_SYSTEM |
@@ -7770,7 +7785,7 @@ class PackageManagerService extends IPackageManager.Stub {
int versionCode;
boolean uidError;
-
+
PackageSignatures signatures = new PackageSignatures();
boolean permissionsFixed;
@@ -7796,6 +7811,48 @@ class PackageManagerService extends IPackageManager.Stub {
init(codePath, resourcePath, nativeLibraryPathString, pVersionCode);
}
+ /**
+ * New instance of PackageSetting with one-level-deep cloning.
+ */
+ PackageSettingBase(PackageSettingBase base) {
+ super(base);
+
+ name = base.name;
+ realName = base.realName;
+ codePath = base.codePath;
+ codePathString = base.codePathString;
+ resourcePath = base.resourcePath;
+ resourcePathString = base.resourcePathString;
+ nativeLibraryPathString = base.nativeLibraryPathString;
+
+ if (base.obbPathStrings != null) {
+ obbPathStrings = base.obbPathStrings.clone();
+ }
+
+ timeStamp = base.timeStamp;
+ firstInstallTime = base.firstInstallTime;
+ lastUpdateTime = base.lastUpdateTime;
+ versionCode = base.versionCode;
+
+ uidError = base.uidError;
+
+ signatures = new PackageSignatures(base.signatures);
+
+ permissionsFixed = base.permissionsFixed;
+ haveGids = base.haveGids;
+
+ disabledComponents = (HashSet<String>) base.disabledComponents.clone();
+
+ enabledComponents = (HashSet<String>) base.enabledComponents.clone();
+
+ enabled = base.enabled;
+ installStatus = base.installStatus;
+
+ origPackage = base.origPackage;
+
+ installerPackageName = base.installerPackageName;
+ }
+
void init(File codePath, File resourcePath, String nativeLibraryPathString,
int pVersionCode) {
this.codePath = codePath;
@@ -7826,6 +7883,9 @@ class PackageManagerService extends IPackageManager.Stub {
timeStamp = newStamp;
}
+ /**
+ * Make a shallow copy of this package settings.
+ */
public void copyFrom(PackageSettingBase base) {
grantedPermissions = base.grantedPermissions;
gids = base.gids;
@@ -7885,18 +7945,16 @@ class PackageManagerService extends IPackageManager.Stub {
pkgFlags);
}
+ /**
+ * New instance of PackageSetting replicating the original settings.
+ * Note that it keeps the same PackageParser.Package instance.
+ */
PackageSetting(PackageSetting orig) {
- super(orig.name, orig.realName, orig.codePath, orig.resourcePath,
- orig.nativeLibraryPathString, orig.versionCode, orig.pkgFlags);
- copyFrom(orig);
- }
-
- public void copyFrom(PackageSetting base) {
- super.copyFrom((PackageSettingBase) base);
+ super(orig);
- userId = base.userId;
- sharedUser = base.sharedUser;
- pkg = base.pkg;
+ userId = orig.userId;
+ pkg = orig.pkg;
+ sharedUser = orig.sharedUser;
}
@Override
@@ -8128,7 +8186,7 @@ class PackageManagerService extends IPackageManager.Stub {
// a little trick... when we install the new package, we don't
// want to modify the existing PackageSetting for the built-in
// version. so at this point we need a new PackageSetting that
- // is okay to much with.
+ // is okay to muck with.
PackageSetting newp = new PackageSetting(p);
replacePackageLP(name, newp);
return true;