18ca4ac971a9b862fbd69c57af3a3c0029a6b9f4dPeter Qiupackage com.android.server.wifi.hotspot2.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 88ca4ac971a9b862fbd69c57af3a3c0029a6b9f4dPeter Qiuimport static com.android.server.wifi.hotspot2.anqp.Constants.SHORT_MASK; 96a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 10fa04a81daf829e6e5c099c9a249b8dd8dd112102Peter Qiuimport com.android.server.wifi.ByteBufferReader; 11fa04a81daf829e6e5c099c9a249b8dd8dd112102Peter Qiu 126a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist/** 136a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * The Icons available OSU Providers sub field, as specified in 146a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * Wi-Fi Alliance Hotspot 2.0 (Release 2) Technical Specification - Version 5.00, 156a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * section 4.8.1.4 166a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist */ 176a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpublic class IconInfo { 186a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final int mWidth; 196a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final int mHeight; 201d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist private final String mLanguage; 216a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final String mIconType; 226a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final String mFileName; 236a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 246a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public IconInfo(ByteBuffer payload) throws ProtocolException { 256a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (payload.remaining() < 9) { 266a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist throw new ProtocolException("Truncated icon meta data"); 276a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 286a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 296a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mWidth = payload.getShort() & SHORT_MASK; 306a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mHeight = payload.getShort() & SHORT_MASK; 31fa04a81daf829e6e5c099c9a249b8dd8dd112102Peter Qiu mLanguage = ByteBufferReader.readString( 32fa04a81daf829e6e5c099c9a249b8dd8dd112102Peter Qiu payload, Constants.LANG_CODE_LENGTH, StandardCharsets.US_ASCII).trim(); 33fa04a81daf829e6e5c099c9a249b8dd8dd112102Peter Qiu mIconType = ByteBufferReader.readStringWithByteLength(payload, StandardCharsets.US_ASCII); 34fa04a81daf829e6e5c099c9a249b8dd8dd112102Peter Qiu mFileName = ByteBufferReader.readStringWithByteLength(payload, StandardCharsets.UTF_8); 356a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 366a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 376a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public int getWidth() { 386a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return mWidth; 396a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 406a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 416a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public int getHeight() { 426a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return mHeight; 436a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 446a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 451d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public String getLanguage() { 461d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist return mLanguage; 476a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 486a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 496a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public String getIconType() { 506a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return mIconType; 516a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 526a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 536a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public String getFileName() { 546a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return mFileName; 556a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 566a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 576a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist @Override 581d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public boolean equals(Object thatObject) { 591d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist if (this == thatObject) { 601d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist return true; 611d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist } 621d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist if (thatObject == null || getClass() != thatObject.getClass()) { 631d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist return false; 641d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist } 651d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist 661d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist IconInfo that = (IconInfo) thatObject; 671d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist return mHeight == that.mHeight && 681d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist mWidth == that.mWidth && 691d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist mFileName.equals(that.mFileName) && 701d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist mIconType.equals(that.mIconType) && 711d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist mLanguage.equals(that.mLanguage); 721d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist } 731d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist 741d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist @Override 751d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public int hashCode() { 761d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist int result = mWidth; 771d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist result = 31 * result + mHeight; 781d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist result = 31 * result + mLanguage.hashCode(); 791d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist result = 31 * result + mIconType.hashCode(); 801d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist result = 31 * result + mFileName.hashCode(); 811d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist return result; 821d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist } 831d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist 841d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist @Override 856a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public String toString() { 866a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return "IconInfo{" + 871d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist "Width=" + mWidth + 881d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist ", Height=" + mHeight + 891d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist ", Language=" + mLanguage + 901d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist ", IconType='" + mIconType + '\'' + 911d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist ", FileName='" + mFileName + '\'' + 926a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist '}'; 936a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 946a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist} 95