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 */
16package com.android.phone.vvm.omtp.sms;
17
18import com.android.phone.vvm.omtp.OmtpConstants;
19
20/**
21 * Structured data representation of an OMTP SYNC message.
22 *
23 * Getters will return null if the field was not set in the message body or it could not be parsed.
24 */
25public class SyncMessage {
26    // Sync event that triggered this message.
27    private final String mSyncTriggerEvent;
28    // Total number of new messages on the server.
29    private final Integer mNewMessageCount;
30    // UID of the new message.
31    private final String mMessageId;
32    // Length of the message.
33    private final Integer mMessageLength;
34    // Content type (voice, video, fax...) of the new message.
35    private final String mContentType;
36    // Sender of the new message.
37    private final String mSender;
38    // Timestamp (in millis) of the new message.
39    private final Long mMsgTimeMillis;
40
41    @Override
42    public String toString() {
43        return "SyncMessage [mSyncTriggerEvent=" + mSyncTriggerEvent
44                + ", mNewMessageCount=" + mNewMessageCount
45                + ", mMessageId=" + mMessageId
46                + ", mMessageLength=" + mMessageLength
47                + ", mContentType=" + mContentType
48                + ", mSender=" + mSender
49                + ", mMsgTimeMillis=" + mMsgTimeMillis + "]";
50    }
51
52    public SyncMessage(WrappedMessageData wrappedData) {
53        mSyncTriggerEvent = wrappedData.extractString(OmtpConstants.SYNC_TRIGGER_EVENT);
54        mMessageId = wrappedData.extractString(OmtpConstants.MESSAGE_UID);
55        mMessageLength = wrappedData.extractInteger(OmtpConstants.MESSAGE_LENGTH);
56        mContentType = wrappedData.extractString(OmtpConstants.CONTENT_TYPE);
57        mSender = wrappedData.extractString(OmtpConstants.SENDER);
58        mNewMessageCount = wrappedData.extractInteger(OmtpConstants.NUM_MESSAGE_COUNT);
59        mMsgTimeMillis = wrappedData.extractTime(OmtpConstants.TIME);
60    }
61
62    /**
63     * @return the event that triggered the sync message. This is a mandatory field and must always
64     * be set.
65     */
66    public String getSyncTriggerEvent() {
67        return mSyncTriggerEvent;
68    }
69
70    /**
71     * @return the number of new messages stored on the voicemail server.
72     */
73    public int getNewMessageCount() {
74        return mNewMessageCount != null ? mNewMessageCount : 0;
75    }
76
77    /**
78     * @return the message ID of the new message.
79     * <p>
80     * Expected to be set only for
81     * {@link com.android.phone.vvm.omtp.OmtpConstants#NEW_MESSAGE}
82     */
83    public String getId() {
84        return mMessageId;
85    }
86
87    /**
88     * @return the content type of the new message.
89     * <p>
90     * Expected to be set only for
91     * {@link com.android.phone.vvm.omtp.OmtpConstants#NEW_MESSAGE}
92     */
93    public String getContentType() {
94        return mContentType;
95    }
96
97    /**
98     * @return the message length of the new message.
99     * <p>
100     * Expected to be set only for
101     * {@link com.android.phone.vvm.omtp.OmtpConstants#NEW_MESSAGE}
102     */
103    public int getLength() {
104        return mMessageLength != null ? mMessageLength : 0;
105    }
106
107    /**
108     * @return the sender's phone number of the new message specified as MSISDN.
109     * <p>
110     * Expected to be set only for
111     * {@link com.android.phone.vvm.omtp.OmtpConstants#NEW_MESSAGE}
112     */
113    public String getSender() {
114        return mSender;
115    }
116
117    /**
118     * @return the timestamp as milliseconds for the new message.
119     * <p>
120     * Expected to be set only for
121     * {@link com.android.phone.vvm.omtp.OmtpConstants#NEW_MESSAGE}
122     */
123    public long getTimestampMillis() {
124        return mMsgTimeMillis != null ? mMsgTimeMillis : 0;
125    }
126}