Avoid a few crashes around unmounting.

Also refresh UI when metadata changes.

Bug: 19993667
Change-Id: Ib0ea9be68a3db5c71d15fae6809f31df43fd9af0
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index f2d9791..dec259b 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -433,6 +433,14 @@
                 refresh();
             }
         }
+
+        @Override
+        public void onVolumeMetadataChanged(VolumeInfo vol) {
+            if (Objects.equals(mVolume.getId(), vol.getId())) {
+                mVolume = vol;
+                refresh();
+            }
+        }
     };
 
     /**
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeUnmountConfirm.java b/src/com/android/settings/deviceinfo/PrivateVolumeUnmountConfirm.java
index dd7f91c..614b737 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeUnmountConfirm.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeUnmountConfirm.java
@@ -48,7 +48,7 @@
         final StorageManager storage = getActivity().getSystemService(StorageManager.class);
         final String volumeId = getArguments().getString(VolumeInfo.EXTRA_VOLUME_ID);
         mVolume = storage.findVolumeById(volumeId);
-        mDisk = storage.findDiskById(mVolume.getId());
+        mDisk = storage.findDiskById(mVolume.getDiskId());
 
         final View view = inflater.inflate(R.layout.storage_internal_unmount, container, false);
         final TextView body = (TextView) view.findViewById(R.id.body);
diff --git a/src/com/android/settings/deviceinfo/PublicVolumeSettings.java b/src/com/android/settings/deviceinfo/PublicVolumeSettings.java
index 71fe23d..94a505b 100644
--- a/src/com/android/settings/deviceinfo/PublicVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PublicVolumeSettings.java
@@ -122,6 +122,18 @@
             screen.addPreference(mGraph);
             screen.addPreference(mTotal);
             screen.addPreference(mAvailable);
+
+            final File file = mVolume.getPath();
+            mTotalSize = file.getTotalSpace();
+            mAvailSize = file.getFreeSpace();
+
+            mTotal.setSummary(Formatter.formatFileSize(context, mTotalSize));
+            mAvailable.setSummary(Formatter.formatFileSize(context, mAvailSize));
+
+            mGraph.clear();
+            mGraph.addEntry(0, (mTotalSize - mAvailSize) / (float) mTotalSize,
+                    android.graphics.Color.GRAY);
+            mGraph.commit();
         }
 
         if (mVolume.getState() == VolumeInfo.STATE_UNMOUNTED) {
@@ -134,18 +146,6 @@
         if (mDisk.isAdoptable()) {
             screen.addPreference(mFormatInternal);
         }
-
-        final File file = mVolume.getPath();
-        mTotalSize = file.getTotalSpace();
-        mAvailSize = file.getFreeSpace();
-
-        mTotal.setSummary(Formatter.formatFileSize(context, mTotalSize));
-        mAvailable.setSummary(Formatter.formatFileSize(context, mAvailSize));
-
-        mGraph.clear();
-        mGraph.addEntry(0, (mTotalSize - mAvailSize) / (float) mTotalSize,
-                android.graphics.Color.GRAY);
-        mGraph.commit();
     }
 
     private UsageBarPreference buildGraph() {
@@ -215,5 +215,13 @@
                 refresh();
             }
         }
+
+        @Override
+        public void onVolumeMetadataChanged(VolumeInfo vol) {
+            if (Objects.equals(mVolume.getId(), vol.getId())) {
+                mVolume = vol;
+                refresh();
+            }
+        }
     };
 }