blob: 17fc549542889ae54d13b2cadb2d8c054425e57e [file] [log] [blame]
/*
* Copyright (C) 2013 Samsung System LSI
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.bluetooth.map;
import com.android.bluetooth.DeviceWorkArounds;
import com.android.bluetooth.map.BluetoothMapUtils.TYPE;
import org.xmlpull.v1.XmlSerializer;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class BluetoothMapMessageListingElement
implements Comparable<BluetoothMapMessageListingElement> {
private static final String TAG = "BluetoothMapMessageListingElement";
private static final boolean D = false;
private static final boolean V = false;
private long mCpHandle = 0; /* The content provider handle - without type information */
private String mSubject = null;
private long mDateTime = 0;
private String mSenderName = null;
private String mSenderAddressing = null;
private String mReplytoAddressing = null;
private String mRecipientName = null;
private String mRecipientAddressing = null;
private TYPE mType = null;
private boolean mMsgTypeAppParamSet = false;
private int mSize = -1;
private String mText = null;
private String mReceptionStatus = null;
private String mDeliveryStatus = null;
private int mAttachmentSize = -1;
private String mPriority = null;
private boolean mRead = false;
private String mSent = null;
private String mProtect = null;
private String mFolderType = null;
private String mThreadId = null;
private String mThreadName = null;
private String mAttachmentMimeTypes = null;
private boolean mReportRead = false;
private int mCursorIndex = 0;
public int getCursorIndex() {
return mCursorIndex;
}
public void setCursorIndex(int cursorIndex) {
this.mCursorIndex = cursorIndex;
}
public long getHandle() {
return mCpHandle;
}
public void setHandle(long handle) {
this.mCpHandle = handle;
}
public long getDateTime() {
return mDateTime;
}
public String getDateTimeString() {
/* TODO: if the feature bit mask of the client supports it, add the time-zone
* (as for MSETime) */
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd'T'HHmmss");
Date date = new Date(mDateTime);
return format.format(date); // Format to YYYYMMDDTHHMMSS local time
}
public void setDateTime(long dateTime) {
this.mDateTime = dateTime;
}
public String getSubject() {
return mSubject;
}
public void setSubject(String subject) {
this.mSubject = subject;
}
public String getSenderName() {
return mSenderName;
}
public void setSenderName(String senderName) {
this.mSenderName = senderName;
}
public String getSenderAddressing() {
return mSenderAddressing;
}
public void setSenderAddressing(String senderAddressing) {
this.mSenderAddressing = senderAddressing;
}
public String getReplyToAddressing() {
return mReplytoAddressing;
}
public void setReplytoAddressing(String replytoAddressing) {
this.mReplytoAddressing = replytoAddressing;
}
public String getRecipientName() {
return mRecipientName;
}
public void setRecipientName(String recipientName) {
this.mRecipientName = recipientName;
}
public String getRecipientAddressing() {
return mRecipientAddressing;
}
public void setRecipientAddressing(String recipientAddressing) {
this.mRecipientAddressing = recipientAddressing;
}
public TYPE getType() {
return mType;
}
public void setType(TYPE type, boolean appParamSet) {
this.mMsgTypeAppParamSet = appParamSet;
this.mType = type;
}
public int getSize() {
return mSize;
}
public void setSize(int size) {
this.mSize = size;
}
public String getText() {
return mText;
}
public void setText(String text) {
this.mText = text;
}
public String getReceptionStatus() {
return mReceptionStatus;
}
public void setReceptionStatus(String receptionStatus) {
this.mReceptionStatus = receptionStatus;
}
public String getDeliveryStatus() {
return mDeliveryStatus;
}
public void setDeliveryStatus(String deliveryStatus) {
this.mDeliveryStatus = deliveryStatus;
}
public int getAttachmentSize() {
return mAttachmentSize;
}
public void setAttachmentSize(int attachmentSize) {
this.mAttachmentSize = attachmentSize;
}
public String getAttachmentMimeTypes() {
return mAttachmentMimeTypes;
}
public void setAttachmentMimeTypes(String attachmentMimeTypes) {
this.mAttachmentMimeTypes = attachmentMimeTypes;
}
public String getPriority() {
return mPriority;
}
public void setPriority(String priority) {
this.mPriority = priority;
}
public String getRead() {
return (mRead ? "yes" : "no");
}
public boolean getReadBool() {
return mRead;
}
public void setRead(boolean read, boolean reportRead) {
this.mRead = read;
this.mReportRead = reportRead;
}
public String getSent() {
return mSent;
}
public void setSent(String sent) {
this.mSent = sent;
}
public String getProtect() {
return mProtect;
}
public void setProtect(String protect) {
this.mProtect = protect;
}
public void setThreadId(long threadId, TYPE type) {
if (threadId != -1) {
this.mThreadId = BluetoothMapUtils.getMapConvoHandle(threadId, type);
}
}
public String getThreadName() {
return mThreadName;
}
public void setThreadName(String name) {
this.mThreadName = name;
}
public String getFolderType() {
return mFolderType;
}
public void setFolderType(String folderType) {
this.mFolderType = folderType;
}
@Override
public int compareTo(BluetoothMapMessageListingElement e) {
if (this.mDateTime < e.mDateTime) {
return 1;
} else if (this.mDateTime > e.mDateTime) {
return -1;
} else {
return 0;
}
}
/* Encode the MapMessageListingElement into the StringBuilder reference.
* */
public void encode(XmlSerializer xmlMsgElement, boolean includeThreadId)
throws IllegalArgumentException, IllegalStateException, IOException {
// contruct the XML tag for a single msg in the msglisting
xmlMsgElement.startTag(null, "msg");
xmlMsgElement.attribute(null, "handle", BluetoothMapUtils.getMapHandle(mCpHandle, mType));
if (mSubject != null) {
String stripped = BluetoothMapUtils.stripInvalidChars(mSubject);
if (DeviceWorkArounds.addressStartsWith(BluetoothMapService
.getRemoteDevice().getAddress(), DeviceWorkArounds
.MERCEDES_BENZ_CARKIT)) {
stripped = stripped.replaceAll("[\\P{ASCII}&\"><]", "");
if (stripped.isEmpty()) {
stripped = "---";
}
}
xmlMsgElement.attribute(null, "subject",
stripped.substring(0, stripped.length() < 256 ? stripped.length() : 256));
}
if (mDateTime != 0) {
xmlMsgElement.attribute(null, "datetime", this.getDateTimeString());
}
if (mSenderName != null) {
xmlMsgElement.attribute(null, "sender_name",
BluetoothMapUtils.stripInvalidChars(mSenderName));
}
if (mSenderAddressing != null) {
xmlMsgElement.attribute(null, "sender_addressing", mSenderAddressing);
}
if (mReplytoAddressing != null) {
xmlMsgElement.attribute(null, "replyto_addressing", mReplytoAddressing);
}
if (mRecipientName != null) {
xmlMsgElement.attribute(null, "recipient_name",
BluetoothMapUtils.stripInvalidChars(mRecipientName));
}
if (mRecipientAddressing != null) {
xmlMsgElement.attribute(null, "recipient_addressing", mRecipientAddressing);
}
/* Avoid NPE for possible "null" value of mType */
if (mMsgTypeAppParamSet && mType != null) {
xmlMsgElement.attribute(null, "type", mType.name());
}
if (mSize != -1) {
xmlMsgElement.attribute(null, "size", Integer.toString(mSize));
}
if (mText != null) {
xmlMsgElement.attribute(null, "text", mText);
}
if (mReceptionStatus != null) {
xmlMsgElement.attribute(null, "reception_status", mReceptionStatus);
}
if (mDeliveryStatus != null) {
xmlMsgElement.attribute(null, "delivery_status", mDeliveryStatus);
}
if (mAttachmentSize != -1) {
xmlMsgElement.attribute(null, "attachment_size", Integer.toString(mAttachmentSize));
}
if (mAttachmentMimeTypes != null) {
xmlMsgElement.attribute(null, "attachment_mime_types", mAttachmentMimeTypes);
}
if (mPriority != null) {
xmlMsgElement.attribute(null, "priority", mPriority);
}
if (mReportRead) {
xmlMsgElement.attribute(null, "read", getRead());
}
if (mSent != null) {
xmlMsgElement.attribute(null, "sent", mSent);
}
if (mProtect != null) {
xmlMsgElement.attribute(null, "protected", mProtect);
}
if (mThreadId != null && includeThreadId) {
xmlMsgElement.attribute(null, "conversation_id", mThreadId);
}
if (mThreadName != null && includeThreadId) {
xmlMsgElement.attribute(null, "conversation_name", mThreadName);
}
if (mFolderType != null) {
xmlMsgElement.attribute(null, "folder_type", mFolderType);
}
xmlMsgElement.endTag(null, "msg");
}
}