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));
+    }
 }