ContactList.java revision 1d98ae0b203e01034ddead4214d1520ce863a23b
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) { 161d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick list.add(Contact.get(number, canBlock)); 171d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 181d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return list; 191d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 201d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 211d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public static ContactList getByNumbers(String semiSepNumbers, boolean canBlock) { 221d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick ContactList list = new ContactList(); 231d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (String number : semiSepNumbers.split(";")) { 241d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick list.add(Contact.get(number, canBlock)); 251d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 261d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return list; 271d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 281d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 291d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public static ContactList getByIds(String spaceSepIds, boolean canBlock) { 301d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick ContactList list = new ContactList(); 311d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (String number : RecipientIdCache.getNumbers(spaceSepIds)) { 321d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick Contact contact = Contact.get(number, canBlock); 331d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick list.add(contact); 341d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 351d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return list; 361d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 371d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 381d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public int getPresenceResId() { 391d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // We only show presence for single contacts. 401d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (size() != 1) 411d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return 0; 421d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 431d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return get(0).getPresenceResId(); 441d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 451d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 461d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public void addListeners(UpdateListener l) { 471d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 481d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick c.addListener(l); 491d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 501d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 511d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 521d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public void removeListeners(UpdateListener l) { 531d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 541d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick c.removeListener(l); 551d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 561d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 571d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 581d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String formatNames(String separator) { 591d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick String[] names = new String[size()]; 601d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick int i = 0; 611d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 621d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick names[i++] = c.getName(); 631d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 641d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return TextUtils.join(separator, names); 651d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 661d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 671d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String formatNamesAndNumbers(String separator) { 681d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick String[] nans = new String[size()]; 691d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick int i = 0; 701d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 711d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick nans[i++] = c.getNameAndNumber(); 721d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 731d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return TextUtils.join(separator, nans); 741d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 751d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 761d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String serialize() { 771d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return TextUtils.join(";", getNumbers()); 781d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 791d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 801d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public boolean containsEmail() { 811d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 821d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (c.isEmail()) { 831d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return true; 841d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 851d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 861d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 871d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 881d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 891d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public String[] getNumbers() { 901d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick List<String> numbers = new ArrayList<String>(); 911d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 921d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick numbers.add(c.getNumber()); 931d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 941d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return numbers.toArray(new String[numbers.size()]); 951d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 961d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 971d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick @Override 981d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick public boolean equals(Object obj) { 991d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick try { 1001d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick ContactList other = (ContactList)obj; 1011d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // If they're different sizes, the contact 1021d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // set is obviously different. 1031d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (size() != other.size()) { 1041d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 1051d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1061d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 1071d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick // Make sure all the individual contacts are the same. 1081d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick for (Contact c : this) { 1091d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick if (!other.contains(c)) { 1101d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 1111d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1121d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1131d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick 1141d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return true; 1151d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } catch (ClassCastException e) { 1161d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick return false; 1171d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1181d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick } 1191d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick} 120