Mount/Unmount secure containers
Persist flags in PackageSetting. Flags are relevant to ApplicationInfo.FLAG_SYSTEM, Application.FLAG_ON_SDCARD, ApplicationInfo.FLAG_FORWARD_LOCK.
New pm command to simulate mount/unmount in Pm. This will be removed
when MountService/vold event generation gets fixed.
Calls from MountService into PackageManager when media gets mounted/unmounted.
Scan the packages and grant permissions when the sdcard gets mounted.
This api might change again.
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java
index f8f8742..0d9f98f 100644
--- a/services/java/com/android/server/MountService.java
+++ b/services/java/com/android/server/MountService.java
@@ -28,6 +28,7 @@
 import android.net.Uri;
 import android.os.IMountService;
 import android.os.Environment;
+import android.os.ServiceManager;
 import android.os.SystemProperties;
 import android.os.UEventObserver;
 import android.os.Handler;
@@ -131,6 +132,8 @@
 
     private String  mLegacyState = Environment.MEDIA_REMOVED;
 
+    private PackageManagerService mPms;
+
     /**
      * Constructs a new MountService instance
      * 
@@ -139,6 +142,7 @@
     public MountService(Context context) {
         mContext = context;
 
+        mPms = (PackageManagerService) ServiceManager.getService("package");
         // Register a BOOT_COMPLETED handler so that we can start
         // our NativeDaemonConnector. We defer the startup so that we don't
         // start processing events before we ought-to
@@ -509,6 +513,8 @@
     void handlePossibleExplicitUnmountBroadcast(String path) {
         if (mMounted) {
             mMounted = false;
+            // Update media status on PackageManagerService to unmount packages on sdcard
+            mPms.updateExternalMediaStatus(false);
             Intent intent = new Intent(Intent.ACTION_MEDIA_UNMOUNTED, 
                     Uri.parse("file://" + path));
             mContext.sendBroadcast(intent);
@@ -739,6 +745,8 @@
 
         updatePublicVolumeState(path, Environment.MEDIA_UNMOUNTED);
 
+        // Update media status on PackageManagerService to unmount packages on sdcard
+        mPms.updateExternalMediaStatus(false);
         if (mShowSafeUnmountNotificationWhenUnmounted) {
             setMediaStorageNotification(
                     com.android.internal.R.string.ext_media_safe_unmount_notification_title,
@@ -800,6 +808,8 @@
     void notifyMediaMounted(String path, boolean readOnly) {
         updatePublicVolumeState(path, Environment.MEDIA_MOUNTED);
 
+        // Update media status on PackageManagerService to mount packages on sdcard
+        mPms.updateExternalMediaStatus(true);
         setMediaStorageNotification(0, 0, 0, false, false, null);
         updateUsbMassStorageNotification(false, false);
         Intent intent = new Intent(Intent.ACTION_MEDIA_MOUNTED,