From be6a844a06907f1c6cc2855800d650052dbce156 Mon Sep 17 00:00:00 2001 From: Salvador Martinez Date: Mon, 23 Apr 2018 16:52:25 -0700 Subject: [PATCH] Check if boxes still available when restoring state Apparently when the device is idle long enough the system will clean up the dialog view for the hotspot band preference. This will cause restore state to fail once it decides to pause the activity. To avoid this we should make sure the boxes are not null. Test: robotest Bug: 78445411 Change-Id: I2a82b01f894f62be6c5209c78faddc4089aa6301 --- .../widget/HotspotApBandSelectionPreference.java | 4 ++-- .../HotspotApBandSelectionPreferenceTest.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/widget/HotspotApBandSelectionPreference.java b/src/com/android/settings/widget/HotspotApBandSelectionPreference.java index 4f127eb9193..0a2405e4136 100644 --- a/src/com/android/settings/widget/HotspotApBandSelectionPreference.java +++ b/src/com/android/settings/widget/HotspotApBandSelectionPreference.java @@ -118,8 +118,8 @@ public class HotspotApBandSelectionPreference extends CustomDialogPreference imp SavedState myState = new SavedState(superState); myState.shouldRestore = getDialog() != null; - myState.enabled2G = mBox2G.isChecked(); - myState.enabled5G = mBox5G.isChecked(); + myState.enabled2G = mBox2G != null && mBox2G.isChecked(); + myState.enabled5G = mBox5G != null && mBox5G.isChecked(); return myState; } diff --git a/tests/robotests/src/com/android/settings/widget/HotspotApBandSelectionPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/HotspotApBandSelectionPreferenceTest.java index 6bfc968a12a..0ffda3baa96 100644 --- a/tests/robotests/src/com/android/settings/widget/HotspotApBandSelectionPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/widget/HotspotApBandSelectionPreferenceTest.java @@ -115,6 +115,21 @@ public class HotspotApBandSelectionPreferenceTest { assertThat(mPreference.mShouldRestore).isFalse(); } + @Test + public void onSaveInstanceState_doesNotCrashWhenViewGone() { + mPreference.setExistingConfigValue(WifiConfiguration.AP_BAND_2GHZ); + mPreference.onBindDialogView(mLayout); + // When the device dozes the view and dialog can become null + mPreference.mBox5G = null; + mPreference.mBox2G = null; + ReflectionHelpers.setField(mPreference, "mFragment", null); + + // make sure it does not crash and state is not restored + Parcelable parcelable = mPreference.onSaveInstanceState(); + mPreference.onRestoreInstanceState(parcelable); + assertThat(mPreference.mShouldRestore).isFalse(); + } + @Test public void onSaveInstanceState_presentWhenDialogPresent() { mPreference.setExistingConfigValue(WifiConfiguration.AP_BAND_2GHZ);