ContactList.java revision 56e77a576e452f26da6941f01746435fe4b3011b
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; 111d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 121d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrickpublic class ContactList extends ArrayList<Contact> { 131d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick private static final long serialVersionUID = 1L; 141d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 151d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public static ContactList getByNumbers(Iterable<String> numbers, boolean canBlock) { 161d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick ContactList list = new ContactList(); 171d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (String number : numbers) { 1849eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor if (!TextUtils.isEmpty(number)) { 1949eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor list.add(Contact.get(number, canBlock)); 2049eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor } 211d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 221d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return list; 231d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 241d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 2556e77a576e452f26da6941f01746435fe4b3011bWei Huang public static ContactList getByNumbers(String semiSepNumbers, 2656e77a576e452f26da6941f01746435fe4b3011bWei Huang boolean canBlock, 2756e77a576e452f26da6941f01746435fe4b3011bWei Huang boolean replaceNumber) { 281d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick ContactList list = new ContactList(); 291d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (String number : semiSepNumbers.split(";")) { 3049eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor if (!TextUtils.isEmpty(number)) { 3156e77a576e452f26da6941f01746435fe4b3011bWei Huang Contact contact = Contact.get(number, canBlock); 3256e77a576e452f26da6941f01746435fe4b3011bWei Huang if (replaceNumber) { 3356e77a576e452f26da6941f01746435fe4b3011bWei Huang contact.setNumber(number); 3456e77a576e452f26da6941f01746435fe4b3011bWei Huang } 3556e77a576e452f26da6941f01746435fe4b3011bWei Huang list.add(contact); 3649eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor } 371d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 381d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return list; 391d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 401d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 411d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public static ContactList getByIds(String spaceSepIds, boolean canBlock) { 421d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick ContactList list = new ContactList(); 431d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (String number : RecipientIdCache.getNumbers(spaceSepIds)) { 4449eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor if (!TextUtils.isEmpty(number)) { 4549eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor list.add(Contact.get(number, canBlock)); 4649eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor } 471d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 481d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return list; 491d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 501d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 511d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public int getPresenceResId() { 521d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // We only show presence for single contacts. 531d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (size() != 1) 541d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return 0; 551d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 561d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return get(0).getPresenceResId(); 571d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 581d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 591d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public void addListeners(UpdateListener l) { 601d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 611d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick c.addListener(l); 621d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 631d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 641d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 651d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public void removeListeners(UpdateListener l) { 661d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 671d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick c.removeListener(l); 681d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 691d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 701d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 711d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String formatNames(String separator) { 721d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick String[] names = new String[size()]; 731d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick int i = 0; 741d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 751d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick names[i++] = c.getName(); 761d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 771d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return TextUtils.join(separator, names); 781d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 791d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 801d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String formatNamesAndNumbers(String separator) { 811d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick String[] nans = new String[size()]; 821d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick int i = 0; 831d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 841d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick nans[i++] = c.getNameAndNumber(); 851d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 861d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return TextUtils.join(separator, nans); 871d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 881d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 891d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String serialize() { 901d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return TextUtils.join(";", getNumbers()); 911d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 921d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 931d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public boolean containsEmail() { 941d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 951d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (c.isEmail()) { 961d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return true; 971d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 981d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 991d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 1001d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1011d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 1021d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String[] getNumbers() { 1031d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick List<String> numbers = new ArrayList<String>(); 1047203001c04b42ef7a32440c753faa99d5839df04Tom Taylor String number; 1051d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 1067203001c04b42ef7a32440c753faa99d5839df04Tom Taylor number = c.getNumber(); 1077203001c04b42ef7a32440c753faa99d5839df04Tom Taylor // Don't add duplicate numbers. This can happen if a contact name has a comma. 1087203001c04b42ef7a32440c753faa99d5839df04Tom Taylor // Since we use a comma as a delimiter between contacts, the code will consider 1097203001c04b42ef7a32440c753faa99d5839df04Tom Taylor // the same recipient has been added twice. The recipients UI still works correctly. 1107203001c04b42ef7a32440c753faa99d5839df04Tom Taylor // It's easiest to just make sure we only send to the same recipient once. 1117203001c04b42ef7a32440c753faa99d5839df04Tom Taylor if (!numbers.contains(number)) { 1127203001c04b42ef7a32440c753faa99d5839df04Tom Taylor numbers.add(number); 1137203001c04b42ef7a32440c753faa99d5839df04Tom Taylor } 1141d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1151d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return numbers.toArray(new String[numbers.size()]); 1161d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1171d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 1181d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick @Override 1191d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public boolean equals(Object obj) { 1201d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick try { 1211d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick ContactList other = (ContactList)obj; 1221d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // If they're different sizes, the contact 1231d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // set is obviously different. 1241d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (size() != other.size()) { 1251d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 1261d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1271d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 1281d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // Make sure all the individual contacts are the same. 1291d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 1301d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (!other.contains(c)) { 1311d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 1321d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1331d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1341d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 1351d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return true; 1361d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } catch (ClassCastException e) { 1371d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 1381d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1391d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 140d9d7479a8c9e10b7b3f39137e28ed0f283e4a257Wei Huang 141d9d7479a8c9e10b7b3f39137e28ed0f283e4a257Wei Huang private void log(String msg) { 142d9d7479a8c9e10b7b3f39137e28ed0f283e4a257Wei Huang Log.d(LogTag.TAG, "[ContactList] " + msg); 143d9d7479a8c9e10b7b3f39137e28ed0f283e4a257Wei Huang } 1441d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick} 145