diff options
Diffstat (limited to 'libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java')
-rw-r--r-- | libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java | 44 |
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); + } } /** |