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