17ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen/*
27ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen * Copyright (C) 2015 The Android Open Source Project
37ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen *
47ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen * Licensed under the Apache License, Version 2.0 (the "License");
57ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen * you may not use this file except in compliance with the License.
67ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen * You may obtain a copy of the License at
77ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen *
87ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen *      http://www.apache.org/licenses/LICENSE-2.0
97ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen *
107ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen * Unless required by applicable law or agreed to in writing, software
117ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen * distributed under the License is distributed on an "AS IS" BASIS,
127ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen * See the License for the specific language governing permissions and
147ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen * limitations under the License
157ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen */
167ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chenpackage com.android.phone.vvm.omtp.sms;
177ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen
18b250ce8d53a07ee1900f979095479074ab7d509cTa-wei Yenimport android.annotation.Nullable;
1987c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yenimport android.os.Bundle;
2087c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yen
214e0e3fb539547765d401079417c1b5eae817142dTa-wei Yenimport com.android.phone.NeededForTesting;
227ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chenimport com.android.phone.vvm.omtp.OmtpConstants;
237ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen
2487c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yenimport java.text.ParseException;
2587c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yenimport java.text.SimpleDateFormat;
2687c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yenimport java.util.Locale;
2787c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yen
287ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen/**
297ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen * Structured data representation of an OMTP SYNC message.
307ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen *
317ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen * Getters will return null if the field was not set in the message body or it could not be parsed.
327ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen */
337ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chenpublic class SyncMessage {
347ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    // Sync event that triggered this message.
357ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    private final String mSyncTriggerEvent;
367ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    // Total number of new messages on the server.
374e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen    private final int mNewMessageCount;
387ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    // UID of the new message.
397ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    private final String mMessageId;
407ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    // Length of the message.
414e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen    private final int mMessageLength;
427ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    // Content type (voice, video, fax...) of the new message.
437ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    private final String mContentType;
447ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    // Sender of the new message.
457ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    private final String mSender;
467ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    // Timestamp (in millis) of the new message.
474e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen    private final long mMsgTimeMillis;
487ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen
497ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    @Override
507ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    public String toString() {
517ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen        return "SyncMessage [mSyncTriggerEvent=" + mSyncTriggerEvent
527ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen                + ", mNewMessageCount=" + mNewMessageCount
537ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen                + ", mMessageId=" + mMessageId
547ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen                + ", mMessageLength=" + mMessageLength
557ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen                + ", mContentType=" + mContentType
567ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen                + ", mSender=" + mSender
577ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen                + ", mMsgTimeMillis=" + mMsgTimeMillis + "]";
587ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    }
597ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen
6087c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yen    public SyncMessage(Bundle wrappedData) {
614e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        mSyncTriggerEvent = getString(wrappedData, OmtpConstants.SYNC_TRIGGER_EVENT);
624e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        mMessageId = getString(wrappedData, OmtpConstants.MESSAGE_UID);
634e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        mMessageLength = getInt(wrappedData, OmtpConstants.MESSAGE_LENGTH);
644e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        mContentType = getString(wrappedData, OmtpConstants.CONTENT_TYPE);
654e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        mSender = getString(wrappedData, OmtpConstants.SENDER);
664e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        mNewMessageCount = getInt(wrappedData, OmtpConstants.NUM_MESSAGE_COUNT);
6787c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yen        mMsgTimeMillis = parseTime(wrappedData.getString(OmtpConstants.TIME));
687ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    }
697ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen
704e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen    private static long parseTime(@Nullable String value) {
714e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        if (value == null) {
724e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen            return 0L;
734e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        }
7487c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yen        try {
7587c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yen            return new SimpleDateFormat(
7687c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yen                    OmtpConstants.DATE_TIME_FORMAT, Locale.US)
7787c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yen                    .parse(value).getTime();
7887c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yen        } catch (ParseException e) {
7987c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yen            return 0L;
8087c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yen        }
8187c49844374decc60a4c0397c2b33e63b7d5548dTa-wei Yen    }
827ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    /**
837ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * @return the event that triggered the sync message. This is a mandatory field and must always
847ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * be set.
857ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     */
867ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    public String getSyncTriggerEvent() {
877ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen        return mSyncTriggerEvent;
887ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    }
897ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen
907ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    /**
917ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * @return the number of new messages stored on the voicemail server.
927ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     */
934e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen    @NeededForTesting
947ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    public int getNewMessageCount() {
954e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        return mNewMessageCount;
967ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    }
977ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen
987ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    /**
997ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * @return the message ID of the new message.
1007ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * <p>
1017ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * Expected to be set only for
1027ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * {@link com.android.phone.vvm.omtp.OmtpConstants#NEW_MESSAGE}
1037ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     */
1047ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    public String getId() {
1057ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen        return mMessageId;
1067ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    }
1077ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen
1087ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    /**
1097ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * @return the content type of the new message.
1107ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * <p>
1117ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * Expected to be set only for
1127ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * {@link com.android.phone.vvm.omtp.OmtpConstants#NEW_MESSAGE}
1137ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     */
1144e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen    @NeededForTesting
1157ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    public String getContentType() {
1167ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen        return mContentType;
1177ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    }
1187ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen
1197ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    /**
1207ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * @return the message length of the new message.
1217ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * <p>
1227ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * Expected to be set only for
1237ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * {@link com.android.phone.vvm.omtp.OmtpConstants#NEW_MESSAGE}
1247ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     */
1257ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    public int getLength() {
1264e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        return mMessageLength;
1277ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    }
1287ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen
1297ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    /**
1307ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * @return the sender's phone number of the new message specified as MSISDN.
1317ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * <p>
1327ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * Expected to be set only for
1337ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * {@link com.android.phone.vvm.omtp.OmtpConstants#NEW_MESSAGE}
1347ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     */
1357ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    public String getSender() {
1367ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen        return mSender;
1377ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    }
1387ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen
1397ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    /**
1407ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * @return the timestamp as milliseconds for the new message.
1417ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * <p>
1427ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * Expected to be set only for
1437ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     * {@link com.android.phone.vvm.omtp.OmtpConstants#NEW_MESSAGE}
1447ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen     */
1457ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    public long getTimestampMillis() {
1464e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        return mMsgTimeMillis;
1474e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen    }
1484e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen
1494e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen    private static int getInt(Bundle wrappedData, String key) {
1504e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        String value = wrappedData.getString(key);
1514e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        if (value == null) {
1524e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen            return 0;
1534e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        }
1544e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        try {
1554e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen            return Integer.parseInt(value);
1564e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        } catch (NumberFormatException e) {
1574e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen            return 0;
1584e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        }
1594e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen    }
1604e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen
1614e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen    private static String getString(Bundle wrappedData, String key) {
1624e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        String value = wrappedData.getString(key);
1634e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        if (value == null) {
1644e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen            return "";
1654e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        }
1664e0e3fb539547765d401079417c1b5eae817142dTa-wei Yen        return value;
1677ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen    }
1687ab73ace1a04f8feffc6fa8d271148dd930f197fNancy Chen}