1ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpackage com.android.hotspot2.osu; 2ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 3ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport android.net.wifi.ScanResult; 4ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport android.util.Log; 5ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 6ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport com.android.anqp.HSIconFileElement; 7ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport com.android.anqp.I18Name; 8ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport com.android.anqp.IconInfo; 9ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport com.android.anqp.OSUProvider; 10ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport com.android.hotspot2.Utils; 11ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 12ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.ArrayList; 13ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.Collections; 14ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.HashSet; 15ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.List; 16ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.Locale; 17ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.Set; 18ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 19ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpublic class OSUInfo { 20ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public static final String GenericLocale = "zxx"; 21ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 22ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public enum IconStatus { 23ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist NotQueried, // 24ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist InProgress, // Query pending 25ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist NotAvailable, // Deterministically unavailable 26ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist Available // Icon data retrieved 27ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 28ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 29ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final long mBSSID; 30ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final long mHESSID; 31ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final int mAnqpDomID; 32ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final String mSSID; 33ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final String mAdvertisingSSID; 34ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final OSUProvider mOSUProvider; 35ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final int mOsuID; 36ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private long mOSUBssid; 37ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private IconStatus mIconStatus = IconStatus.NotQueried; 38ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private HSIconFileElement mIconFileElement; 39ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private IconInfo mIconInfo; 40ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 41ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public OSUInfo(ScanResult scanResult, String ssid, OSUProvider osuProvider, int osuID) { 42ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mOsuID = osuID; 43ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mBSSID = Utils.parseMac(scanResult.BSSID); 44ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mHESSID = scanResult.hessid; 45ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mAnqpDomID = scanResult.anqpDomainId; 46ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mAdvertisingSSID = scanResult.SSID; 47ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mSSID = ssid; 48ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mOSUProvider = osuProvider; 49ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 50ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 51ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public long getOSUBssid() { 52ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mOSUBssid; 53ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 54ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 55ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public void setOSUBssid(long OSUBssid) { 56ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mOSUBssid = OSUBssid; 57ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 58ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 59ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public long getHESSID() { 60ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mHESSID; 61ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 62ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 63ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public int getAnqpDomID() { 64ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mAnqpDomID; 65ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 66ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 67ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public String getAdvertisingSSID() { 68ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mAdvertisingSSID; 69ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 70ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 71ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public Set<Locale> getNameLocales() { 72ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist Set<Locale> locales = new HashSet<>(mOSUProvider.getNames().size()); 73ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist for (I18Name name : mOSUProvider.getNames()) { 74ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist locales.add(name.getLocale()); 75ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 76ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return locales; 77ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 78ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 79ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public Set<Locale> getServiceLocales() { 80ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist Set<Locale> locales = new HashSet<>(mOSUProvider.getServiceDescriptions().size()); 81ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist for (I18Name name : mOSUProvider.getServiceDescriptions()) { 82ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist locales.add(name.getLocale()); 83ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 84ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return locales; 85ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 86ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 87ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public Set<String> getIconLanguages() { 88ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist Set<String> locales = new HashSet<>(mOSUProvider.getIcons().size()); 89ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist for (IconInfo iconInfo : mOSUProvider.getIcons()) { 90ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist locales.add(iconInfo.getLanguage()); 91ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 92ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return locales; 93ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 94ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 95ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public String getName(Locale locale) { 96ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist List<ScoreEntry<String>> scoreList = new ArrayList<>(); 97ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist for (I18Name name : mOSUProvider.getNames()) { 98ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist if (locale == null || name.getLocale().equals(locale)) { 99ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return name.getText(); 100ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 101ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist scoreList.add(new ScoreEntry<String>(name.getText(), 102ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist languageScore(name.getLanguage(), locale))); 103ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 104ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist Collections.sort(scoreList); 105ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return scoreList.isEmpty() ? null : scoreList.iterator().next().getData(); 106ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 107ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 108ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public String getServiceDescription(Locale locale) { 109ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist List<ScoreEntry<String>> scoreList = new ArrayList<>(); 110ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist for (I18Name service : mOSUProvider.getServiceDescriptions()) { 111ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist if (locale == null || service.getLocale().equals(locale)) { 112ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return service.getText(); 113ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 114ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist scoreList.add(new ScoreEntry<>(service.getText(), 115ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist languageScore(service.getLanguage(), locale))); 116ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 117ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist Collections.sort(scoreList); 118ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return scoreList.isEmpty() ? null : scoreList.iterator().next().getData(); 119ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 120ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 121ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public int getOsuID() { 122ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mOsuID; 123ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 124ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 125ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public void setIconStatus(IconStatus iconStatus) { 126ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist synchronized (mOSUProvider) { 127ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mIconStatus = iconStatus; 128ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 129ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 130ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 131ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public IconStatus getIconStatus() { 132ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist synchronized (mOSUProvider) { 133ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mIconStatus; 134ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 135ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 136ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 137ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public HSIconFileElement getIconFileElement() { 138ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist synchronized (mOSUProvider) { 139ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mIconFileElement; 140ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 141ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 142ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 143ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public IconInfo getIconInfo() { 144ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist synchronized (mOSUProvider) { 145ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mIconInfo; 146ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 147ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 148ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 149ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public void setIconFileElement(HSIconFileElement iconFileElement, String fileName) { 150ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist synchronized (mOSUProvider) { 151ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mIconFileElement = iconFileElement; 152ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist for (IconInfo iconInfo : mOSUProvider.getIcons()) { 153ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist if (iconInfo.getFileName().equals(fileName)) { 154ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mIconInfo = iconInfo; 155ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist break; 156ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 157ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 158ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mIconStatus = IconStatus.Available; 159ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 160ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 161ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 162ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private static class ScoreEntry<T> implements Comparable<ScoreEntry> { 163ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final T mData; 164ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final int mScore; 165ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 166ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private ScoreEntry(T data, int score) { 167ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mData = data; 168ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mScore = score; 169ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 170ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 171ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public T getData() { 172ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mData; 173ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 174ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 175ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist @Override 176ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public int compareTo(ScoreEntry other) { 177ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return Integer.compare(mScore, other.mScore); 178ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 179ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 180ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 181ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public List<IconInfo> getIconInfo(Locale locale, Set<String> types, int width, int height) { 182ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist if (mOSUProvider.getIcons().isEmpty()) { 183ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return null; 184ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 185ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist Log.d(OSUManager.TAG, "Matching icons against " + locale 186ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist + ", types " + types + ", " + width + "*" + height); 187ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 188ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist List<ScoreEntry<IconInfo>> matches = new ArrayList<>(); 189ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist for (IconInfo iconInfo : mOSUProvider.getIcons()) { 190ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist Log.d(OSUManager.TAG, "Checking icon " + iconInfo.toString()); 191ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist if (!types.contains(iconInfo.getIconType())) { 192ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist continue; 193ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 194ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 195ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist int score = languageScore(iconInfo.getLanguage(), locale); 196ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist int delta = iconInfo.getWidth() - width; 197ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist // Best size score is 1024 for a exact match, i.e. 2048 if both sides match 198ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist if (delta >= 0) { 199ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist score += (256 - delta) * 4; // Prefer down-scaling 200ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } else { 201ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist score += 256 + delta; // Before up-scaling 202ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 203ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist delta = iconInfo.getHeight() - height; 204ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist if (delta >= 0) { 205ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist score += (256 - delta) * 4; 206ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } else { 207ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist score += 256 + delta; 208ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 209ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist matches.add(new ScoreEntry<>(iconInfo, score)); 210ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 211ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist if (matches.isEmpty()) { 212ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return Collections.emptyList(); 213ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 214ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist Collections.sort(matches); 215ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist List<IconInfo> icons = new ArrayList<>(matches.size()); 216ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist for (ScoreEntry<IconInfo> scoredIcon : matches) { 217ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist icons.add(scoredIcon.getData()); 218ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 219ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return icons; 220ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 221ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 222ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private static int languageScore(String language, Locale locale) { 223ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist if (language.length() == 3 && language.equalsIgnoreCase(locale.getISO3Language()) || 224ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist language.length() == 2 && language.equalsIgnoreCase(locale.getLanguage())) { 225ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return 4096; 226ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } else if (language.equalsIgnoreCase(GenericLocale)) { 227ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return 3072; 228ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } else if (language.equalsIgnoreCase("eng")) { 229ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return 2048; 230ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } else { 231ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return 1024; 232ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 233ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 234ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 235ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public long getBSSID() { 236ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mBSSID; 237ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 238ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 239ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public String getSSID() { 240ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mSSID; 241ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 242ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 243ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public OSUProvider getOSUProvider() { 244ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mOSUProvider; 245ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 246ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 247ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist @Override 248ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public String toString() { 249ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return String.format("OSU Info '%s' %012x -> %s, icon %s", 250ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mSSID, mBSSID, getServiceDescription(null), mIconStatus); 251ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 252ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist} 253