@Before public void before() { generator = new HeaderGenerator("ref", 1); }
@Test public void shouldGenerateCorrectHeaders() throws Exception { PersonRecord record = new PersonRecord(1, "Test Testor", "test@test.com", "1234"); Map<String, String> map = mockMessage("1234", record); Date date = new Date(); map.put(Telephony.TextBasedSmsColumns.DATE, String.valueOf(date.getTime())); map.put(Telephony.TextBasedSmsColumns.TYPE, "0"); Message msg = generator.messageForDataType(map, DataType.SMS); assertThat(msg).isNotNull(); verify(headerGenerator).setHeaders(any(Message.class), any(Map.class), eq(DataType.SMS), anyString(), eq(record), eq(date), eq(0)); }
public void setHeaders(final Message message, final Map<String, String> msgMap, final DataType dataType, final String address, final @NonNull PersonRecord contact, final Date sentDate, final int status) throws MessagingException { // Threading by contact ID, not by thread ID. I think this value is more stable. message.setHeader(Headers.REFERENCES, String.format(REFERENCE_UID_TEMPLATE, reference, contact.getId())); message.setHeader(Headers.MESSAGE_ID, createMessageId(sentDate, address, status)); message.setHeader(Headers.ADDRESS, sanitize(address)); message.setHeader(Headers.DATATYPE, dataType.toString()); message.setHeader(Headers.BACKUP_TIME, toGMTString(new Date())); message.setHeader(Headers.VERSION, version); message.setSentDate(sentDate, false); message.setInternalDate(sentDate); switch (dataType) { case SMS: setSmsHeaders(message, msgMap); break; case MMS: setMmsHeaders(message, msgMap); break; case CALLLOG: setCallLogHeaders(message, msgMap); break; } }
@Test public void testShouldSetHeadersWithNullAddress() throws Exception { Message message = new MimeMessage(); Map<String, String> map = new HashMap<String, String>(); Date sent = new Date(); PersonRecord person = new PersonRecord(0, null, null, null); generator.setHeaders(message, map, DataType.SMS, null, person, sent, 0); } }
public MessageConverter(Context context, Preferences preferences, String userEmail, PersonLookup personLookup, ContactAccessor contactAccessor) { this.context = context; markAsReadType = preferences.getMarkAsReadType(); this.personLookup = personLookup; markAsReadOnRestore = preferences.getMarkAsReadOnRestore(); String referenceUid = preferences.getReferenceUid(); if (referenceUid == null) { referenceUid = generateReferenceValue(); preferences.setReferenceUid(referenceUid); } final ContactGroup backupContactGroup = preferences.getBackupContactGroup(); ContactGroupIds allowedIds = contactAccessor.getGroupContactIds(context.getContentResolver(), backupContactGroup); if (LOCAL_LOGV) Log.v(TAG, "whitelisted ids for backup: " + allowedIds); messageGenerator = new MessageGenerator(context, new Address(userEmail), preferences.getEmailAddressStyle(), new HeaderGenerator(referenceUid, App.getVersionCode(context)), personLookup, preferences.getMailSubjectPrefix(), allowedIds, new MmsSupport(context.getContentResolver(), personLookup), preferences.getCallLogType(), preferences.getDataTypePreferences()); }
private @Nullable Message messageFromMapSms(Map<String, String> msgMap) throws MessagingException { final String address = msgMap.get(Telephony.TextBasedSmsColumns.ADDRESS); if (TextUtils.isEmpty(address)) return null; PersonRecord record = personLookup.lookupPerson(address); if (!includePersonInBackup(record, DataType.SMS)) return null; final Message msg = new MimeMessage(); msg.setSubject(getSubject(DataType.SMS, record)); setBody(msg, new TextBody(msgMap.get(Telephony.TextBasedSmsColumns.BODY))); final int messageType = toInt(msgMap.get(Telephony.TextBasedSmsColumns.TYPE)); if (Telephony.TextBasedSmsColumns.MESSAGE_TYPE_INBOX == messageType) { // Received message msg.setFrom(record.getAddress(addressStyle)); msg.setRecipient(Message.RecipientType.TO, userAddress); } else { // Sent message msg.setRecipient(Message.RecipientType.TO, record.getAddress(addressStyle)); msg.setFrom(userAddress); } Date sentDate; try { // TODO: should probably be TextBasedSmsColumns.DATE_SENT sentDate = new Date(Long.valueOf(msgMap.get(Telephony.TextBasedSmsColumns.DATE))); } catch (NumberFormatException n) { Log.e(TAG, ERROR_PARSING_DATE, n); sentDate = new Date(); } headerGenerator.setHeaders(msg, msgMap, DataType.SMS, address, record, sentDate, messageType); return msg; }
sentDate = new Date(); headerGenerator.setHeaders(msg, msgMap, DataType.CALLLOG, address, record, sentDate, callType); return msg;
headerGenerator.setHeaders(msg, msgMap, DataType.MMS, details.address, details.getRecipient(), sentDate, msg_box); MimeMultipart body = MimeMultipart.newInstance();
@Test public void testShouldGenerateCallLogHeaders() throws Exception { Message message = new MimeMessage(); Map<String, String> map = new HashMap<String, String>(); Date sent = new Date(); PersonRecord person = new PersonRecord(0, null, null, null); map.put(CallLog.Calls._ID, "id"); map.put(CallLog.Calls.TYPE, "type"); map.put(CallLog.Calls.DURATION, "duration"); map.put(CallLog.Calls.DATE, "date"); generator.setHeaders(message, map, DataType.CALLLOG, "1234", person, sent, 0); assertThat(get(message, Headers.ID)).isEqualTo("id"); assertThat(get(message, Headers.TYPE)).isEqualTo("type"); assertThat(get(message, Headers.DURATION)).isEqualTo("duration"); assertThat(get(message, Headers.DATE)).isEqualTo("date"); }
@Test public void testShouldGenerateMMSHeaders() throws Exception { Message message = new MimeMessage(); Map<String, String> map = new HashMap<String, String>(); Date sent = new Date(); PersonRecord person = new PersonRecord(0, null, null, null); map.put(Telephony.BaseMmsColumns._ID, "id"); map.put(Telephony.BaseMmsColumns.MESSAGE_TYPE, "type"); map.put(Telephony.BaseMmsColumns.THREAD_ID, "tid"); map.put(Telephony.BaseMmsColumns.DATE, "date"); map.put(Telephony.BaseMmsColumns.READ, "read"); generator.setHeaders(message, map, DataType.MMS, "1234", person, sent, 0); assertThat(get(message, Headers.ID)).isEqualTo("id"); assertThat(get(message, Headers.TYPE)).isEqualTo("type"); assertThat(get(message, Headers.THREAD_ID)).isEqualTo("tid"); assertThat(get(message, Headers.READ)).isEqualTo("read"); assertThat(get(message, Headers.DATE)).isEqualTo("date"); }
@Test public void testShouldGenerateStandardHeaders() throws Exception { Message message = new MimeMessage(); Map<String, String> map = new HashMap<String, String>(); Date sent = new Date(); PersonRecord person = new PersonRecord(0, null, null, null); generator.setHeaders(message, map, DataType.SMS, "1234", person, sent, 0); assertThat(get(message, Headers.ADDRESS)).isEqualTo("1234"); assertThat(get(message, Headers.DATATYPE)).isEqualTo("SMS"); assertThat(get(message, Headers.BACKUP_TIME)).isNotEmpty(); assertThat(get(message, Headers.VERSION)).isNotEmpty(); assertThat(message.getMessageId()).contains("sms-backup-plus.local"); assertThat(message.getSentDate()).isEqualTo(sent); assertThat(message.getReferences()).isNotEmpty(); }
@Test public void testShouldGenerateSMSHeaders() throws Exception { Message message = new MimeMessage(); Map<String, String> map = new HashMap<String, String>(); Date sent = new Date(); PersonRecord person = new PersonRecord(0, null, null, null); map.put(android.provider.BaseColumns._ID, "someId"); map.put(Telephony.TextBasedSmsColumns.TYPE, "type"); map.put(Telephony.TextBasedSmsColumns.DATE, "date"); map.put(Telephony.TextBasedSmsColumns.THREAD_ID, "tid"); map.put(Telephony.TextBasedSmsColumns.READ, "read"); map.put(Telephony.TextBasedSmsColumns.STATUS, "status"); map.put(Telephony.TextBasedSmsColumns.PROTOCOL, "protocol"); map.put(Telephony.TextBasedSmsColumns.SERVICE_CENTER, "svc"); generator.setHeaders(message, map, DataType.SMS, "1234", person, sent, 0); assertThat(get(message, Headers.ID)).isEqualTo("someId"); assertThat(get(message, Headers.TYPE)).isEqualTo("type"); assertThat(get(message, Headers.DATE)).isEqualTo("date"); assertThat(get(message, Headers.THREAD_ID)).isEqualTo("tid"); assertThat(get(message, Headers.READ)).isEqualTo("read"); assertThat(get(message, Headers.STATUS)).isEqualTo("status"); assertThat(get(message, Headers.PROTOCOL)).isEqualTo("protocol"); assertThat(get(message, Headers.SERVICE_CENTER)).isEqualTo("svc"); }