From 5a42db2e9c4ce5700a321b9c2aa22189598ceeaf Mon Sep 17 00:00:00 2001 From: Mitchell Wills Date: Mon, 3 Aug 2015 09:46:08 -0700 Subject: Pass connection configuration when setting wifi info This allows the both the ssid and connection info to be verified when updating wifi info. Bug: 22797622 Change-Id: I82d771a299e17469683516c6b1077cb260981812 --- .../com/android/settingslib/wifi/AccessPoint.java | 21 ++++++++++----- .../com/android/settingslib/wifi/WifiTracker.java | 30 +++++++++++++++++----- 2 files changed, 38 insertions(+), 13 deletions(-) (limited to 'packages/SettingsLib') diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java index 348d0ec..632a867 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java @@ -151,7 +151,7 @@ public class AccessPoint implements Comparable { mScanResultCache.put(result.BSSID, result); } } - update(mInfo, mNetworkInfo); + update(mConfig, mInfo, mNetworkInfo); mRssi = getRssi(); mSeen = getSeen(); } @@ -629,11 +629,18 @@ public class AccessPoint implements Comparable { return mConfig != null && mConfig.isPasspoint(); } - /** Return whether the given {@link WifiInfo} is for this access point. */ - private boolean isInfoForThisAccessPoint(WifiInfo info) { + /** + * Return whether the given {@link WifiInfo} is for this access point. + * If the current AP does not have a network Id then the config is used to + * match based on SSID and security. + */ + private boolean isInfoForThisAccessPoint(WifiConfiguration config, WifiInfo info) { if (isPasspoint() == false && networkId != WifiConfiguration.INVALID_NETWORK_ID) { return networkId == info.getNetworkId(); - } else { + } else if (config != null) { + return matches(config); + } + else { // Might be an ephemeral connection with no WifiConfiguration. Try matching on SSID. // (Note that we only do this if the WifiConfiguration explicitly equals INVALID). // TODO: Handle hex string SSIDs. @@ -705,7 +712,7 @@ public class AccessPoint implements Comparable { } boolean update(ScanResult result) { - if (ssid.equals(result.SSID) && security == getSecurity(result)) { + if (matches(result)) { /* Update the LRU timestamp, if BSSID exists */ mScanResultCache.get(result.BSSID); @@ -735,9 +742,9 @@ public class AccessPoint implements Comparable { return false; } - boolean update(WifiInfo info, NetworkInfo networkInfo) { + boolean update(WifiConfiguration config, WifiInfo info, NetworkInfo networkInfo) { boolean reorder = false; - if (info != null && isInfoForThisAccessPoint(info)) { + if (info != null && isInfoForThisAccessPoint(config, info)) { reorder = (mInfo == null); mRssi = info.getRssi(); mInfo = info; diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java index 33f993e..c28288e 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java @@ -281,6 +281,19 @@ public class WifiTracker { return mScanResultCache.values(); } + private WifiConfiguration getWifiConfigurationForNetworkId(int networkId) { + final List configs = mWifiManager.getConfiguredNetworks(); + if (configs != null) { + for (WifiConfiguration config : configs) { + if (mLastInfo != null && networkId == config.networkId && + !(config.selfAdded && config.numAssociation == 0)) { + return config; + } + } + } + return null; + } + private void updateAccessPoints() { // Swap the current access points into a cached list. List cachedAccessPoints = getAccessPoints(); @@ -295,21 +308,21 @@ public class WifiTracker { * correct SSID. Maps SSID -> List of AccessPoints with the given SSID. */ Multimap apMap = new Multimap(); WifiConfiguration connectionConfig = null; + if (mLastInfo != null) { + connectionConfig = getWifiConfigurationForNetworkId(mLastInfo.getNetworkId()); + } final List configs = mWifiManager.getConfiguredNetworks(); if (configs != null) { mSavedNetworksExist = configs.size() != 0; for (WifiConfiguration config : configs) { - if (mLastInfo != null && mLastInfo.getNetworkId() == config.networkId) { - connectionConfig = config; - } if (config.selfAdded && config.numAssociation == 0) { continue; } AccessPoint accessPoint = getCachedOrCreate(config, cachedAccessPoints); if (mLastInfo != null && mLastNetworkInfo != null) { if (config.isPasspoint() == false) { - accessPoint.update(mLastInfo, mLastNetworkInfo); + accessPoint.update(connectionConfig, mLastInfo, mLastNetworkInfo); } } if (mIncludeSaved) { @@ -346,7 +359,7 @@ public class WifiTracker { if (!found && mIncludeScans) { AccessPoint accessPoint = getCachedOrCreate(result, cachedAccessPoints); if (mLastInfo != null && mLastNetworkInfo != null) { - accessPoint.update(mLastInfo, mLastNetworkInfo); + accessPoint.update(connectionConfig, mLastInfo, mLastNetworkInfo); } if (result.isPasspointNetwork()) { @@ -437,9 +450,14 @@ public class WifiTracker { mLastNetworkInfo = networkInfo; } + WifiConfiguration connectionConfig = null; + if (mLastInfo != null) { + connectionConfig = getWifiConfigurationForNetworkId(mLastInfo.getNetworkId()); + } + boolean reorder = false; for (int i = mAccessPoints.size() - 1; i >= 0; --i) { - if (mAccessPoints.get(i).update(mLastInfo, mLastNetworkInfo)) { + if (mAccessPoints.get(i).update(connectionConfig, mLastInfo, mLastNetworkInfo)) { reorder = true; } } -- cgit v1.1