diff options
| author | Isaac Levy <ilevy@google.com> | 2011-08-25 15:19:07 -0700 |
|---|---|---|
| committer | Isaac Levy <ilevy@google.com> | 2011-08-25 15:19:07 -0700 |
| commit | 8fd4a3d0f72b3175936f1dd9ca174a91d196971f (patch) | |
| tree | 270657a2c23ece37bb9a78f346c6cd9c4a8e6c5d /wifi | |
| parent | c39e8e89eb370ed66f552da3be258e57f1aabeb9 (diff) | |
| download | frameworks_base-8fd4a3d0f72b3175936f1dd9ca174a91d196971f.zip frameworks_base-8fd4a3d0f72b3175936f1dd9ca174a91d196971f.tar.gz frameworks_base-8fd4a3d0f72b3175936f1dd9ca174a91d196971f.tar.bz2 | |
Prevent dup network adding - b/5200491
Change-Id: I8260cf73c4261e8efb696bb8557a39e02754190e
Diffstat (limited to 'wifi')
| -rw-r--r-- | wifi/java/android/net/wifi/WifiConfigStore.java | 47 |
1 files changed, 33 insertions, 14 deletions
diff --git a/wifi/java/android/net/wifi/WifiConfigStore.java b/wifi/java/android/net/wifi/WifiConfigStore.java index 5b4bce2..45c9869 100644 --- a/wifi/java/android/net/wifi/WifiConfigStore.java +++ b/wifi/java/android/net/wifi/WifiConfigStore.java @@ -281,7 +281,11 @@ class WifiConfigStore { if (WifiNative.removeNetworkCommand(netId)) { WifiNative.saveConfigCommand(); synchronized (sConfiguredNetworks) { - sConfiguredNetworks.remove(netId); + WifiConfiguration config = sConfiguredNetworks.get(netId); + if (config != null) { + sConfiguredNetworks.remove(netId); + sNetworkIds.remove(configKey(config)); + } } writeIpAndProxyConfigurations(); sendConfiguredNetworksChangedBroadcast(); @@ -315,7 +319,13 @@ class WifiConfigStore { static boolean removeNetwork(int netId) { boolean ret = WifiNative.removeNetworkCommand(netId); synchronized (sConfiguredNetworks) { - if (ret) sConfiguredNetworks.remove(netId); + if (ret) { + WifiConfiguration config = sConfiguredNetworks.get(netId); + if (config != null) { + sConfiguredNetworks.remove(netId); + sNetworkIds.remove(configKey(config)); + } + } } sendConfiguredNetworksChangedBroadcast(); return ret; @@ -854,18 +864,24 @@ class WifiConfigStore { * refer to an existing configuration. */ int netId = config.networkId; - boolean updateFailed = true; + boolean newNetwork = false; // networkId of INVALID_NETWORK_ID means we want to create a new network - boolean newNetwork = (netId == INVALID_NETWORK_ID); - - if (newNetwork) { - netId = WifiNative.addNetworkCommand(); - if (netId < 0) { - Log.e(TAG, "Failed to add a network!"); - return new NetworkUpdateResult(INVALID_NETWORK_ID); - } + if (netId == INVALID_NETWORK_ID) { + Integer savedNetId = sNetworkIds.get(configKey(config)); + if (savedNetId != null) { + netId = savedNetId; + } else { + newNetwork = true; + netId = WifiNative.addNetworkCommand(); + if (netId < 0) { + Log.e(TAG, "Failed to add a network!"); + return new NetworkUpdateResult(INVALID_NETWORK_ID); + } + } } + boolean updateFailed = true; + setVariables: { if (config.SSID != null && @@ -1053,12 +1069,15 @@ class WifiConfigStore { if (sConfig == null) { sConfig = new WifiConfiguration(); sConfig.networkId = netId; - synchronized (sConfiguredNetworks) { - sConfiguredNetworks.put(netId, sConfig); - } } + readNetworkVariables(sConfig); + synchronized (sConfiguredNetworks) { + sConfiguredNetworks.put(netId, sConfig); + sNetworkIds.put(configKey(sConfig), netId); + } + NetworkUpdateResult result = writeIpAndProxyConfigurationsOnChange(sConfig, config); result.setNetworkId(netId); return result; |
