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