| /* |
| * Copyright (C) 2014 The Android Open Source Project |
| * |
| * 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 android.bluetooth.client.map; |
| import android.bluetooth.client.map.utils.ObexTime; |
| |
| import org.json.JSONException; |
| import org.json.JSONObject; |
| |
| import java.math.BigInteger; |
| import java.util.Date; |
| import java.util.HashMap; |
| |
| /** |
| * Object representation of message received in messages listing |
| * <p> |
| * This object will be received in |
| * {@link BluetoothMasClient#EVENT_GET_MESSAGES_LISTING} callback message. |
| */ |
| public class BluetoothMapMessage { |
| |
| private final String mHandle; |
| |
| private final String mSubject; |
| |
| private final Date mDateTime; |
| |
| private final String mSenderName; |
| |
| private final String mSenderAddressing; |
| |
| private final String mReplytoAddressing; |
| |
| private final String mRecipientName; |
| |
| private final String mRecipientAddressing; |
| |
| private final Type mType; |
| |
| private final int mSize; |
| |
| private final boolean mText; |
| |
| private final ReceptionStatus mReceptionStatus; |
| |
| private final int mAttachmentSize; |
| |
| private final boolean mPriority; |
| |
| private final boolean mRead; |
| |
| private final boolean mSent; |
| |
| private final boolean mProtected; |
| |
| public enum Type { |
| UNKNOWN, EMAIL, SMS_GSM, SMS_CDMA, MMS |
| }; |
| |
| public enum ReceptionStatus { |
| UNKNOWN, COMPLETE, FRACTIONED, NOTIFICATION |
| } |
| |
| BluetoothMapMessage(HashMap<String, String> attrs) throws IllegalArgumentException { |
| int size; |
| |
| try { |
| /* just to validate */ |
| new BigInteger(attrs.get("handle"), 16); |
| |
| mHandle = attrs.get("handle"); |
| } catch (NumberFormatException e) { |
| /* |
| * handle MUST have proper value, if it does not then throw |
| * something here |
| */ |
| throw new IllegalArgumentException(e); |
| } |
| |
| mSubject = attrs.get("subject"); |
| String dateTime = attrs.get("datetime"); |
| //Handle possible NPE when not able to retreive datetime attribute |
| if(dateTime != null){ |
| mDateTime = (new ObexTime(dateTime)).getTime(); |
| } else { |
| mDateTime = null; |
| } |
| |
| |
| mSenderName = attrs.get("sender_name"); |
| |
| mSenderAddressing = attrs.get("sender_addressing"); |
| |
| mReplytoAddressing = attrs.get("replyto_addressing"); |
| |
| mRecipientName = attrs.get("recipient_name"); |
| |
| mRecipientAddressing = attrs.get("recipient_addressing"); |
| |
| mType = strToType(attrs.get("type")); |
| |
| try { |
| size = Integer.parseInt(attrs.get("size")); |
| } catch (NumberFormatException e) { |
| size = 0; |
| } |
| |
| mSize = size; |
| |
| mText = yesnoToBoolean(attrs.get("text")); |
| |
| mReceptionStatus = strToReceptionStatus(attrs.get("reception_status")); |
| |
| try { |
| size = Integer.parseInt(attrs.get("attachment_size")); |
| } catch (NumberFormatException e) { |
| size = 0; |
| } |
| |
| mAttachmentSize = size; |
| |
| mPriority = yesnoToBoolean(attrs.get("priority")); |
| |
| mRead = yesnoToBoolean(attrs.get("read")); |
| |
| mSent = yesnoToBoolean(attrs.get("sent")); |
| |
| mProtected = yesnoToBoolean(attrs.get("protected")); |
| } |
| |
| private boolean yesnoToBoolean(String yesno) { |
| return "yes".equals(yesno); |
| } |
| |
| private Type strToType(String s) { |
| if ("EMAIL".equals(s)) { |
| return Type.EMAIL; |
| } else if ("SMS_GSM".equals(s)) { |
| return Type.SMS_GSM; |
| } else if ("SMS_CDMA".equals(s)) { |
| return Type.SMS_CDMA; |
| } else if ("MMS".equals(s)) { |
| return Type.MMS; |
| } |
| |
| return Type.UNKNOWN; |
| } |
| |
| private ReceptionStatus strToReceptionStatus(String s) { |
| if ("complete".equals(s)) { |
| return ReceptionStatus.COMPLETE; |
| } else if ("fractioned".equals(s)) { |
| return ReceptionStatus.FRACTIONED; |
| } else if ("notification".equals(s)) { |
| return ReceptionStatus.NOTIFICATION; |
| } |
| |
| return ReceptionStatus.UNKNOWN; |
| } |
| |
| @Override |
| public String toString() { |
| JSONObject json = new JSONObject(); |
| |
| try { |
| json.put("handle", mHandle); |
| json.put("subject", mSubject); |
| json.put("datetime", mDateTime); |
| json.put("sender_name", mSenderName); |
| json.put("sender_addressing", mSenderAddressing); |
| json.put("replyto_addressing", mReplytoAddressing); |
| json.put("recipient_name", mRecipientName); |
| json.put("recipient_addressing", mRecipientAddressing); |
| json.put("type", mType); |
| json.put("size", mSize); |
| json.put("text", mText); |
| json.put("reception_status", mReceptionStatus); |
| json.put("attachment_size", mAttachmentSize); |
| json.put("priority", mPriority); |
| json.put("read", mRead); |
| json.put("sent", mSent); |
| json.put("protected", mProtected); |
| } catch (JSONException e) { |
| // do nothing |
| } |
| |
| return json.toString(); |
| } |
| |
| /** |
| * @return value corresponding to <code>handle</code> parameter in MAP |
| * specification |
| */ |
| public String getHandle() { |
| return mHandle; |
| } |
| |
| /** |
| * @return value corresponding to <code>subject</code> parameter in MAP |
| * specification |
| */ |
| public String getSubject() { |
| return mSubject; |
| } |
| |
| /** |
| * @return <code>Date</code> object corresponding to <code>datetime</code> |
| * parameter in MAP specification |
| */ |
| public Date getDateTime() { |
| return mDateTime; |
| } |
| |
| /** |
| * @return value corresponding to <code>sender_name</code> parameter in MAP |
| * specification |
| */ |
| public String getSenderName() { |
| return mSenderName; |
| } |
| |
| /** |
| * @return value corresponding to <code>sender_addressing</code> parameter |
| * in MAP specification |
| */ |
| public String getSenderAddressing() { |
| return mSenderAddressing; |
| } |
| |
| /** |
| * @return value corresponding to <code>replyto_addressing</code> parameter |
| * in MAP specification |
| */ |
| public String getReplytoAddressing() { |
| return mReplytoAddressing; |
| } |
| |
| /** |
| * @return value corresponding to <code>recipient_name</code> parameter in |
| * MAP specification |
| */ |
| public String getRecipientName() { |
| return mRecipientName; |
| } |
| |
| /** |
| * @return value corresponding to <code>recipient_addressing</code> |
| * parameter in MAP specification |
| */ |
| public String getRecipientAddressing() { |
| return mRecipientAddressing; |
| } |
| |
| /** |
| * @return {@link Type} object corresponding to <code>type</code> parameter |
| * in MAP specification |
| */ |
| public Type getType() { |
| return mType; |
| } |
| |
| /** |
| * @return value corresponding to <code>size</code> parameter in MAP |
| * specification |
| */ |
| public int getSize() { |
| return mSize; |
| } |
| |
| /** |
| * @return {@link .ReceptionStatus} object corresponding to |
| * <code>reception_status</code> parameter in MAP specification |
| */ |
| public ReceptionStatus getReceptionStatus() { |
| return mReceptionStatus; |
| } |
| |
| /** |
| * @return value corresponding to <code>attachment_size</code> parameter in |
| * MAP specification |
| */ |
| public int getAttachmentSize() { |
| return mAttachmentSize; |
| } |
| |
| /** |
| * @return value corresponding to <code>text</code> parameter in MAP |
| * specification |
| */ |
| public boolean isText() { |
| return mText; |
| } |
| |
| /** |
| * @return value corresponding to <code>priority</code> parameter in MAP |
| * specification |
| */ |
| public boolean isPriority() { |
| return mPriority; |
| } |
| |
| /** |
| * @return value corresponding to <code>read</code> parameter in MAP |
| * specification |
| */ |
| public boolean isRead() { |
| return mRead; |
| } |
| |
| /** |
| * @return value corresponding to <code>sent</code> parameter in MAP |
| * specification |
| */ |
| public boolean isSent() { |
| return mSent; |
| } |
| |
| /** |
| * @return value corresponding to <code>protected</code> parameter in MAP |
| * specification |
| */ |
| public boolean isProtected() { |
| return mProtected; |
| } |
| } |