From aa76620073e31271106ebbfc1ef8edee801e577d Mon Sep 17 00:00:00 2001 From: ot904699 Date: Tue, 20 Sep 2022 11:34:41 +0800 Subject: [PATCH] Fix USB OTG hot plug out nndexOutOfBoundsException Open Settings, then open Storage , plug in USB OTG with Disk, select Disk, open Files, play a video, press the back key, hot plug out USB OTG, the IndexOutOfBoundsException will happen The root cause is when received the onVolumeStateChanged in StorageEventListener in StorageDashboardFragment, the volumeInfo status is VolumeInfo.STATE_UNMOUNTED or VolumeInfo.STATE_EJECTING, mSelectedStorageEntry set to changedStorageEntry, cause the fail. This is a fix for CL 225095144 bug. Bug: 247737688 Test: Manual Change-Id: I9535c49d65c42a8dfa8ccf4e271ae973d944d4b9 --- .../deviceinfo/StorageDashboardFragment.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java index a4cc513e99f..1b382981784 100644 --- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java +++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java @@ -135,12 +135,18 @@ public class StorageDashboardFragment extends DashboardFragment mStorageEntries.removeIf(storageEntry -> { return storageEntry.equals(changedStorageEntry); }); - if (volumeState != VolumeInfo.STATE_REMOVED - && volumeState != VolumeInfo.STATE_BAD_REMOVAL) { + if (volumeState == VolumeInfo.STATE_MOUNTED + || volumeState == VolumeInfo.STATE_MOUNTED_READ_ONLY + || volumeState == VolumeInfo.STATE_UNMOUNTABLE) { mStorageEntries.add(changedStorageEntry); - } - if (changedStorageEntry.equals(mSelectedStorageEntry)) { - mSelectedStorageEntry = changedStorageEntry; + if (changedStorageEntry.equals(mSelectedStorageEntry)) { + mSelectedStorageEntry = changedStorageEntry; + } + } else { + if (changedStorageEntry.equals(mSelectedStorageEntry)) { + mSelectedStorageEntry = + StorageEntry.getDefaultInternalStorageEntry(getContext()); + } } refreshUi(); break;