ContactList.java revision 49eaf0b56e323f2b9526677165443bb51b014d52
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; 71d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 81d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrickimport com.android.mms.data.Contact.UpdateListener; 91d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 101d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrickpublic class ContactList extends ArrayList<Contact> { 111d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick private static final long serialVersionUID = 1L; 121d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 131d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public static ContactList getByNumbers(Iterable<String> numbers, boolean canBlock) { 141d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick ContactList list = new ContactList(); 151d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (String number : numbers) { 1649eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor if (!TextUtils.isEmpty(number)) { 1749eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor list.add(Contact.get(number, canBlock)); 1849eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor } 191d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 201d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return list; 211d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 221d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 231d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public static ContactList getByNumbers(String semiSepNumbers, boolean canBlock) { 241d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick ContactList list = new ContactList(); 251d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (String number : semiSepNumbers.split(";")) { 2649eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor if (!TextUtils.isEmpty(number)) { 2749eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor list.add(Contact.get(number, canBlock)); 2849eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor } 291d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 301d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return list; 311d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 321d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 331d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public static ContactList getByIds(String spaceSepIds, boolean canBlock) { 341d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick ContactList list = new ContactList(); 351d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (String number : RecipientIdCache.getNumbers(spaceSepIds)) { 3649eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor if (!TextUtils.isEmpty(number)) { 3749eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor list.add(Contact.get(number, canBlock)); 3849eaf0b56e323f2b9526677165443bb51b014d52Tom Taylor } 391d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 401d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return list; 411d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 421d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 431d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public int getPresenceResId() { 441d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // We only show presence for single contacts. 451d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (size() != 1) 461d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return 0; 471d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 481d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return get(0).getPresenceResId(); 491d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 501d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 511d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public void addListeners(UpdateListener l) { 521d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 531d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick c.addListener(l); 541d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 551d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 561d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 571d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public void removeListeners(UpdateListener l) { 581d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 591d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick c.removeListener(l); 601d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 611d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 621d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 631d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String formatNames(String separator) { 641d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick String[] names = new String[size()]; 651d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick int i = 0; 661d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 671d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick names[i++] = c.getName(); 681d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 691d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return TextUtils.join(separator, names); 701d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 711d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 721d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String formatNamesAndNumbers(String separator) { 731d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick String[] nans = new String[size()]; 741d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick int i = 0; 751d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 761d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick nans[i++] = c.getNameAndNumber(); 771d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 781d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return TextUtils.join(separator, nans); 791d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 801d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 811d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String serialize() { 821d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return TextUtils.join(";", getNumbers()); 831d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 841d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 851d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public boolean containsEmail() { 861d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 871d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (c.isEmail()) { 881d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return true; 891d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 901d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 911d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 921d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 931d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 941d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String[] getNumbers() { 951d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick List<String> numbers = new ArrayList<String>(); 967203001c04b42ef7a32440c753faa99d5839df04Tom Taylor String number; 971d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 987203001c04b42ef7a32440c753faa99d5839df04Tom Taylor number = c.getNumber(); 997203001c04b42ef7a32440c753faa99d5839df04Tom Taylor // Don't add duplicate numbers. This can happen if a contact name has a comma. 1007203001c04b42ef7a32440c753faa99d5839df04Tom Taylor // Since we use a comma as a delimiter between contacts, the code will consider 1017203001c04b42ef7a32440c753faa99d5839df04Tom Taylor // the same recipient has been added twice. The recipients UI still works correctly. 1027203001c04b42ef7a32440c753faa99d5839df04Tom Taylor // It's easiest to just make sure we only send to the same recipient once. 1037203001c04b42ef7a32440c753faa99d5839df04Tom Taylor if (!numbers.contains(number)) { 1047203001c04b42ef7a32440c753faa99d5839df04Tom Taylor numbers.add(number); 1057203001c04b42ef7a32440c753faa99d5839df04Tom Taylor } 1061d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1071d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return numbers.toArray(new String[numbers.size()]); 1081d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1091d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 1101d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick @Override 1111d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public boolean equals(Object obj) { 1121d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick try { 1131d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick ContactList other = (ContactList)obj; 1141d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // If they're different sizes, the contact 1151d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // set is obviously different. 1161d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (size() != other.size()) { 1171d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 1181d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1191d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 1201d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // Make sure all the individual contacts are the same. 1211d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 1221d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (!other.contains(c)) { 1231d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 1241d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1251d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1261d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 1271d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return true; 1281d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } catch (ClassCastException e) { 1291d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 1301d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1311d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1321d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick} 133