Grant permissions to apps on sd when enabling/disabling packages.
Change-Id: I0f011bd4a3348ccd46fd7ae9765edf8933b94142
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index 05558d4..677ff4a 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -9552,6 +9552,8 @@
// Scan the package
if (scanPackageLI(pkg, parseFlags, SCAN_MONITOR) != null) {
synchronized (mPackages) {
+ updatePermissionsLP(pkg.packageName, pkg,
+ pkg.permissions.size() > 0, false);
retCode = PackageManager.INSTALL_SUCCEEDED;
pkgList.add(pkg.packageName);
// Post process args
diff --git a/tests/AndroidTests/src/com/android/unit_tests/PackageManagerTests.java b/tests/AndroidTests/src/com/android/unit_tests/PackageManagerTests.java
index b581192..dd7a169 100755
--- a/tests/AndroidTests/src/com/android/unit_tests/PackageManagerTests.java
+++ b/tests/AndroidTests/src/com/android/unit_tests/PackageManagerTests.java
@@ -2156,6 +2156,33 @@
}
}
+ /*
+ * Ensure that permissions are properly declared.
+ */
+ public void testInstallOnSdPermissionsUnmount() {
+ InstallParams ip = null;
+ boolean origMediaState = getMediaState();
+ try {
+ // **: Upon installing a package, are its declared permissions published?
+ int iFlags = PackageManager.INSTALL_INTERNAL;
+ int iApk = R.raw.install_decl_perm;
+ ip = installFromRawResource("install.apk", iApk,
+ iFlags, false,
+ false, -1, PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY);
+ assertInstall(ip.pkg, iFlags, ip.pkg.installLocation);
+ assertPermissions(BASE_PERMISSIONS_DEFINED);
+ // Unmount media here
+ assertTrue(unmountMedia());
+ // Mount media again
+ mountMedia();
+ //Check permissions now
+ assertPermissions(BASE_PERMISSIONS_DEFINED);
+ } finally {
+ if (ip != null) {
+ cleanUpInstall(ip);
+ }
+ }
+ }
/*---------- Recommended install location tests ----*/
/*
* TODO's