Fix NPE for WifiConfiguration in AccessPoint.

In getSummary methods, make a local reference to WifiConfig before
accessing the fields to prevent member variable mConfig being reset in a
different thread.

Bug: 31617798
Test: manually open/close/refresh wifi settings and see no crash.

Change-Id: I254cb3cb59dead425a9ada17d9e84a7e2974f738
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index 380fcd4..92f1b18 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -360,17 +360,18 @@
     }
 
     public String getSavedNetworkSummary() {
-        if (mConfig != null) {
+        WifiConfiguration config = mConfig;
+        if (config != null) {
             PackageManager pm = mContext.getPackageManager();
             String systemName = pm.getNameForUid(android.os.Process.SYSTEM_UID);
-            int userId = UserHandle.getUserId(mConfig.creatorUid);
+            int userId = UserHandle.getUserId(config.creatorUid);
             ApplicationInfo appInfo = null;
-            if (mConfig.creatorName != null && mConfig.creatorName.equals(systemName)) {
+            if (config.creatorName != null && config.creatorName.equals(systemName)) {
                 appInfo = mContext.getApplicationInfo();
             } else {
                 try {
                     IPackageManager ipm = AppGlobals.getPackageManager();
-                    appInfo = ipm.getApplicationInfo(mConfig.creatorName, 0 /* flags */, userId);
+                    appInfo = ipm.getApplicationInfo(config.creatorName, 0 /* flags */, userId);
                 } catch (RemoteException rex) {
                 }
             }
@@ -385,29 +386,33 @@
     }
 
     public String getSummary() {
-        return getSettingsSummary();
+        return getSettingsSummary(mConfig);
     }
 
     public String getSettingsSummary() {
+        return getSettingsSummary(mConfig);
+    }
+
+    private String getSettingsSummary(WifiConfiguration config) {
         // Update to new summary
         StringBuilder summary = new StringBuilder();
 
-        if (isActive() && mConfig != null && mConfig.isPasspoint()) {
+        if (isActive() && config != null && config.isPasspoint()) {
             // This is the active connection on passpoint
             summary.append(getSummary(mContext, getDetailedState(),
-                    false, mConfig.providerFriendlyName));
+                    false, config.providerFriendlyName));
         } else if (isActive()) {
             // This is the active connection on non-passpoint network
             summary.append(getSummary(mContext, getDetailedState(),
                     mInfo != null && mInfo.isEphemeral()));
-        } else if (mConfig != null && mConfig.isPasspoint()) {
+        } else if (config != null && config.isPasspoint()) {
             String format = mContext.getString(R.string.available_via_passpoint);
-            summary.append(String.format(format, mConfig.providerFriendlyName));
-        } else if (mConfig != null && mConfig.hasNoInternetAccess()) {
+            summary.append(String.format(format, config.providerFriendlyName));
+        } else if (config != null && config.hasNoInternetAccess()) {
             summary.append(mContext.getString(R.string.wifi_no_internet));
-        } else if (mConfig != null && !mConfig.getNetworkSelectionStatus().isNetworkEnabled()) {
+        } else if (config != null && !config.getNetworkSelectionStatus().isNetworkEnabled()) {
             WifiConfiguration.NetworkSelectionStatus networkStatus =
-                    mConfig.getNetworkSelectionStatus();
+                    config.getNetworkSelectionStatus();
             switch (networkStatus.getNetworkSelectionDisableReason()) {
                 case WifiConfiguration.NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE:
                     summary.append(mContext.getString(R.string.wifi_disabled_password_failure));
@@ -423,7 +428,7 @@
         } else if (mRssi == Integer.MAX_VALUE) { // Wifi out of range
             summary.append(mContext.getString(R.string.wifi_not_in_range));
         } else { // In range, not disabled.
-            if (mConfig != null) { // Is saved network
+            if (config != null) { // Is saved network
                 summary.append(mContext.getString(R.string.wifi_remembered));
             }
         }
@@ -435,11 +440,11 @@
                 summary.append(" f=" + Integer.toString(mInfo.getFrequency()));
             }
             summary.append(" " + getVisibilityStatus());
-            if (mConfig != null && !mConfig.getNetworkSelectionStatus().isNetworkEnabled()) {
-                summary.append(" (" + mConfig.getNetworkSelectionStatus().getNetworkStatusString());
-                if (mConfig.getNetworkSelectionStatus().getDisableTime() > 0) {
+            if (config != null && !config.getNetworkSelectionStatus().isNetworkEnabled()) {
+                summary.append(" (" + config.getNetworkSelectionStatus().getNetworkStatusString());
+                if (config.getNetworkSelectionStatus().getDisableTime() > 0) {
                     long now = System.currentTimeMillis();
-                    long diff = (now - mConfig.getNetworkSelectionStatus().getDisableTime()) / 1000;
+                    long diff = (now - config.getNetworkSelectionStatus().getDisableTime()) / 1000;
                     long sec = diff%60; //seconds
                     long min = (diff/60)%60; //minutes
                     long hour = (min/60)%60; //hours
@@ -451,9 +456,9 @@
                 summary.append(")");
             }
 
-            if (mConfig != null) {
+            if (config != null) {
                 WifiConfiguration.NetworkSelectionStatus networkStatus =
-                        mConfig.getNetworkSelectionStatus();
+                        config.getNetworkSelectionStatus();
                 for (int index = WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_ENABLE;
                         index < WifiConfiguration.NetworkSelectionStatus
                         .NETWORK_SELECTION_DISABLED_MAX; index++) {