OSDN Git Service

More useful extras in disk/volume broadcasts.
authorJeff Sharkey <jsharkey@android.com>
Fri, 12 Jun 2015 23:16:56 +0000 (16:16 -0700)
committerJeff Sharkey <jsharkey@android.com>
Fri, 12 Jun 2015 23:16:56 +0000 (16:16 -0700)
Change-Id: I594166cff332aaf72b2b6357ac6ed3e6e42cbc49

core/java/android/os/storage/DiskInfo.java
core/java/android/os/storage/VolumeInfo.java
services/core/java/com/android/server/MountService.java

index 5bc45d5..397d87e 100644 (file)
@@ -40,6 +40,8 @@ public class DiskInfo implements Parcelable {
             "android.os.storage.action.DISK_SCANNED";
     public static final String EXTRA_DISK_ID =
             "android.os.storage.extra.DISK_ID";
+    public static final String EXTRA_VOLUME_COUNT =
+            "android.os.storage.extra.VOLUME_COUNT";
 
     public static final int FLAG_ADOPTABLE = 1 << 0;
     public static final int FLAG_DEFAULT_PRIMARY = 1 << 1;
index 372725f..8d11527 100644 (file)
@@ -55,6 +55,8 @@ public class VolumeInfo implements Parcelable {
             "android.os.storage.action.VOLUME_STATE_CHANGED";
     public static final String EXTRA_VOLUME_ID =
             "android.os.storage.extra.VOLUME_ID";
+    public static final String EXTRA_VOLUME_STATE =
+            "android.os.storage.extra.VOLUME_STATE";
 
     /** Stub volume representing internal private storage */
     public static final String ID_PRIVATE_INTERNAL = "private";
index f69626d..2427363 100644 (file)
@@ -991,9 +991,18 @@ class MountService extends IMountService.Stub
     }
 
     private void onDiskScannedLocked(DiskInfo disk) {
+        int volumeCount = 0;
+        for (int i = 0; i < mVolumes.size(); i++) {
+            final VolumeInfo vol = mVolumes.valueAt(i);
+            if (Objects.equals(disk.id, vol.getDiskId())) {
+                volumeCount++;
+            }
+        }
+
         final Intent intent = new Intent(DiskInfo.ACTION_DISK_SCANNED);
         intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
         intent.putExtra(DiskInfo.EXTRA_DISK_ID, disk.id);
+        intent.putExtra(DiskInfo.EXTRA_VOLUME_COUNT, volumeCount);
         mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
                 android.Manifest.permission.WRITE_MEDIA_STORAGE);
 
@@ -1002,14 +1011,6 @@ class MountService extends IMountService.Stub
             latch.countDown();
         }
 
-        int volumeCount = 0;
-        for (int i = 0; i < mVolumes.size(); i++) {
-            final VolumeInfo vol = mVolumes.valueAt(i);
-            if (Objects.equals(disk.id, vol.getDiskId())) {
-                volumeCount++;
-            }
-        }
-
         disk.volumeCount = volumeCount;
         mCallbacks.notifyDiskScanned(disk, volumeCount);
     }
@@ -1061,6 +1062,7 @@ class MountService extends IMountService.Stub
 
     private boolean isBroadcastWorthy(VolumeInfo vol) {
         switch (vol.getType()) {
+            case VolumeInfo.TYPE_PRIVATE:
             case VolumeInfo.TYPE_PUBLIC:
             case VolumeInfo.TYPE_EMULATED:
                 break;
@@ -1073,6 +1075,7 @@ class MountService extends IMountService.Stub
             case VolumeInfo.STATE_MOUNTED_READ_ONLY:
             case VolumeInfo.STATE_EJECTING:
             case VolumeInfo.STATE_UNMOUNTED:
+            case VolumeInfo.STATE_UNMOUNTABLE:
                 break;
             default:
                 return false;
@@ -1099,6 +1102,8 @@ class MountService extends IMountService.Stub
 
         if (isBroadcastWorthy(vol)) {
             final Intent intent = new Intent(VolumeInfo.ACTION_VOLUME_STATE_CHANGED);
+            intent.putExtra(VolumeInfo.EXTRA_VOLUME_ID, vol.id);
+            intent.putExtra(VolumeInfo.EXTRA_VOLUME_STATE, newState);
             intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
             mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
                     android.Manifest.permission.WRITE_MEDIA_STORAGE);