summaryrefslogtreecommitdiff
path: root/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
diff options
context:
space:
mode:
Diffstat (limited to 'libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java')
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java44
1 files changed, 33 insertions, 11 deletions
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
index 21d3f2c27..e452003f7 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
@@ -61,6 +61,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -217,8 +218,11 @@ public class WifiPickerTracker extends BaseWifiTracker {
updateStandardWifiEntryConfigs(mWifiManager.getConfiguredNetworks());
}
updatePasspointWifiEntryConfigs(mWifiManager.getPasspointConfigurations());
- updateStandardWifiEntryScans(mScanResultUpdater.getScanResults());
- updatePasspointWifiEntryScans(mScanResultUpdater.getScanResults());
+ // Update scans since config changes may result in different entries being shown.
+ final List<ScanResult> scanResults = mScanResultUpdater.getScanResults();
+ updateStandardWifiEntryScans(scanResults);
+ updatePasspointWifiEntryScans(scanResults);
+ updateOsuWifiEntryScans(scanResults);
notifyOnNumSavedNetworksChanged();
notifyOnNumSavedSubscriptionsChanged();
updateWifiEntries();
@@ -272,6 +276,13 @@ public class WifiPickerTracker extends BaseWifiTracker {
|| connectedState == CONNECTED_STATE_CONNECTING;
}).findAny().orElse(null /* other */);
}
+ if (mConnectedWifiEntry == null) {
+ mConnectedWifiEntry = mOsuWifiEntryCache.values().stream().filter(entry -> {
+ final @WifiEntry.ConnectedState int connectedState = entry.getConnectedState();
+ return connectedState == CONNECTED_STATE_CONNECTED
+ || connectedState == CONNECTED_STATE_CONNECTING;
+ }).findAny().orElse(null /* other */);
+ }
Collections.sort(mWifiEntries);
if (isVerboseLoggingEnabled()) {
Log.v(TAG, "Connected WifiEntry: " + mConnectedWifiEntry);
@@ -360,18 +371,26 @@ public class WifiPickerTracker extends BaseWifiTracker {
Map<OsuProvider, List<ScanResult>> osuProviderToScans =
mWifiManager.getMatchingOsuProviders(scanResults);
- for (OsuProvider osuProvider : osuProviderToScans.keySet()) {
- final String key = osuProviderToOsuWifiEntryKey(osuProvider);
- if (!mOsuWifiEntryCache.containsKey(key)) {
- mOsuWifiEntryCache.put(key, new OsuWifiEntry(mContext,
- mMainHandler, osuProvider, mWifiManager, false /* forSavedNetworksPage */));
- }
- mOsuWifiEntryCache.get(key).updateScanResultInfo(osuProviderToScans.get(osuProvider));
+ Set<OsuProvider> alreadyProvisioned =
+ mWifiManager.getMatchingPasspointConfigsForOsuProviders(osuProviderToScans.keySet())
+ .keySet();
+ // Update each OsuWifiEntry with new scans (or empty scans).
+ for (OsuWifiEntry entry : mOsuWifiEntryCache.values()) {
+ entry.updateScanResultInfo(osuProviderToScans.remove(entry.getOsuProvider()));
}
- // Remove entries that are now unreachable
+ // Create a new entry for each OsuProvider not already matched to an OsuWifiEntry
+ for (OsuProvider provider : osuProviderToScans.keySet()) {
+ OsuWifiEntry newEntry = new OsuWifiEntry(mContext, mMainHandler, provider, mWifiManager,
+ false /* forSavedNetworksPage */);
+ newEntry.updateScanResultInfo(osuProviderToScans.get(provider));
+ mOsuWifiEntryCache.put(osuProviderToOsuWifiEntryKey(provider), newEntry);
+ }
+
+ // Remove entries that are now unreachable or already provisioned
mOsuWifiEntryCache.entrySet()
- .removeIf(entry -> entry.getValue().getLevel() == WIFI_LEVEL_UNREACHABLE);
+ .removeIf(entry -> entry.getValue().getLevel() == WIFI_LEVEL_UNREACHABLE
+ || alreadyProvisioned.contains(entry.getValue().getOsuProvider()));
}
/**
@@ -487,6 +506,9 @@ public class WifiPickerTracker extends BaseWifiTracker {
for (WifiEntry entry : mPasspointWifiEntryCache.values()) {
entry.updateConnectionInfo(wifiInfo, networkInfo);
}
+ for (WifiEntry entry : mOsuWifiEntryCache.values()) {
+ entry.updateConnectionInfo(wifiInfo, networkInfo);
+ }
}
/**