ContactList.java revision ea5e915b6104ff0e30c313bcb5a96f838997e57b
11d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrickpackage com.android.mms.data; 21d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 31d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrickimport java.util.ArrayList; 41d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrickimport java.util.List; 51d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 61d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrickimport android.text.TextUtils; 7d9d7479a8c9e10b7b3f39137e28ed0f283e4a257Wei Huangimport android.util.Log; 81d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 91d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrickimport com.android.mms.data.Contact.UpdateListener; 10d9d7479a8c9e10b7b3f39137e28ed0f283e4a257Wei Huangimport com.android.mms.LogTag; 1178f81825431c8c52cad57bc4a363747533a701abWei Huangimport com.android.mms.ui.MessageUtils; 121d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 131d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrickpublic class ContactList extends ArrayList<Contact> { 141d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick private static final long serialVersionUID = 1L; 151d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 161d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public static ContactList getByNumbers(Iterable<String> numbers, boolean canBlock) { 171d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick ContactList list = new ContactList(); 181d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (String number : numbers) { 1949eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor if (!TextUtils.isEmpty(number)) { 2049eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor list.add(Contact.get(number, canBlock)); 2149eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor } 221d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 231d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return list; 241d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 251d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 2656e77a576e452f26da6941f01746435fe4b3011bWei Huang public static ContactList getByNumbers(String semiSepNumbers, 2756e77a576e452f26da6941f01746435fe4b3011bWei Huang boolean canBlock, 2856e77a576e452f26da6941f01746435fe4b3011bWei Huang boolean replaceNumber) { 291d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick ContactList list = new ContactList(); 301d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (String number : semiSepNumbers.split(";")) { 3149eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor if (!TextUtils.isEmpty(number)) { 3256e77a576e452f26da6941f01746435fe4b3011bWei Huang Contact contact = Contact.get(number, canBlock); 3356e77a576e452f26da6941f01746435fe4b3011bWei Huang if (replaceNumber) { 3456e77a576e452f26da6941f01746435fe4b3011bWei Huang contact.setNumber(number); 3556e77a576e452f26da6941f01746435fe4b3011bWei Huang } 3656e77a576e452f26da6941f01746435fe4b3011bWei Huang list.add(contact); 3749eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor } 381d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 391d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return list; 401d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 411d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 42431e11d429783c07eca6e789de0518d17b42fb74Wei Huang /** 43431e11d429783c07eca6e789de0518d17b42fb74Wei Huang * Returns a ContactList for the corresponding recipient ids passed in. This method will 44431e11d429783c07eca6e789de0518d17b42fb74Wei Huang * create the contact if it doesn't exist, and would inject the recipient id into the contact. 45431e11d429783c07eca6e789de0518d17b42fb74Wei Huang */ 461d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public static ContactList getByIds(String spaceSepIds, boolean canBlock) { 471d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick ContactList list = new ContactList(); 48431e11d429783c07eca6e789de0518d17b42fb74Wei Huang for (RecipientIdCache.Entry entry : RecipientIdCache.getAddresses(spaceSepIds)) { 49431e11d429783c07eca6e789de0518d17b42fb74Wei Huang if (entry != null && !TextUtils.isEmpty(entry.number)) { 50431e11d429783c07eca6e789de0518d17b42fb74Wei Huang Contact contact = Contact.get(entry.number, canBlock); 51ea5e915b6104ff0e30c313bcb5a96f838997e57bMark Wagner contact.setRecipientId(entry.id); 52431e11d429783c07eca6e789de0518d17b42fb74Wei Huang list.add(contact); 5349eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor } 541d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 551d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return list; 561d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 571d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 581d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public int getPresenceResId() { 591d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // We only show presence for single contacts. 601d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (size() != 1) 611d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return 0; 621d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 631d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return get(0).getPresenceResId(); 641d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 651d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 661d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String formatNames(String separator) { 671d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick String[] names = new String[size()]; 681d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick int i = 0; 691d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 701d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick names[i++] = c.getName(); 711d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 721d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return TextUtils.join(separator, names); 731d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 741d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 751d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String formatNamesAndNumbers(String separator) { 761d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick String[] nans = new String[size()]; 771d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick int i = 0; 781d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 791d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick nans[i++] = c.getNameAndNumber(); 801d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 811d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return TextUtils.join(separator, nans); 821d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 831d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 841d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String serialize() { 851d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return TextUtils.join(";", getNumbers()); 861d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 871d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 881d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public boolean containsEmail() { 891d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 901d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (c.isEmail()) { 911d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return true; 921d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 931d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 941d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 951d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 961d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 971d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String[] getNumbers() { 9878f81825431c8c52cad57bc4a363747533a701abWei Huang return getNumbers(false /* don't scrub for MMS address */); 9978f81825431c8c52cad57bc4a363747533a701abWei Huang } 10078f81825431c8c52cad57bc4a363747533a701abWei Huang 10178f81825431c8c52cad57bc4a363747533a701abWei Huang public String[] getNumbers(boolean scrubForMmsAddress) { 1021d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick List<String> numbers = new ArrayList<String>(); 1037203001c04b42ef7a32440c753faa99d5839df04Tom Taylor String number; 1041d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 1057203001c04b42ef7a32440c753faa99d5839df04Tom Taylor number = c.getNumber(); 10678f81825431c8c52cad57bc4a363747533a701abWei Huang 10778f81825431c8c52cad57bc4a363747533a701abWei Huang if (scrubForMmsAddress) { 10878f81825431c8c52cad57bc4a363747533a701abWei Huang // parse/scrub the address for valid MMS address. The returned number 10978f81825431c8c52cad57bc4a363747533a701abWei Huang // could be null if it's not a valid MMS address. We don't want to send 11078f81825431c8c52cad57bc4a363747533a701abWei Huang // a message to an invalid number, as the network may do its own stripping, 11178f81825431c8c52cad57bc4a363747533a701abWei Huang // and end up sending the message to a different number! 11278f81825431c8c52cad57bc4a363747533a701abWei Huang number = MessageUtils.parseMmsAddress(number); 11378f81825431c8c52cad57bc4a363747533a701abWei Huang } 11478f81825431c8c52cad57bc4a363747533a701abWei Huang 1157203001c04b42ef7a32440c753faa99d5839df04Tom Taylor // Don't add duplicate numbers. This can happen if a contact name has a comma. 1167203001c04b42ef7a32440c753faa99d5839df04Tom Taylor // Since we use a comma as a delimiter between contacts, the code will consider 1177203001c04b42ef7a32440c753faa99d5839df04Tom Taylor // the same recipient has been added twice. The recipients UI still works correctly. 1187203001c04b42ef7a32440c753faa99d5839df04Tom Taylor // It's easiest to just make sure we only send to the same recipient once. 11978f81825431c8c52cad57bc4a363747533a701abWei Huang if (!TextUtils.isEmpty(number) && !numbers.contains(number)) { 1207203001c04b42ef7a32440c753faa99d5839df04Tom Taylor numbers.add(number); 1217203001c04b42ef7a32440c753faa99d5839df04Tom Taylor } 1221d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1231d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return numbers.toArray(new String[numbers.size()]); 1241d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1251d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 1261d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick @Override 1271d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public boolean equals(Object obj) { 1281d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick try { 1291d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick ContactList other = (ContactList)obj; 1301d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // If they're different sizes, the contact 1311d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // set is obviously different. 1321d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (size() != other.size()) { 1331d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 1341d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1351d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 1361d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // Make sure all the individual contacts are the same. 1371d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 1381d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (!other.contains(c)) { 1391d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 1401d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1411d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1421d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 1431d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return true; 1441d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } catch (ClassCastException e) { 1451d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 1461d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1471d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 148d9d7479a8c9e10b7b3f39137e28ed0f283e4a257Wei Huang 149d9d7479a8c9e10b7b3f39137e28ed0f283e4a257Wei Huang private void log(String msg) { 150d9d7479a8c9e10b7b3f39137e28ed0f283e4a257Wei Huang Log.d(LogTag.TAG, "[ContactList] " + msg); 151d9d7479a8c9e10b7b3f39137e28ed0f283e4a257Wei Huang } 1521d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick} 153