diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectStorageFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectStorageFragment.java index 57988c5d0dc..1473dd1c04c 100644 --- a/src/com/android/settings/dashboard/profileselector/ProfileSelectStorageFragment.java +++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectStorageFragment.java @@ -84,10 +84,19 @@ public class ProfileSelectStorageFragment extends ProfileSelectFragment { } final StorageEntry changedStorageEntry = new StorageEntry(getContext(), volumeInfo); - switch (volumeInfo.getState()) { + final int volumeState = volumeInfo.getState(); + switch (volumeState) { + case VolumeInfo.STATE_REMOVED: + case VolumeInfo.STATE_BAD_REMOVAL: + // Remove removed storage from list and don't show it on spinner. + if (!mStorageEntries.remove(changedStorageEntry)) { + break; + } case VolumeInfo.STATE_MOUNTED: case VolumeInfo.STATE_MOUNTED_READ_ONLY: case VolumeInfo.STATE_UNMOUNTABLE: + case VolumeInfo.STATE_UNMOUNTED: + case VolumeInfo.STATE_EJECTING: // Add mounted or unmountable storage in the list and show it on spinner. // Unmountable storages are the storages which has a problem format and android // is not able to mount it automatically. @@ -95,25 +104,15 @@ public class ProfileSelectStorageFragment extends ProfileSelectFragment { mStorageEntries.removeIf(storageEntry -> { return storageEntry.equals(changedStorageEntry); }); - mStorageEntries.add(changedStorageEntry); + if (volumeState != VolumeInfo.STATE_REMOVED + && volumeState != VolumeInfo.STATE_BAD_REMOVAL) { + mStorageEntries.add(changedStorageEntry); + } if (changedStorageEntry.equals(mSelectedStorageEntry)) { mSelectedStorageEntry = changedStorageEntry; } refreshUi(); break; - case VolumeInfo.STATE_REMOVED: - case VolumeInfo.STATE_UNMOUNTED: - case VolumeInfo.STATE_BAD_REMOVAL: - case VolumeInfo.STATE_EJECTING: - // Remove removed storage from list and don't show it on spinner. - if (mStorageEntries.remove(changedStorageEntry)) { - if (changedStorageEntry.equals(mSelectedStorageEntry)) { - mSelectedStorageEntry = - StorageEntry.getDefaultInternalStorageEntry(getContext()); - } - refreshUi(); - } - break; default: // Do nothing. } diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java index 77d4072956d..a4809c929fd 100644 --- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java +++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java @@ -115,10 +115,19 @@ public class StorageDashboardFragment extends DashboardFragment } final StorageEntry changedStorageEntry = new StorageEntry(getContext(), volumeInfo); - switch (volumeInfo.getState()) { + final int volumeState = volumeInfo.getState(); + switch (volumeState) { + case VolumeInfo.STATE_REMOVED: + case VolumeInfo.STATE_BAD_REMOVAL: + // Remove removed storage from list and don't show it on spinner. + if (!mStorageEntries.remove(changedStorageEntry)) { + break; + } case VolumeInfo.STATE_MOUNTED: case VolumeInfo.STATE_MOUNTED_READ_ONLY: case VolumeInfo.STATE_UNMOUNTABLE: + case VolumeInfo.STATE_UNMOUNTED: + case VolumeInfo.STATE_EJECTING: // Add mounted or unmountable storage in the list and show it on spinner. // Unmountable storages are the storages which has a problem format and android // is not able to mount it automatically. @@ -126,25 +135,15 @@ public class StorageDashboardFragment extends DashboardFragment mStorageEntries.removeIf(storageEntry -> { return storageEntry.equals(changedStorageEntry); }); - mStorageEntries.add(changedStorageEntry); + if (volumeState != VolumeInfo.STATE_REMOVED + && volumeState != VolumeInfo.STATE_BAD_REMOVAL) { + mStorageEntries.add(changedStorageEntry); + } if (changedStorageEntry.equals(mSelectedStorageEntry)) { mSelectedStorageEntry = changedStorageEntry; } refreshUi(); break; - case VolumeInfo.STATE_REMOVED: - case VolumeInfo.STATE_UNMOUNTED: - case VolumeInfo.STATE_BAD_REMOVAL: - case VolumeInfo.STATE_EJECTING: - // Remove removed storage from list and don't show it on spinner. - if (mStorageEntries.remove(changedStorageEntry)) { - if (changedStorageEntry.equals(mSelectedStorageEntry)) { - mSelectedStorageEntry = - StorageEntry.getDefaultInternalStorageEntry(getContext()); - } - refreshUi(); - } - break; default: // Do nothing. } diff --git a/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java b/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java index 42a3a16da3e..4b87e422c1b 100644 --- a/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java +++ b/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java @@ -26,6 +26,7 @@ import android.os.UserManager; import android.os.storage.DiskInfo; import android.os.storage.StorageManager; import android.os.storage.VolumeInfo; +import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -53,6 +54,8 @@ import java.util.Objects; public class VolumeOptionMenuController implements LifecycleObserver, OnCreateOptionsMenu, OnPrepareOptionsMenu, OnOptionsItemSelected { + private static final String TAG = "VolumeOptionMenuController"; + @VisibleForTesting MenuItem mRename; @VisibleForTesting @@ -103,6 +106,17 @@ public class VolumeOptionMenuController implements LifecycleObserver, OnCreateOp mFree = menu.findItem(R.id.storage_free); mForget = menu.findItem(R.id.storage_forget); + updateOptionsMenu(); + } + + private void updateOptionsMenu() { + if (mRename == null || mMount == null || mUnmount == null || mFormat == null + || mFormatAsPortable == null || mFormatAsInternal == null || mMigrate == null + || mFree == null || mForget == null) { + Log.d(TAG, "Menu items are not available"); + return; + } + mRename.setVisible(false); mMount.setVisible(false); mUnmount.setVisible(false); @@ -252,5 +266,7 @@ public class VolumeOptionMenuController implements LifecycleObserver, OnCreateOp public void setSelectedStorageEntry(StorageEntry storageEntry) { mStorageEntry = storageEntry; + + updateOptionsMenu(); } }