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