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}