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