From 07f2086ecda884de8843eb03bc303e8db1022283 Mon Sep 17 00:00:00 2001 From: Arc Wang Date: Thu, 27 May 2021 10:27:24 +0800 Subject: [PATCH] Fix NPE at Storage Settings configuration change At configuration change, both StorageCategoryFragment and ProfileSelectStorageFragment are re-created and there is a different callback sequence than normal case. This change save/restore mSelectedStorageEntry in instance state bundle to fix the NPE. Bug: 189108700 Test: manual Install work profile and rotate Storage Settings. Change-Id: I39d7ef7ced22188ee66216d57518198d63671e0e --- .../settings/deviceinfo/StorageCategoryFragment.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/com/android/settings/deviceinfo/StorageCategoryFragment.java b/src/com/android/settings/deviceinfo/StorageCategoryFragment.java index ce8f2199187..9ae835e7a3f 100644 --- a/src/com/android/settings/deviceinfo/StorageCategoryFragment.java +++ b/src/com/android/settings/deviceinfo/StorageCategoryFragment.java @@ -73,6 +73,7 @@ public class StorageCategoryFragment extends DashboardFragment LoaderManager.LoaderCallbacks>, Preference.OnPreferenceClickListener { private static final String TAG = "StorageCategoryFrag"; + private static final String SELECTED_STORAGE_ENTRY_KEY = "selected_storage_entry_key"; private static final String SUMMARY_PREF_KEY = "storage_summary"; private static final String FREE_UP_SPACE_PREF_KEY = "free_up_space"; private static final int STORAGE_JOB_ID = 0; @@ -127,6 +128,10 @@ public class StorageCategoryFragment extends DashboardFragment mStorageManager = getActivity().getSystemService(StorageManager.class); + if (icicle != null) { + mSelectedStorageEntry = icicle.getParcelable(SELECTED_STORAGE_ENTRY_KEY); + } + initializePreference(); } @@ -167,6 +172,12 @@ public class StorageCategoryFragment extends DashboardFragment } } + @Override + public void onSaveInstanceState(Bundle outState) { + outState.putParcelable(SELECTED_STORAGE_ENTRY_KEY, mSelectedStorageEntry); + super.onSaveInstanceState(outState); + } + private void onReceivedSizes() { boolean stopLoading = false; if (mStorageInfo != null) {