From 0ba2b2bd83e3e0db25501f4d7cfde92761ad9ac3 Mon Sep 17 00:00:00 2001 From: Salvador Martinez Date: Thu, 29 Mar 2018 15:39:55 -0700 Subject: [PATCH] Make metered wifi controller resilient to null config Apparently the wifi config can sometimes come back as null initially when the device auto-connects to a network. This CL simply makes the controller resilient to that so that it doesn't crash the app. Test: robotests Bug: 73076869 Change-Id: I99098f35df9cd902f5f244a872cce9b71c17c224 --- .../wifi/details/WifiMeteredPreferenceController.java | 11 ++++++++--- .../details/WifiMeteredPreferenceControllerTest.java | 8 ++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java b/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java index 1a3d195a973..3a515cc8db7 100644 --- a/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java +++ b/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java @@ -63,7 +63,9 @@ public class WifiMeteredPreferenceController extends BasePreferenceController im @Override public boolean onPreferenceChange(Preference preference, Object newValue) { - mWifiConfiguration.meteredOverride = Integer.parseInt((String) newValue); + if (mWifiConfiguration != null) { + mWifiConfiguration.meteredOverride = Integer.parseInt((String) newValue); + } mWifiManager.updateNetwork(mWifiConfiguration); // Stage the backup of the SettingsProvider package which backs this up BackupManager.dataChanged("com.android.providers.settings"); @@ -73,8 +75,11 @@ public class WifiMeteredPreferenceController extends BasePreferenceController im @VisibleForTesting int getMeteredOverride() { - // Wrap the meteredOverride since robolectric cannot recognize it - return mWifiConfiguration.meteredOverride; + if (mWifiConfiguration != null) { + // Wrap the meteredOverride since robolectric cannot recognize it + return mWifiConfiguration.meteredOverride; + } + return WifiConfiguration.METERED_OVERRIDE_NONE; } private void updateSummary(DropDownPreference preference, int meteredOverride) { diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiMeteredPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiMeteredPreferenceControllerTest.java index b3e5cb5117e..00a4a94e10d 100644 --- a/tests/robotests/src/com/android/settings/wifi/details/WifiMeteredPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/details/WifiMeteredPreferenceControllerTest.java @@ -83,4 +83,12 @@ public class WifiMeteredPreferenceControllerTest { assertThat(mDropDownPreference.getEntry()).isEqualTo("Detect automatically"); } + + @Test + public void testController_resilientToNullConfig() { + mPreferenceController = spy(new WifiMeteredPreferenceController(mContext, null)); + + mPreferenceController.getMeteredOverride(); + mPreferenceController.onPreferenceChange(mDropDownPreference, new Integer(1)); + } }