ScanDetail.java revision b151395e1d4de62ea8a9254e69e1878d3d1cde28
1package com.android.server.wifi; 2 3import android.net.wifi.ScanResult; 4import android.net.wifi.WifiSsid; 5 6import com.android.server.wifi.anqp.ANQPElement; 7import com.android.server.wifi.anqp.Constants; 8import com.android.server.wifi.anqp.HSFriendlyNameElement; 9import com.android.server.wifi.anqp.VenueNameElement; 10import com.android.server.wifi.hotspot2.NetworkDetail; 11import com.android.server.wifi.hotspot2.PasspointMatch; 12import com.android.server.wifi.hotspot2.PasspointMatchInfo; 13import com.android.server.wifi.hotspot2.pps.HomeSP; 14 15import java.util.ArrayList; 16import java.util.List; 17import java.util.Map; 18 19public class ScanDetail { 20 private final ScanResult mScanResult; 21 private volatile NetworkDetail mNetworkDetail; 22 private final Map<HomeSP, PasspointMatch> mMatches; 23 24 public ScanDetail(NetworkDetail networkDetail, WifiSsid wifiSsid, String BSSID, 25 String caps, int level, int frequency, long tsf) { 26 mNetworkDetail = networkDetail; 27 mScanResult = new ScanResult(wifiSsid, BSSID, caps, level, frequency, tsf ); 28 mScanResult.seen = System.currentTimeMillis(); 29 mScanResult.channelWidth = networkDetail.getChannelWidth(); 30 mScanResult.centerFreq0 = networkDetail.getCenterfreq0(); 31 mScanResult.centerFreq1 = networkDetail.getCenterfreq1(); 32 mScanResult.is80211McRTTResponder = networkDetail.is80211McResponderSupport(); 33 mMatches = null; 34 } 35 36 private ScanDetail(ScanResult scanResult, NetworkDetail networkDetail, 37 Map<HomeSP, PasspointMatch> matches) { 38 mScanResult = scanResult; 39 mNetworkDetail = networkDetail; 40 mMatches = matches; 41 } 42 43 public ScanDetail score(Map<HomeSP, PasspointMatch> matches) { 44 return new ScanDetail(mScanResult, mNetworkDetail, matches); 45 } 46 47 public void updateResults(NetworkDetail networkDetail, int level, WifiSsid wssid, String ssid, 48 String flags, int freq, long tsf) { 49 mScanResult.level = level; 50 mScanResult.wifiSsid = wssid; 51 // Keep existing API 52 mScanResult.SSID = ssid; 53 mScanResult.capabilities = flags; 54 mScanResult.frequency = freq; 55 mScanResult.timestamp = tsf; 56 mScanResult.seen = System.currentTimeMillis(); 57 mScanResult.channelWidth = networkDetail.getChannelWidth(); 58 mScanResult.centerFreq0 = networkDetail.getCenterfreq0(); 59 mScanResult.centerFreq1 = networkDetail.getCenterfreq1(); 60 mScanResult.is80211McRTTResponder = networkDetail.is80211McResponderSupport(); 61 mScanResult.passpointNetwork = networkDetail.isInterworking(); 62 } 63 64 public void propagateANQPInfo(Map<Constants.ANQPElementType, ANQPElement> anqpElements) { 65 mNetworkDetail = mNetworkDetail.complete(anqpElements); 66 HSFriendlyNameElement fne = (HSFriendlyNameElement)anqpElements.get(Constants 67 .ANQPElementType.HSFriendlyName); 68 // !!! Match with language 69 if (fne != null && !fne.getNames().isEmpty()) { 70 mScanResult.venueName = fne.getNames().get(0).getText(); 71 } else { 72 VenueNameElement vne = 73 (((VenueNameElement)anqpElements.get(Constants.ANQPElementType.ANQPVenueName))); 74 if (vne != null && !vne.getNames().isEmpty()) { 75 mScanResult.venueName = vne.getNames().get(0).getText(); 76 } 77 } 78 } 79 80 public ScanResult getScanResult() { 81 return mScanResult; 82 } 83 84 public NetworkDetail getNetworkDetail() { 85 return mNetworkDetail; 86 } 87 88 public String getSSID() { 89 return mNetworkDetail.getSSID(); 90 } 91 92 public String getBSSIDString() { 93 return mNetworkDetail.getBSSIDString(); 94 } 95 96 public List<PasspointMatchInfo> getMatchList() { 97 if (mMatches == null || mMatches.isEmpty()) { 98 return null; 99 } 100 101 List<PasspointMatchInfo> list = new ArrayList<>(); 102 for (Map.Entry<HomeSP, PasspointMatch> entry : mMatches.entrySet()) { 103 new PasspointMatchInfo(entry.getValue(), this, entry.getKey()); 104 } 105 return list; 106 } 107} 108