16a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpackage com.android.server.wifi.anqp; 26a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 36a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.net.ProtocolException; 46a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.nio.ByteBuffer; 56a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.nio.charset.StandardCharsets; 66a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.Locale; 76a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 86a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport static com.android.server.wifi.anqp.Constants.SHORT_MASK; 96a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 106a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist/** 116a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * The Icons available OSU Providers sub field, as specified in 126a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * Wi-Fi Alliance Hotspot 2.0 (Release 2) Technical Specification - Version 5.00, 136a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * section 4.8.1.4 146a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist */ 156a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpublic class IconInfo { 166a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final int mWidth; 176a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final int mHeight; 181d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist private final String mLanguage; 196a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final String mIconType; 206a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final String mFileName; 216a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 226a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public IconInfo(ByteBuffer payload) throws ProtocolException { 236a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (payload.remaining() < 9) { 246a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist throw new ProtocolException("Truncated icon meta data"); 256a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 266a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 276a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mWidth = payload.getShort() & SHORT_MASK; 286a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mHeight = payload.getShort() & SHORT_MASK; 291d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist mLanguage = Constants.getTrimmedString(payload, 301d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist Constants.LANG_CODE_LENGTH, StandardCharsets.US_ASCII); 316a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mIconType = Constants.getPrefixedString(payload, 1, StandardCharsets.US_ASCII); 326a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mFileName = Constants.getPrefixedString(payload, 1, StandardCharsets.UTF_8); 336a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 346a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 356a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public int getWidth() { 366a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return mWidth; 376a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 386a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 396a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public int getHeight() { 406a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return mHeight; 416a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 426a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 431d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public String getLanguage() { 441d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist return mLanguage; 456a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 466a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 476a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public String getIconType() { 486a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return mIconType; 496a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 506a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 516a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public String getFileName() { 526a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return mFileName; 536a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 546a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 556a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist @Override 561d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public boolean equals(Object thatObject) { 571d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist if (this == thatObject) { 581d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist return true; 591d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist } 601d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist if (thatObject == null || getClass() != thatObject.getClass()) { 611d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist return false; 621d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist } 631d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist 641d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist IconInfo that = (IconInfo) thatObject; 651d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist return mHeight == that.mHeight && 661d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist mWidth == that.mWidth && 671d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist mFileName.equals(that.mFileName) && 681d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist mIconType.equals(that.mIconType) && 691d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist mLanguage.equals(that.mLanguage); 701d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist } 711d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist 721d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist @Override 731d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public int hashCode() { 741d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist int result = mWidth; 751d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist result = 31 * result + mHeight; 761d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist result = 31 * result + mLanguage.hashCode(); 771d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist result = 31 * result + mIconType.hashCode(); 781d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist result = 31 * result + mFileName.hashCode(); 791d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist return result; 801d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist } 811d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist 821d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist @Override 836a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public String toString() { 846a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return "IconInfo{" + 851d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist "Width=" + mWidth + 861d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist ", Height=" + mHeight + 871d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist ", Language=" + mLanguage + 881d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist ", IconType='" + mIconType + '\'' + 891d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist ", FileName='" + mFileName + '\'' + 906a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist '}'; 916a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 926a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist} 93