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