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
diff --git a/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java b/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java
index 1a3d195..3a515cc 100644
--- a/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java
@@ -63,7 +63,9 @@
@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 @@
@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 b3e5cb5..00a4a94 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 @@
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));
+ }
}