From f5a6bd7538a6800c2a43ace5ad67d65b1f8f697a Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Tue, 19 May 2015 14:42:38 -0700 Subject: [PATCH] Push initial disk state, handle empty media. Stash volume count from last scan, and use it to push initial storage notifications state when listener is first attached. Also omit disks with invalid size, which usually means they're an empty slot with no media. Bug: 20503551 Change-Id: I75097035aebaad70ba32437179a863f6a0910aa5 --- core/java/android/os/storage/DiskInfo.java | 4 ++++ .../src/com/android/systemui/usb/StorageNotification.java | 7 ++++++- services/core/java/com/android/server/MountService.java | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/core/java/android/os/storage/DiskInfo.java b/core/java/android/os/storage/DiskInfo.java index 9623695edbba6..04e54aafbce9a 100644 --- a/core/java/android/os/storage/DiskInfo.java +++ b/core/java/android/os/storage/DiskInfo.java @@ -50,6 +50,8 @@ public class DiskInfo implements Parcelable { public final int flags; public long size; public String label; + /** Hacky; don't rely on this count */ + public int volumeCount; public DiskInfo(String id, int flags) { this.id = Preconditions.checkNotNull(id); @@ -61,6 +63,7 @@ public class DiskInfo implements Parcelable { flags = parcel.readInt(); size = parcel.readLong(); label = parcel.readString(); + volumeCount = parcel.readInt(); } public @NonNull String getId() { @@ -181,5 +184,6 @@ public class DiskInfo implements Parcelable { parcel.writeInt(this.flags); parcel.writeLong(size); parcel.writeString(label); + parcel.writeInt(volumeCount); } } diff --git a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java index 23813d11919c1..ad215551a90f0 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java +++ b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java @@ -148,6 +148,11 @@ public class StorageNotification extends SystemUI { android.Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS, null); // Kick current state into place + final List disks = mStorageManager.getDisks(); + for (DiskInfo disk : disks) { + onDiskScannedInternal(disk, disk.volumeCount); + } + final List vols = mStorageManager.getVolumes(); for (VolumeInfo vol : vols) { onVolumeStateChangedInternal(vol); @@ -194,7 +199,7 @@ public class StorageNotification extends SystemUI { } private void onDiskScannedInternal(DiskInfo disk, int volumeCount) { - if (volumeCount == 0) { + if (volumeCount == 0 && disk.size > 0) { // No supported volumes found, give user option to format final CharSequence title = mContext.getString( R.string.ext_media_unmountable_notification_title, disk.getDescription()); diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java index e00cf5b1cf3d8..d48953db8f45e 100644 --- a/services/core/java/com/android/server/MountService.java +++ b/services/core/java/com/android/server/MountService.java @@ -973,6 +973,7 @@ class MountService extends IMountService.Stub } } + disk.volumeCount = volumeCount; mCallbacks.notifyDiskScanned(disk, volumeCount); }