diff options
-rwxr-xr-x | service/java/com/android/server/wifi/WifiConfigStore.java | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/service/java/com/android/server/wifi/WifiConfigStore.java b/service/java/com/android/server/wifi/WifiConfigStore.java index 959c3f8be..76255d46e 100755 --- a/service/java/com/android/server/wifi/WifiConfigStore.java +++ b/service/java/com/android/server/wifi/WifiConfigStore.java @@ -1410,8 +1410,32 @@ public class WifiConfigStore extends IpConfigStore { if (mNetworkIds.containsKey(configKey(config))) { // That SSID is already known, just ignore this duplicate entry - if (showNetworks) localLog("discarded duplicate network ", config.networkId); - } else if(config.isValid()){ + if (showNetworks) + localLog("Duplicate network found ", config.networkId); + + Integer n = mNetworkIds.get(configKey(config)); + WifiConfiguration tempCfg = mConfiguredNetworks.get(n); + + if ( (tempCfg != null && + tempCfg.status != WifiConfiguration.Status.CURRENT) && + config.status == WifiConfiguration.Status.CURRENT) { + + // Clear the existing entry, we don't need it + mConfiguredNetworks.remove(tempCfg.networkId); + mNetworkIds.remove(configKey(tempCfg)); + + // Add current entry to the list + mConfiguredNetworks.put(config.networkId, config); + mNetworkIds.put(configKey(config), config.networkId); + + // Enable AutoJoin status and indicate the network as + // duplicate The duplicateNetwork flag will be used + // to decide whether to restore network configurations + // in readNetworkHistory() along with IP and proxy settings + config.setAutoJoinStatus(WifiConfiguration.AUTO_JOIN_ENABLED); + config.duplicateNetwork = true; + } + } else if (config.isValid()) { mConfiguredNetworks.put(config.networkId, config); mNetworkIds.put(configKey(config), config.networkId); if (showNetworks) localLog("loaded configured network", config.networkId); @@ -1840,7 +1864,7 @@ public class WifiConfigStore extends IpConfigStore { rssi = WifiConfiguration.INVALID_RSSI; caps = null; - } else if (config != null) { + } else if (config != null && config.duplicateNetwork == false) { if (key.startsWith(SSID_KEY)) { ssid = key.replace(SSID_KEY, ""); ssid = ssid.replace(SEPARATOR_KEY, ""); @@ -2540,10 +2564,13 @@ public class WifiConfigStore extends IpConfigStore { int id = networks.keyAt(i); WifiConfiguration config = mConfiguredNetworks.get(mNetworkIds.get(id)); - if (config == null || config.autoJoinStatus == WifiConfiguration.AUTO_JOIN_DELETED) { loge("configuration found for missing network, nid=" + id +", ignored, networks.size=" + Integer.toString(networks.size())); + } else if (config != null && config.duplicateNetwork == true) { + if (VDBG) + loge("Network configuration is not updated for duplicate network id=" + + config.networkId + " SSID=" + config.SSID); } else { config.setIpConfiguration(networks.valueAt(i)); } |