diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java index 36038d8ae6c..e88d38bdee3 100644 --- a/src/com/android/settings/network/NetworkProviderSettings.java +++ b/src/com/android/settings/network/NetworkProviderSettings.java @@ -201,7 +201,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment * ensure that behavior is consistent if {@link #isUiRestricted()} changes. It could be changed * by the Test DPC tool in AFW mode. */ - private boolean mIsRestricted; + protected boolean mIsRestricted; @VisibleForTesting AirplaneModeEnabler mAirplaneModeEnabler; @@ -219,7 +219,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment PreferenceCategory mConnectedWifiEntryPreferenceCategory; @VisibleForTesting PreferenceCategory mFirstWifiEntryPreferenceCategory; - private PreferenceCategory mWifiEntryPreferenceCategory; + @VisibleForTesting + PreferenceCategory mWifiEntryPreferenceCategory; @VisibleForTesting AddWifiNetworkPreference mAddWifiNetworkPreference; private WifiSwitchPreferenceController mWifiSwitchPreferenceController; @@ -794,7 +795,11 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } } - private void updateWifiEntryPreferences() { + protected void updateWifiEntryPreferences() { + // bypass the update if the activity and the view are not ready, or it's restricted UI. + if (getActivity() == null || getView() == null || mIsRestricted) { + return; + } // in case state has changed if (mWifiPickerTracker.getWifiState() != WifiManager.WIFI_STATE_ENABLED) { return; diff --git a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java index 7affe68ab99..99514497eb4 100644 --- a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +++ b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java @@ -535,4 +535,32 @@ public class NetworkProviderSettingsTest { assertThat(p instanceof NetworkProviderSettings.FirstWifiEntryPreference).isTrue(); } + + @Test + public void updateWifiEntryPreferences_activityIsNull_ShouldNotCrash() { + when(mNetworkProviderSettings.getActivity()).thenReturn(null); + + // should not crash + mNetworkProviderSettings.updateWifiEntryPreferences(); + } + + @Test + public void updateWifiEntryPreferences_viewIsNull_ShouldNotCrash() { + final FragmentActivity activity = mock(FragmentActivity.class); + when(mNetworkProviderSettings.getActivity()).thenReturn(activity); + when(mNetworkProviderSettings.getView()).thenReturn(null); + + // should not crash + mNetworkProviderSettings.updateWifiEntryPreferences(); + } + + @Test + public void updateWifiEntryPreferences_isRestricted_bypassUpdate() { + mNetworkProviderSettings.mIsRestricted = true; + mNetworkProviderSettings.mWifiEntryPreferenceCategory = mock(PreferenceCategory.class); + + mNetworkProviderSettings.updateWifiEntryPreferences(); + + verify(mNetworkProviderSettings.mWifiEntryPreferenceCategory, never()).setVisible(true); + } }