summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Quang Luong <qal@google.com> 2019-01-11 14:58:14 -0800
committer Quang Luong <qal@google.com> 2019-01-15 15:06:07 -0800
commit1a8fece443513d63fd9b3942a8fa59646ab7cd0e (patch)
tree9eef8bae21adb84f92e5187086795db2a19cbe3f
parent919d4646add6bddfc1c9b6e06198db4726d4eed4 (diff)
Added AccessPoint cache integration for Passpoint networks
This is needed since WifiSettings does not update an AP from WifiTracker if the AP key matches, resulting in WifiSettings having a stale AP reference if the AP is not cached on the WifiTracker side. Tracking bug for adding robolectric tests: b/122849296 Bug: 118705403 Test: manual, build and check if verbose scan list updates Change-Id: I5ffcb186047fb38df53a8c5b877d6e4f432f1417
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java2
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java50
2 files changed, 32 insertions, 20 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index e2013dff8663..27dc628ac094 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -632,7 +632,7 @@ public class AccessPoint implements Comparable<AccessPoint> {
public static String getKey(OsuProvider provider) {
return new StringBuilder()
.append(KEY_PREFIX_OSU)
- .append(provider.getOsuSsid())
+ .append(provider.getFriendlyName())
.append(',')
.append(provider.getServerUri()).toString();
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
index 58c93e4727eb..b9a5f2347f16 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
@@ -616,8 +616,8 @@ public class WifiTracker implements LifecycleObserver, OnStart, OnStop, OnDestro
}
}
- AccessPoint accessPoint = new AccessPoint(mContext, config);
- accessPoint.setScanResults(scanResults);
+ AccessPoint accessPoint =
+ getCachedOrCreatePasspoint(scanResults, cachedAccessPoints, config);
accessPoint.update(connectionConfig, mLastInfo, mLastNetworkInfo);
accessPoints.add(accessPoint);
}
@@ -689,15 +689,24 @@ public class WifiTracker implements LifecycleObserver, OnStart, OnStop, OnDestro
AccessPoint getCachedOrCreate(
List<ScanResult> scanResults,
List<AccessPoint> cache) {
- final int N = cache.size();
- for (int i = 0; i < N; i++) {
- if (cache.get(i).getKey().equals(AccessPoint.getKey(scanResults.get(0)))) {
- AccessPoint ret = cache.remove(i);
- ret.setScanResults(scanResults);
- return ret;
- }
+ AccessPoint accessPoint = getCachedByKey(cache, AccessPoint.getKey(scanResults.get(0)));
+ if (accessPoint == null) {
+ accessPoint = new AccessPoint(mContext, scanResults);
+ } else {
+ accessPoint.setScanResults(scanResults);
+ }
+ return accessPoint;
+ }
+
+ private AccessPoint getCachedOrCreatePasspoint(
+ List<ScanResult> scanResults,
+ List<AccessPoint> cache,
+ WifiConfiguration config) {
+ AccessPoint accessPoint = getCachedByKey(cache, AccessPoint.getKey(config));
+ if (accessPoint == null) {
+ accessPoint = new AccessPoint(mContext, config);
}
- final AccessPoint accessPoint = new AccessPoint(mContext, scanResults);
+ accessPoint.setScanResults(scanResults);
return accessPoint;
}
@@ -705,21 +714,24 @@ public class WifiTracker implements LifecycleObserver, OnStart, OnStop, OnDestro
List<ScanResult> scanResults,
List<AccessPoint> cache,
OsuProvider provider) {
- AccessPoint matchedAccessPoint = null;
+ AccessPoint accessPoint = getCachedByKey(cache, AccessPoint.getKey(provider));
+ if (accessPoint == null) {
+ accessPoint = new AccessPoint(mContext, provider);
+ }
+ accessPoint.setScanResults(scanResults);
+ return accessPoint;
+ }
+
+ private AccessPoint getCachedByKey(List<AccessPoint> cache, String key) {
ListIterator<AccessPoint> lit = cache.listIterator();
while (lit.hasNext()) {
AccessPoint currentAccessPoint = lit.next();
- if (currentAccessPoint.getKey().equals(AccessPoint.getKey(provider))) {
+ if (currentAccessPoint.getKey().equals(key)) {
lit.remove();
- matchedAccessPoint = currentAccessPoint;
- break;
+ return currentAccessPoint;
}
}
- if (matchedAccessPoint == null) {
- matchedAccessPoint = new AccessPoint(mContext, provider);
- }
- matchedAccessPoint.setScanResults(scanResults);
- return matchedAccessPoint;
+ return null;
}
private void updateNetworkInfo(NetworkInfo networkInfo) {