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