return new PersonRecord(0, null, null, "-1"); } else if (!personCache.containsKey(address)) { final Uri personUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(address)); final long id = c.getLong(0); record = new PersonRecord( id, c.getString(1), } else { if (LOCAL_LOGV) Log.v(TAG, "Looked up unknown address: " + address); record = new PersonRecord(0, null, null, address);
public MmsDetails getDetails(Uri mmsUri, AddressStyle style) { Cursor cursor = resolver.query(Uri.withAppendedPath(mmsUri, "addr"), null, null, null, null); // TODO: this is probably not the best way to determine if a message is inbound or outbound boolean inbound = true; final List<String> recipients = new ArrayList<String>(); while (cursor != null && cursor.moveToNext()) { final String address = cursor.getString(cursor.getColumnIndex("address")); //final int type = addresses.getInt(addresses.getColumnIndex("type")); if (MmsConsts.INSERT_ADDRESS_TOKEN.equals(address)) { inbound = false; } else { recipients.add(address); } } if (cursor != null) cursor.close(); List<PersonRecord> records = new ArrayList<PersonRecord>(recipients.size()); List<Address> addresses = new ArrayList<Address>(recipients.size()); if (!recipients.isEmpty()) { for (String s : recipients) { PersonRecord record = personLookup.lookupPerson(s); records.add(record); addresses.add(record.getAddress(style)); } } return new MmsDetails(inbound, recipients, records, addresses); }
public Address getAddress(AddressStyle style) { final String name; switch (style) { case NUMBER: name = getNumber(); break; case NAME_AND_NUMBER: name = getNameWithNumber(); break; case NAME: name = getName(); break; default: name = null; } return new Address(getEmail(), name, !isEmailUnknown()); }
public String getEmail() { return isEmailUnknown() ? getUnknownEmail(number) : email; }
@Test public void shouldGetAddressMissingNumber_Number() throws Exception { PersonRecord record = new PersonRecord(1, "John Appleseed", "john@appleseed.com", null); assertThat(record.getAddress(NUMBER).toString()).isEqualTo( "Unknown <john@appleseed.com>"); }
@Test public void shouldLookupUnknownPerson() throws Exception { when(resolver.query(any(Uri.class), any(String[].class), (String) isNull(), (String[]) isNull(), (String) isNull())).thenReturn(null); PersonRecord record = lookup.lookupPerson("1234"); assertThat(record).isNotNull(); assertThat(record.isUnknown()).isTrue(); assertThat(record.getEmail()).isEqualTo("1234@unknown.email"); assertThat(record.getName()).isEqualTo("1234"); }
@Test public void shouldReturnNumberForUnknown() throws Exception { PersonRecord record = new PersonRecord(1, null, null, "-1"); assertThat(record.getNumber()).isEqualTo("Unknown"); }
@Test public void shouldReturnUnknownEmail() throws Exception { PersonRecord record = new PersonRecord(0, null, null, "-1"); assertThat(record.getEmail()).isEqualTo("unknown.number@unknown.email"); }
@Test public void shouldBeUnknownForInvalidIds() throws Exception { PersonRecord record = new PersonRecord(0, null, null, "-1"); assertThat(record.isUnknown()).isTrue(); }
@Test public void shouldSanitizeInputDataName() throws Exception { PersonRecord r = new PersonRecord(1, "foo\n\r\n", "foo\n@gmail.com", "\r\r1234"); assertThat(r.getName()).isEqualTo("foo"); }
case CallLog.Calls.OUTGOING_TYPE: msg.setFrom(userAddress); msg.setRecipient(Message.RecipientType.TO, record.getAddress(addressStyle)); break; case CallLog.Calls.MISSED_TYPE: case CallLog.Calls.VOICEMAIL_TYPE: msg.setFrom(record.getAddress(addressStyle)); msg.setRecipient(Message.RecipientType.TO, userAddress); break; toInt(msgMap.get(CallLog.Calls.DURATION)); setBody(msg, new TextBody(callFormatter.format(callType, record.getNumber(), duration))); Date sentDate; try {
public String getId() { return isUnknown() ? number : String.valueOf(getContactId()); }
public String toString() { return String.format(Locale.ENGLISH, "[name=%s email=%s id=%d]", getName(), email, _id); }
private boolean isEmailUnknown() { return isUnknown() || TextUtils.isEmpty(email); }
@Test public void shouldLookupExistingPersonWithEmail() throws Exception { when(resolver.query( eq(Uri.parse("content://com.android.contacts/phone_lookup/1234")), any(String[].class), (String) isNull(), (String[]) isNull(), (String) isNull() )).thenReturn(name("Testor Test")); when(resolver.query( ContactsContract.CommonDataKinds.Email.CONTENT_URI, new String[] { ContactsContract.CommonDataKinds.Email.DATA }, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[] { String.valueOf(1) }, ContactsContract.CommonDataKinds.Email.IS_PRIMARY + " DESC")) .thenReturn(email("foo@test.com") ); PersonRecord record = lookup.lookupPerson("1234"); assertThat(record).isNotNull(); assertThat(record.getEmail()).isEqualTo("foo@test.com"); }
public String getName() { return !TextUtils.isEmpty(name) ? name : getNumber(); }
public boolean contains(PersonRecord personRecord) { return ids.contains(personRecord.getContactId()); }
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; } }