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