Home | History | Annotate | Download | only in sms
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License
     15  */
     16 package com.android.voicemail.impl.sms;
     17 
     18 import android.os.Bundle;
     19 import android.support.annotation.Nullable;
     20 import com.android.voicemail.impl.NeededForTesting;
     21 import com.android.voicemail.impl.OmtpConstants;
     22 import java.text.ParseException;
     23 import java.text.SimpleDateFormat;
     24 import java.util.Locale;
     25 
     26 /**
     27  * Structured data representation of an OMTP SYNC message.
     28  *
     29  * <p>Getters will return null if the field was not set in the message body or it could not be
     30  * parsed.
     31  */
     32 public class SyncMessage {
     33   // Sync event that triggered this message.
     34   private final String syncTriggerEvent;
     35   // Total number of new messages on the server.
     36   private final int newMessageCount;
     37   // UID of the new message.
     38   private final String messageId;
     39   // Length of the message.
     40   private final int messageLength;
     41   // Content type (voice, video, fax...) of the new message.
     42   private final String contentType;
     43   // Sender of the new message.
     44   private final String sender;
     45   // Timestamp (in millis) of the new message.
     46   private final long msgTimeMillis;
     47 
     48   @Override
     49   public String toString() {
     50     return "SyncMessage [mSyncTriggerEvent="
     51         + syncTriggerEvent
     52         + ", mNewMessageCount="
     53         + newMessageCount
     54         + ", mMessageId="
     55         + messageId
     56         + ", mMessageLength="
     57         + messageLength
     58         + ", mContentType="
     59         + contentType
     60         + ", mSender="
     61         + sender
     62         + ", mMsgTimeMillis="
     63         + msgTimeMillis
     64         + "]";
     65   }
     66 
     67   public SyncMessage(Bundle wrappedData) {
     68     syncTriggerEvent = getString(wrappedData, OmtpConstants.SYNC_TRIGGER_EVENT);
     69     messageId = getString(wrappedData, OmtpConstants.MESSAGE_UID);
     70     messageLength = getInt(wrappedData, OmtpConstants.MESSAGE_LENGTH);
     71     contentType = getString(wrappedData, OmtpConstants.CONTENT_TYPE);
     72     sender = getString(wrappedData, OmtpConstants.SENDER);
     73     newMessageCount = getInt(wrappedData, OmtpConstants.NUM_MESSAGE_COUNT);
     74     msgTimeMillis = parseTime(wrappedData.getString(OmtpConstants.TIME));
     75   }
     76 
     77   private static long parseTime(@Nullable String value) {
     78     if (value == null) {
     79       return 0L;
     80     }
     81     try {
     82       return new SimpleDateFormat(OmtpConstants.DATE_TIME_FORMAT, Locale.US).parse(value).getTime();
     83     } catch (ParseException e) {
     84       return 0L;
     85     }
     86   }
     87   /**
     88    * @return the event that triggered the sync message. This is a mandatory field and must always be
     89    *     set.
     90    */
     91   public String getSyncTriggerEvent() {
     92     return syncTriggerEvent;
     93   }
     94 
     95   /** @return the number of new messages stored on the voicemail server. */
     96   @NeededForTesting
     97   public int getNewMessageCount() {
     98     return newMessageCount;
     99   }
    100 
    101   /**
    102    * @return the message ID of the new message.
    103    *     <p>Expected to be set only for {@link OmtpConstants#NEW_MESSAGE}
    104    */
    105   public String getId() {
    106     return messageId;
    107   }
    108 
    109   /**
    110    * @return the content type of the new message.
    111    *     <p>Expected to be set only for {@link OmtpConstants#NEW_MESSAGE}
    112    */
    113   @NeededForTesting
    114   public String getContentType() {
    115     return contentType;
    116   }
    117 
    118   /**
    119    * @return the message length of the new message.
    120    *     <p>Expected to be set only for {@link OmtpConstants#NEW_MESSAGE}
    121    */
    122   public int getLength() {
    123     return messageLength;
    124   }
    125 
    126   /**
    127    * @return the sender's phone number of the new message specified as MSISDN.
    128    *     <p>Expected to be set only for {@link OmtpConstants#NEW_MESSAGE}
    129    */
    130   public String getSender() {
    131     return sender;
    132   }
    133 
    134   /**
    135    * @return the timestamp as milliseconds for the new message.
    136    *     <p>Expected to be set only for {@link OmtpConstants#NEW_MESSAGE}
    137    */
    138   public long getTimestampMillis() {
    139     return msgTimeMillis;
    140   }
    141 
    142   private static int getInt(Bundle wrappedData, String key) {
    143     String value = wrappedData.getString(key);
    144     if (value == null) {
    145       return 0;
    146     }
    147     try {
    148       return Integer.parseInt(value);
    149     } catch (NumberFormatException e) {
    150       return 0;
    151     }
    152   }
    153 
    154   private static String getString(Bundle wrappedData, String key) {
    155     String value = wrappedData.getString(key);
    156     if (value == null) {
    157       return "";
    158     }
    159     return value;
    160   }
    161 }
    162