Home | History | Annotate | Download | only in map
      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 
     61     public int getCursorIndex() {
     62         return mCursorIndex;
     63     }
     64 
     65     public void setCursorIndex(int cursorIndex) {
     66         this.mCursorIndex = cursorIndex;
     67     }
     68 
     69     public long getHandle() {
     70         return mCpHandle;
     71     }
     72 
     73     public void setHandle(long handle) {
     74         this.mCpHandle = handle;
     75     }
     76 
     77     public long getDateTime() {
     78         return mDateTime;
     79     }
     80 
     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 
     89     public void setDateTime(long dateTime) {
     90         this.mDateTime = dateTime;
     91     }
     92 
     93     public String getSubject() {
     94         return mSubject;
     95     }
     96 
     97     public void setSubject(String subject) {
     98         this.mSubject = subject;
     99     }
    100 
    101     public String getSenderName() {
    102         return mSenderName;
    103     }
    104 
    105     public void setSenderName(String senderName) {
    106         this.mSenderName = senderName;
    107     }
    108 
    109     public String getSenderAddressing() {
    110         return mSenderAddressing;
    111     }
    112 
    113     public void setSenderAddressing(String senderAddressing) {
    114         this.mSenderAddressing = senderAddressing;
    115     }
    116 
    117     public String getReplyToAddressing() {
    118         return mReplytoAddressing;
    119     }
    120 
    121     public void setReplytoAddressing(String replytoAddressing) {
    122         this.mReplytoAddressing = replytoAddressing;
    123     }
    124 
    125     public String getRecipientName() {
    126         return mRecipientName;
    127     }
    128 
    129     public void setRecipientName(String recipientName) {
    130         this.mRecipientName = recipientName;
    131     }
    132 
    133     public String getRecipientAddressing() {
    134         return mRecipientAddressing;
    135     }
    136 
    137     public void setRecipientAddressing(String recipientAddressing) {
    138         this.mRecipientAddressing = recipientAddressing;
    139     }
    140 
    141     public TYPE getType() {
    142         return mType;
    143     }
    144 
    145     public void setType(TYPE type, boolean appParamSet) {
    146         this.mMsgTypeAppParamSet = appParamSet;
    147         this.mType = type;
    148     }
    149 
    150     public int getSize() {
    151         return mSize;
    152     }
    153 
    154     public void setSize(int size) {
    155         this.mSize = size;
    156     }
    157 
    158     public String getText() {
    159         return mText;
    160     }
    161 
    162     public void setText(String text) {
    163         this.mText = text;
    164     }
    165 
    166     public String getReceptionStatus() {
    167         return mReceptionStatus;
    168     }
    169 
    170     public void setReceptionStatus(String receptionStatus) {
    171         this.mReceptionStatus = receptionStatus;
    172     }
    173 
    174     public String getDeliveryStatus() {
    175         return mDeliveryStatus;
    176     }
    177 
    178     public void setDeliveryStatus(String deliveryStatus) {
    179         this.mDeliveryStatus = deliveryStatus;
    180     }
    181 
    182     public int getAttachmentSize() {
    183         return mAttachmentSize;
    184     }
    185 
    186     public void setAttachmentSize(int attachmentSize) {
    187         this.mAttachmentSize = attachmentSize;
    188     }
    189 
    190     public String getAttachmentMimeTypes() {
    191         return mAttachmentMimeTypes;
    192     }
    193 
    194     public void setAttachmentMimeTypes(String attachmentMimeTypes) {
    195         this.mAttachmentMimeTypes = attachmentMimeTypes;
    196     }
    197 
    198     public String getPriority() {
    199         return mPriority;
    200     }
    201 
    202     public void setPriority(String priority) {
    203         this.mPriority = priority;
    204     }
    205 
    206     public String getRead() {
    207         return (mRead?"yes":"no");
    208     }
    209     public boolean getReadBool() {
    210         return mRead;
    211     }
    212     public void setRead(boolean read, boolean reportRead) {
    213         this.mRead = read;
    214         this.mReportRead = reportRead;
    215     }
    216 
    217     public String getSent() {
    218         return mSent;
    219     }
    220 
    221     public void setSent(String sent) {
    222         this.mSent = sent;
    223     }
    224 
    225     public String getProtect() {
    226         return mProtect;
    227     }
    228 
    229     public void setProtect(String protect) {
    230         this.mProtect = protect;
    231     }
    232 
    233     public void setThreadId(long threadId, TYPE type) {
    234         if(threadId != -1) {
    235             this.mThreadId = BluetoothMapUtils.getMapConvoHandle(threadId, type);
    236         }
    237     }
    238 
    239     public String getThreadName() {
    240         return mThreadName;
    241     }
    242 
    243     public void setThreadName(String name) {
    244         this.mThreadName = name;
    245     }
    246 
    247     public String getFolderType() {
    248         return mFolderType;
    249     }
    250 
    251     public void setFolderType(String folderType) {
    252         this.mFolderType = folderType;
    253     }
    254 
    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      * */
    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