Fix 2672155
Check the code path when enabling disabling packages.
Add unit test
Change-Id: I0f0f482a3735234eab3f63ba1f6462574b70144e
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index b9204c7..ee725cc 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -5315,13 +5315,13 @@
}
SdInstallArgs(String cid) {
- super(null, null, PackageManager.INSTALL_EXTERNAL, null);
- this.cid = cid;
+ this((Uri)null, cid);
}
SdInstallArgs(Uri packageURI, String cid) {
super(packageURI, null, PackageManager.INSTALL_EXTERNAL, null);
this.cid = cid;
+ cachePath = PackageHelper.getSdDir(cid);
}
void createCopyFile() {
@@ -9565,7 +9565,10 @@
}
if (DEBUG_SD_INSTALL) Log.i(TAG, "Looking for pkg : " + pkgName);
PackageSetting ps = mSettings.mPackages.get(pkgName);
- if (ps != null && ps.codePathString != null) {
+ // The package status is changed only if the code path
+ // matches between settings and the container id.
+ if (ps != null && ps.codePathString != null &&
+ ps.codePathString.equals(args.getCodePath())) {
if (DEBUG_SD_INSTALL) Log.i(TAG, "Container : " + cid +
" corresponds to pkg : " + pkgName +
" at code path: " + ps.codePathString);