• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright (C) 2013 Samsung System LSI
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *      http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 package com.android.bluetooth.map;
16 
17 import java.io.IOException;
18 
19 import java.text.SimpleDateFormat;
20 import java.util.Date;
21 
22 import org.xmlpull.v1.XmlSerializer;
23 
24 import com.android.bluetooth.map.BluetoothMapUtils.TYPE;
25 import com.android.bluetooth.util.Interop;
26 
27 public class BluetoothMapMessageListingElement
28     implements Comparable<BluetoothMapMessageListingElement> {
29 
30     private static final String TAG = "BluetoothMapMessageListingElement";
31     private static final boolean D = false;
32     private static final boolean V = false;
33 
34     private long mCpHandle = 0; /* The content provider handle - without type information */
35     private String mSubject = null;
36     private long mDateTime = 0;
37     private String mSenderName = null;
38     private String mSenderAddressing = null;
39     private String mReplytoAddressing = null;
40     private String mRecipientName = null;
41     private String mRecipientAddressing = null;
42     private TYPE mType = null;
43     private boolean mMsgTypeAppParamSet = false;
44     private int mSize = -1;
45     private String mText = null;
46     private String mReceptionStatus = null;
47     private String mDeliveryStatus = null;
48     private int mAttachmentSize = -1;
49     private String mPriority = null;
50     private boolean mRead = false;
51     private String mSent = null;
52     private String mProtect = null;
53     private String mFolderType = null;
54     private String mThreadId = null;
55     private String mThreadName = null;
56     private String mAttachmentMimeTypes = null;
57 
58     private boolean mReportRead = false;
59     private int mCursorIndex = 0;
60 
getCursorIndex()61     public int getCursorIndex() {
62         return mCursorIndex;
63     }
64 
setCursorIndex(int cursorIndex)65     public void setCursorIndex(int cursorIndex) {
66         this.mCursorIndex = cursorIndex;
67     }
68 
getHandle()69     public long getHandle() {
70         return mCpHandle;
71     }
72 
setHandle(long handle)73     public void setHandle(long handle) {
74         this.mCpHandle = handle;
75     }
76 
getDateTime()77     public long getDateTime() {
78         return mDateTime;
79     }
80 
getDateTimeString()81     public String getDateTimeString() {
82         /* TODO: if the feature bit mask of the client supports it, add the time-zone
83          *       (as for MSETime) */
84         SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd'T'HHmmss");
85         Date date = new Date(mDateTime);
86         return format.format(date); // Format to YYYYMMDDTHHMMSS local time
87     }
88 
setDateTime(long dateTime)89     public void setDateTime(long dateTime) {
90         this.mDateTime = dateTime;
91     }
92 
getSubject()93     public String getSubject() {
94         return mSubject;
95     }
96 
setSubject(String subject)97     public void setSubject(String subject) {
98         this.mSubject = subject;
99     }
100 
getSenderName()101     public String getSenderName() {
102         return mSenderName;
103     }
104 
setSenderName(String senderName)105     public void setSenderName(String senderName) {
106         this.mSenderName = senderName;
107     }
108 
getSenderAddressing()109     public String getSenderAddressing() {
110         return mSenderAddressing;
111     }
112 
setSenderAddressing(String senderAddressing)113     public void setSenderAddressing(String senderAddressing) {
114         this.mSenderAddressing = senderAddressing;
115     }
116 
getReplyToAddressing()117     public String getReplyToAddressing() {
118         return mReplytoAddressing;
119     }
120 
setReplytoAddressing(String replytoAddressing)121     public void setReplytoAddressing(String replytoAddressing) {
122         this.mReplytoAddressing = replytoAddressing;
123     }
124 
getRecipientName()125     public String getRecipientName() {
126         return mRecipientName;
127     }
128 
setRecipientName(String recipientName)129     public void setRecipientName(String recipientName) {
130         this.mRecipientName = recipientName;
131     }
132 
getRecipientAddressing()133     public String getRecipientAddressing() {
134         return mRecipientAddressing;
135     }
136 
setRecipientAddressing(String recipientAddressing)137     public void setRecipientAddressing(String recipientAddressing) {
138         this.mRecipientAddressing = recipientAddressing;
139     }
140 
getType()141     public TYPE getType() {
142         return mType;
143     }
144 
setType(TYPE type, boolean appParamSet)145     public void setType(TYPE type, boolean appParamSet) {
146         this.mMsgTypeAppParamSet = appParamSet;
147         this.mType = type;
148     }
149 
getSize()150     public int getSize() {
151         return mSize;
152     }
153 
setSize(int size)154     public void setSize(int size) {
155         this.mSize = size;
156     }
157 
getText()158     public String getText() {
159         return mText;
160     }
161 
setText(String text)162     public void setText(String text) {
163         this.mText = text;
164     }
165 
getReceptionStatus()166     public String getReceptionStatus() {
167         return mReceptionStatus;
168     }
169 
setReceptionStatus(String receptionStatus)170     public void setReceptionStatus(String receptionStatus) {
171         this.mReceptionStatus = receptionStatus;
172     }
173 
getDeliveryStatus()174     public String getDeliveryStatus() {
175         return mDeliveryStatus;
176     }
177 
setDeliveryStatus(String deliveryStatus)178     public void setDeliveryStatus(String deliveryStatus) {
179         this.mDeliveryStatus = deliveryStatus;
180     }
181 
getAttachmentSize()182     public int getAttachmentSize() {
183         return mAttachmentSize;
184     }
185 
setAttachmentSize(int attachmentSize)186     public void setAttachmentSize(int attachmentSize) {
187         this.mAttachmentSize = attachmentSize;
188     }
189 
getAttachmentMimeTypes()190     public String getAttachmentMimeTypes() {
191         return mAttachmentMimeTypes;
192     }
193 
setAttachmentMimeTypes(String attachmentMimeTypes)194     public void setAttachmentMimeTypes(String attachmentMimeTypes) {
195         this.mAttachmentMimeTypes = attachmentMimeTypes;
196     }
197 
getPriority()198     public String getPriority() {
199         return mPriority;
200     }
201 
setPriority(String priority)202     public void setPriority(String priority) {
203         this.mPriority = priority;
204     }
205 
getRead()206     public String getRead() {
207         return (mRead?"yes":"no");
208     }
getReadBool()209     public boolean getReadBool() {
210         return mRead;
211     }
setRead(boolean read, boolean reportRead)212     public void setRead(boolean read, boolean reportRead) {
213         this.mRead = read;
214         this.mReportRead = reportRead;
215     }
216 
getSent()217     public String getSent() {
218         return mSent;
219     }
220 
setSent(String sent)221     public void setSent(String sent) {
222         this.mSent = sent;
223     }
224 
getProtect()225     public String getProtect() {
226         return mProtect;
227     }
228 
setProtect(String protect)229     public void setProtect(String protect) {
230         this.mProtect = protect;
231     }
232 
setThreadId(long threadId, TYPE type)233     public void setThreadId(long threadId, TYPE type) {
234         if(threadId != -1) {
235             this.mThreadId = BluetoothMapUtils.getMapConvoHandle(threadId, type);
236         }
237     }
238 
getThreadName()239     public String getThreadName() {
240         return mThreadName;
241     }
242 
setThreadName(String name)243     public void setThreadName(String name) {
244         this.mThreadName = name;
245     }
246 
getFolderType()247     public String getFolderType() {
248         return mFolderType;
249     }
250 
setFolderType(String folderType)251     public void setFolderType(String folderType) {
252         this.mFolderType = folderType;
253     }
254 
compareTo(BluetoothMapMessageListingElement e)255     public int compareTo(BluetoothMapMessageListingElement e) {
256         if (this.mDateTime < e.mDateTime) {
257             return 1;
258         } else if (this.mDateTime > e.mDateTime) {
259             return -1;
260         } else {
261             return 0;
262         }
263     }
264 
265     /* Encode the MapMessageListingElement into the StringBuilder reference.
266      * */
encode(XmlSerializer xmlMsgElement, boolean includeThreadId)267     public void encode(XmlSerializer xmlMsgElement, boolean includeThreadId)
268             throws IllegalArgumentException, IllegalStateException, IOException
269     {
270             // contruct the XML tag for a single msg in the msglisting
271             xmlMsgElement.startTag(null, "msg");
272             xmlMsgElement.attribute(null, "handle",
273                     BluetoothMapUtils.getMapHandle(mCpHandle, mType));
274             if(mSubject != null){
275                 String stripped = BluetoothMapUtils.stripInvalidChars(mSubject);
276 
277                 if (Interop.matchByAddress(Interop.INTEROP_MAP_ASCIIONLY,
278                         BluetoothMapService.getRemoteDevice().getAddress())) {
279                     stripped = stripped.replaceAll("[\\P{ASCII}&\"><]", "");
280                     if (stripped.isEmpty()) stripped = "---";
281                 }
282 
283                 xmlMsgElement.attribute(null, "subject",
284                         stripped.substring(0,  stripped.length() < 256 ? stripped.length() : 256));
285             }
286 
287             if(mDateTime != 0)
288                 xmlMsgElement.attribute(null, "datetime", this.getDateTimeString());
289             if(mSenderName != null)
290                 xmlMsgElement.attribute(null, "sender_name",
291                         BluetoothMapUtils.stripInvalidChars(mSenderName));
292             if(mSenderAddressing != null)
293                 xmlMsgElement.attribute(null, "sender_addressing", mSenderAddressing);
294             if(mReplytoAddressing != null)
295                 xmlMsgElement.attribute(null, "replyto_addressing",mReplytoAddressing);
296             if(mRecipientName != null)
297                 xmlMsgElement.attribute(null, "recipient_name",
298                         BluetoothMapUtils.stripInvalidChars(mRecipientName));
299             if(mRecipientAddressing != null)
300                 xmlMsgElement.attribute(null, "recipient_addressing", mRecipientAddressing);
301             /* Avoid NPE for possible "null" value of mType */
302             if(mMsgTypeAppParamSet == true && mType != null)
303                 xmlMsgElement.attribute(null, "type", mType.name());
304             if(mSize != -1)
305                 xmlMsgElement.attribute(null, "size", Integer.toString(mSize));
306             if(mText != null)
307                 xmlMsgElement.attribute(null, "text", mText);
308             if(mReceptionStatus != null)
309                 xmlMsgElement.attribute(null, "reception_status", mReceptionStatus);
310             if(mDeliveryStatus != null)
311                 xmlMsgElement.attribute(null, "delivery_status", mDeliveryStatus);
312             if(mAttachmentSize != -1)
313                 xmlMsgElement.attribute(null, "attachment_size",
314                         Integer.toString(mAttachmentSize));
315             if(mAttachmentMimeTypes != null)
316                 xmlMsgElement.attribute(null, "attachment_mime_types", mAttachmentMimeTypes);
317             if(mPriority != null)
318                 xmlMsgElement.attribute(null, "priority", mPriority);
319             if(mReportRead)
320                 xmlMsgElement.attribute(null, "read", getRead());
321             if(mSent != null)
322                 xmlMsgElement.attribute(null, "sent", mSent);
323             if(mProtect != null)
324                 xmlMsgElement.attribute(null, "protected", mProtect);
325             if(mThreadId != null && includeThreadId == true)
326                 xmlMsgElement.attribute(null, "conversation_id", mThreadId);
327             if(mThreadName != null && includeThreadId == true)
328                 xmlMsgElement.attribute(null, "conversation_name", mThreadName);
329             if(mFolderType != null )
330                 xmlMsgElement.attribute(null, "folder_type", mFolderType);
331             xmlMsgElement.endTag(null, "msg");
332 
333     }
334 }
335 
336 
337