ScanDetail.java revision 77f2b82a2e80af8da52c22d69a76def6d4209757
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 mMatches = null; 30 } 31 32 private ScanDetail(ScanResult scanResult, NetworkDetail networkDetail, 33 Map<HomeSP, PasspointMatch> matches) { 34 mScanResult = scanResult; 35 mNetworkDetail = networkDetail; 36 mMatches = matches; 37 } 38 39 public ScanDetail score(Map<HomeSP, PasspointMatch> matches) { 40 return new ScanDetail(mScanResult, mNetworkDetail, matches); 41 } 42 43 public void updateResults(int level, WifiSsid wssid, String ssid, 44 String flags, int freq, long tsf) { 45 mScanResult.level = level; 46 mScanResult.wifiSsid = wssid; 47 // Keep existing API 48 mScanResult.SSID = ssid; 49 mScanResult.capabilities = flags; 50 mScanResult.frequency = freq; 51 mScanResult.timestamp = tsf; 52 mScanResult.seen = System.currentTimeMillis(); 53 } 54 55 public void propagateANQPInfo(Map<Constants.ANQPElementType, ANQPElement> anqpElements) { 56 mNetworkDetail = mNetworkDetail.complete(anqpElements); 57 ANQPElement nameElement = anqpElements.get(Constants.ANQPElementType.HSFriendlyName); 58 // !!! Match with language 59 /* 60 if (nameElement != null) { 61 mScanResult.friendlyName = 62 (((HSFriendlyNameElement)nameElement).getNames().get(0).getText()); 63 } 64 else { 65 nameElement = anqpElements.get(Constants.ANQPElementType.ANQPVenueName); 66 if (nameElement != null) { 67 mScanResult.friendlyName = 68 (((VenueNameElement)nameElement).getNames().get(0).getText()); 69 } 70 } 71 */ 72 } 73 74 public ScanResult getScanResult() { 75 return mScanResult; 76 } 77 78 public NetworkDetail getNetworkDetail() { 79 return mNetworkDetail; 80 } 81 82 public String getSSID() { 83 return mNetworkDetail.getSSID(); 84 } 85 86 public String getBSSIDString() { 87 return mNetworkDetail.getBSSIDString(); 88 } 89 90 public List<PasspointMatchInfo> getMatchList() { 91 if (mMatches == null || mMatches.isEmpty()) { 92 return null; 93 } 94 95 List<PasspointMatchInfo> list = new ArrayList<>(); 96 for (Map.Entry<HomeSP, PasspointMatch> entry : mMatches.entrySet()) { 97 new PasspointMatchInfo(entry.getValue(), mNetworkDetail, entry.getKey()); 98 } 99 return list; 100 } 101} 102