diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index 05558d4b266b4..677ff4a57e019 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -9552,6 +9552,8 @@ class PackageManagerService extends IPackageManager.Stub { // 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 b581192f9915c..dd7a16951de4c 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 @@ public class PackageManagerTests extends AndroidTestCase { } } + /* + * 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