From ebcfa17353403172b81656ea15ecfe04dcddf407 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Tue, 22 Jun 2021 16:48:24 +0800 Subject: [PATCH] Fix the NPE issue Bug: 190938633 Test: manual test make RunSettingsRoboTests ROBOTEST_FILTER=NetworkProviderSettingsTest Change-Id: I249d701abfa79872a331c071116d2db0bfdcced6 --- .../network/NetworkProviderSettings.java | 11 ++++++-- .../network/NetworkProviderSettingsTest.java | 28 +++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java index 25cf4ce7dab..e5737c8cb68 100644 --- a/src/com/android/settings/network/NetworkProviderSettings.java +++ b/src/com/android/settings/network/NetworkProviderSettings.java @@ -200,7 +200,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; @@ -218,7 +218,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment PreferenceCategory mConnectedWifiEntryPreferenceCategory; @VisibleForTesting PreferenceCategory mFirstWifiEntryPreferenceCategory; - private PreferenceCategory mWifiEntryPreferenceCategory; + @VisibleForTesting + PreferenceCategory mWifiEntryPreferenceCategory; @VisibleForTesting AddWifiNetworkPreference mAddWifiNetworkPreference; private WifiSwitchPreferenceController mWifiSwitchPreferenceController; @@ -771,7 +772,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); + } }