• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.bluetooth.client.map;
18 import android.bluetooth.client.map.utils.ObexTime;
19 
20 import org.json.JSONException;
21 import org.json.JSONObject;
22 
23 import java.math.BigInteger;
24 import java.util.Date;
25 import java.util.HashMap;
26 
27 /**
28  * Object representation of message received in messages listing
29  * <p>
30  * This object will be received in
31  * {@link BluetoothMasClient#EVENT_GET_MESSAGES_LISTING} callback message.
32  */
33 public class BluetoothMapMessage {
34 
35     private final String mHandle;
36 
37     private final String mSubject;
38 
39     private final Date mDateTime;
40 
41     private final String mSenderName;
42 
43     private final String mSenderAddressing;
44 
45     private final String mReplytoAddressing;
46 
47     private final String mRecipientName;
48 
49     private final String mRecipientAddressing;
50 
51     private final Type mType;
52 
53     private final int mSize;
54 
55     private final boolean mText;
56 
57     private final ReceptionStatus mReceptionStatus;
58 
59     private final int mAttachmentSize;
60 
61     private final boolean mPriority;
62 
63     private final boolean mRead;
64 
65     private final boolean mSent;
66 
67     private final boolean mProtected;
68 
69     public enum Type {
70         UNKNOWN, EMAIL, SMS_GSM, SMS_CDMA, MMS
71     };
72 
73     public enum ReceptionStatus {
74         UNKNOWN, COMPLETE, FRACTIONED, NOTIFICATION
75     }
76 
BluetoothMapMessage(HashMap<String, String> attrs)77     BluetoothMapMessage(HashMap<String, String> attrs) throws IllegalArgumentException {
78         int size;
79 
80         try {
81             /* just to validate */
82             new BigInteger(attrs.get("handle"), 16);
83 
84             mHandle = attrs.get("handle");
85         } catch (NumberFormatException e) {
86             /*
87              * handle MUST have proper value, if it does not then throw
88              * something here
89              */
90             throw new IllegalArgumentException(e);
91         }
92 
93         mSubject = attrs.get("subject");
94 
95         mDateTime = (new ObexTime(attrs.get("datetime"))).getTime();
96 
97         mSenderName = attrs.get("sender_name");
98 
99         mSenderAddressing = attrs.get("sender_addressing");
100 
101         mReplytoAddressing = attrs.get("replyto_addressing");
102 
103         mRecipientName = attrs.get("recipient_name");
104 
105         mRecipientAddressing = attrs.get("recipient_addressing");
106 
107         mType = strToType(attrs.get("type"));
108 
109         try {
110             size = Integer.parseInt(attrs.get("size"));
111         } catch (NumberFormatException e) {
112             size = 0;
113         }
114 
115         mSize = size;
116 
117         mText = yesnoToBoolean(attrs.get("text"));
118 
119         mReceptionStatus = strToReceptionStatus(attrs.get("reception_status"));
120 
121         try {
122             size = Integer.parseInt(attrs.get("attachment_size"));
123         } catch (NumberFormatException e) {
124             size = 0;
125         }
126 
127         mAttachmentSize = size;
128 
129         mPriority = yesnoToBoolean(attrs.get("priority"));
130 
131         mRead = yesnoToBoolean(attrs.get("read"));
132 
133         mSent = yesnoToBoolean(attrs.get("sent"));
134 
135         mProtected = yesnoToBoolean(attrs.get("protected"));
136     }
137 
yesnoToBoolean(String yesno)138     private boolean yesnoToBoolean(String yesno) {
139         return "yes".equals(yesno);
140     }
141 
strToType(String s)142     private Type strToType(String s) {
143         if ("EMAIL".equals(s)) {
144             return Type.EMAIL;
145         } else if ("SMS_GSM".equals(s)) {
146             return Type.SMS_GSM;
147         } else if ("SMS_CDMA".equals(s)) {
148             return Type.SMS_CDMA;
149         } else if ("MMS".equals(s)) {
150             return Type.MMS;
151         }
152 
153         return Type.UNKNOWN;
154     }
155 
strToReceptionStatus(String s)156     private ReceptionStatus strToReceptionStatus(String s) {
157         if ("complete".equals(s)) {
158             return ReceptionStatus.COMPLETE;
159         } else if ("fractioned".equals(s)) {
160             return ReceptionStatus.FRACTIONED;
161         } else if ("notification".equals(s)) {
162             return ReceptionStatus.NOTIFICATION;
163         }
164 
165         return ReceptionStatus.UNKNOWN;
166     }
167 
168     @Override
toString()169     public String toString() {
170         JSONObject json = new JSONObject();
171 
172         try {
173             json.put("handle", mHandle);
174             json.put("subject", mSubject);
175             json.put("datetime", mDateTime);
176             json.put("sender_name", mSenderName);
177             json.put("sender_addressing", mSenderAddressing);
178             json.put("replyto_addressing", mReplytoAddressing);
179             json.put("recipient_name", mRecipientName);
180             json.put("recipient_addressing", mRecipientAddressing);
181             json.put("type", mType);
182             json.put("size", mSize);
183             json.put("text", mText);
184             json.put("reception_status", mReceptionStatus);
185             json.put("attachment_size", mAttachmentSize);
186             json.put("priority", mPriority);
187             json.put("read", mRead);
188             json.put("sent", mSent);
189             json.put("protected", mProtected);
190         } catch (JSONException e) {
191             // do nothing
192         }
193 
194         return json.toString();
195     }
196 
197     /**
198      * @return value corresponding to <code>handle</code> parameter in MAP
199      *         specification
200      */
getHandle()201     public String getHandle() {
202         return mHandle;
203     }
204 
205     /**
206      * @return value corresponding to <code>subject</code> parameter in MAP
207      *         specification
208      */
getSubject()209     public String getSubject() {
210         return mSubject;
211     }
212 
213     /**
214      * @return <code>Date</code> object corresponding to <code>datetime</code>
215      *         parameter in MAP specification
216      */
getDateTime()217     public Date getDateTime() {
218         return mDateTime;
219     }
220 
221     /**
222      * @return value corresponding to <code>sender_name</code> parameter in MAP
223      *         specification
224      */
getSenderName()225     public String getSenderName() {
226         return mSenderName;
227     }
228 
229     /**
230      * @return value corresponding to <code>sender_addressing</code> parameter
231      *         in MAP specification
232      */
getSenderAddressing()233     public String getSenderAddressing() {
234         return mSenderAddressing;
235     }
236 
237     /**
238      * @return value corresponding to <code>replyto_addressing</code> parameter
239      *         in MAP specification
240      */
getReplytoAddressing()241     public String getReplytoAddressing() {
242         return mReplytoAddressing;
243     }
244 
245     /**
246      * @return value corresponding to <code>recipient_name</code> parameter in
247      *         MAP specification
248      */
getRecipientName()249     public String getRecipientName() {
250         return mRecipientName;
251     }
252 
253     /**
254      * @return value corresponding to <code>recipient_addressing</code>
255      *         parameter in MAP specification
256      */
getRecipientAddressing()257     public String getRecipientAddressing() {
258         return mRecipientAddressing;
259     }
260 
261     /**
262      * @return {@link Type} object corresponding to <code>type</code> parameter
263      *         in MAP specification
264      */
getType()265     public Type getType() {
266         return mType;
267     }
268 
269     /**
270      * @return value corresponding to <code>size</code> parameter in MAP
271      *         specification
272      */
getSize()273     public int getSize() {
274         return mSize;
275     }
276 
277     /**
278      * @return {@link .ReceptionStatus} object corresponding to
279      *         <code>reception_status</code> parameter in MAP specification
280      */
getReceptionStatus()281     public ReceptionStatus getReceptionStatus() {
282         return mReceptionStatus;
283     }
284 
285     /**
286      * @return value corresponding to <code>attachment_size</code> parameter in
287      *         MAP specification
288      */
getAttachmentSize()289     public int getAttachmentSize() {
290         return mAttachmentSize;
291     }
292 
293     /**
294      * @return value corresponding to <code>text</code> parameter in MAP
295      *         specification
296      */
isText()297     public boolean isText() {
298         return mText;
299     }
300 
301     /**
302      * @return value corresponding to <code>priority</code> parameter in MAP
303      *         specification
304      */
isPriority()305     public boolean isPriority() {
306         return mPriority;
307     }
308 
309     /**
310      * @return value corresponding to <code>read</code> parameter in MAP
311      *         specification
312      */
isRead()313     public boolean isRead() {
314         return mRead;
315     }
316 
317     /**
318      * @return value corresponding to <code>sent</code> parameter in MAP
319      *         specification
320      */
isSent()321     public boolean isSent() {
322         return mSent;
323     }
324 
325     /**
326      * @return value corresponding to <code>protected</code> parameter in MAP
327      *         specification
328      */
isProtected()329     public boolean isProtected() {
330         return mProtected;
331     }
332 }
333