1ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpackage com.android.anqp; 2ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 3ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.net.ProtocolException; 4ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.nio.ByteBuffer; 5ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.nio.charset.StandardCharsets; 6ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 7ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport static com.android.anqp.Constants.SHORT_MASK; 8ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 9ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist/** 10ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist * The Icons available OSU Providers sub field, as specified in 11ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist * Wi-Fi Alliance Hotspot 2.0 (Release 2) Technical Specification - Version 5.00, 12ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist * section 4.8.1.4 13ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist */ 14ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpublic class IconInfo { 15ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final int mWidth; 16ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final int mHeight; 17ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final String mLanguage; 18ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final String mIconType; 19ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final String mFileName; 20ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 21ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public IconInfo(ByteBuffer payload) throws ProtocolException { 22ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist if (payload.remaining() < 9) { 23ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist throw new ProtocolException("Truncated icon meta data"); 24ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 25ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 26ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mWidth = payload.getShort() & SHORT_MASK; 27ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mHeight = payload.getShort() & SHORT_MASK; 28ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mLanguage = Constants.getTrimmedString(payload, 29ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist Constants.LANG_CODE_LENGTH, StandardCharsets.US_ASCII); 30ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mIconType = Constants.getPrefixedString(payload, 1, StandardCharsets.US_ASCII); 31ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mFileName = Constants.getPrefixedString(payload, 1, StandardCharsets.UTF_8); 32ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 33ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 34ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public int getWidth() { 35ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mWidth; 36ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 37ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 38ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public int getHeight() { 39ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mHeight; 40ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 41ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 42ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public String getLanguage() { 43ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mLanguage; 44ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 45ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 46ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public String getIconType() { 47ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mIconType; 48ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 49ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 50ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public String getFileName() { 51ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mFileName; 52ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 53ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 54ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist @Override 55ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public boolean equals(Object thatObject) { 56ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist if (this == thatObject) { 57ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return true; 58ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 59ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist if (thatObject == null || getClass() != thatObject.getClass()) { 60ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return false; 61ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 62ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 63ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist IconInfo that = (IconInfo) thatObject; 64ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mHeight == that.mHeight && 65ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mWidth == that.mWidth && 66ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mFileName.equals(that.mFileName) && 67ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mIconType.equals(that.mIconType) && 68ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mLanguage.equals(that.mLanguage); 69ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 70ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 71ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist @Override 72ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public int hashCode() { 73ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist int result = mWidth; 74ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist result = 31 * result + mHeight; 75ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist result = 31 * result + mLanguage.hashCode(); 76ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist result = 31 * result + mIconType.hashCode(); 77ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist result = 31 * result + mFileName.hashCode(); 78ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return result; 79ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 80ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 81ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist @Override 82ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public String toString() { 83ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return "IconInfo{" + 84ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist "Width=" + mWidth + 85ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist ", Height=" + mHeight + 86ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist ", Language=" + mLanguage + 87ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist ", IconType='" + mIconType + '\'' + 88ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist ", FileName='" + mFileName + '\'' + 89ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist '}'; 90ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 91ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist} 92