# HG changeset patch # User Marseille # Date 1246818153 -7200 # Node ID 52e3cbc0373079ca10ab93b99845f86e3b9040b4 # Parent c5f000965df8c5c43884dbfa7cc8dbacf063394f MOdification de la classe ContactList. AddGroup, DelGroup AddContactInList DelContactInList sont des fonctions de la classe. diff -r c5f000965df8 -r 52e3cbc03730 src/com/beem/project/beem/ui/ContactList.java --- a/src/com/beem/project/beem/ui/ContactList.java Wed Jul 01 17:51:06 2009 +0200 +++ b/src/com/beem/project/beem/ui/ContactList.java Sun Jul 05 20:22:33 2009 +0200 @@ -19,7 +19,6 @@ import android.os.Handler; import android.os.IBinder; import android.os.RemoteException; -import android.provider.Settings.System; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; @@ -144,50 +143,63 @@ private void buildContactList(List listContact) { mListContact = listContact; Collections.sort(mListContact, new ComparatorContactListByStatusAndName()); + Collections.sort(groupName); for (Contact contact : mListContact) { for (String group : contact.getGroups()) { - if (!groupMap.containsKey(group)) { - groupMap.put(group, new ArrayList()); - groupName.add(group); - } - try { - if (!groupMap.get(group).contains(contact)) - groupMap.get(group).add(contact); - } catch (NullPointerException e) { - Log.e(TAG, "Failed to find group in groupMap", e); - } + addGroup(group); + addContactInGroup(contact, group); } if (contact.getGroups().isEmpty()) { - if (!groupMap.containsKey(DEFAULT_GROUP)) { - groupMap.put(DEFAULT_GROUP, new ArrayList()); - groupName.add(DEFAULT_GROUP); - } - groupMap.get(DEFAULT_GROUP).add(contact); + addGroup(DEFAULT_GROUP); + addContactInGroup(contact, DEFAULT_GROUP); } } mAdapter = new MyExpandableListAdapter(); setListAdapter(mAdapter); } + protected void addGroup(String group) { + if (!groupMap.containsKey(group)) { + groupMap.put(group, new ArrayList()); + groupName.add(group); + } + } + + protected void addContactInGroup(Contact c, String group) { + boolean found = false; + for (Contact tmpContact : groupMap.get(group)) { + if (c.getJID().equals(tmpContact.getJID())) { + found = true; + break; + } + } + if (!found) + groupMap.get(group).add(c); + } + + protected void delContactInGroup(Contact c, String group) { + for (Contact tmpContact : groupMap.get(group)) { + if (c.getJID().equals(tmpContact.getJID())) { + groupMap.get(group).remove(tmpContact); + c.delGroup(group); + break; + } + } + if (groupMap.get(group).isEmpty()) { + groupMap.remove(group); + groupName.remove(group); + } + } + private class BeemRosterListener extends IBeemRosterListener.Stub { @Override public void onEntriesAdded(List addresses) throws RemoteException { - // Log.d("CONTACTLIST", "DEBUG - ONENTRIESADDED()"+ addresses.size()); for (String str : addresses) { Contact curContact = mRoster.getContact(str); - // Log.d("CONTACTLIST", "DEBUG - ONENTRIESADDED() group size " + curContact.getGroups().size() ); for (String group : curContact.getGroups()) { - if (!groupMap.containsKey(group)) { - groupMap.put(group, new ArrayList()); - groupName.add(group); - } - try { - // Log.d("CONTACTLIST", "DEBUG - ONENTRIESADD"); - groupMap.get(group).add(curContact); - } catch (NullPointerException e) { - Log.e(TAG, "Failed to find group in groupMap", e); - } + addGroup(group); + addContactInGroup(curContact, group); } } mHandler.post(new RunnableChange()); @@ -195,45 +207,28 @@ @Override public void onEntriesDeleted(List addresses) throws RemoteException { - // Log.d("CONTACTLIST", "DEBUG - ONENTRIESDELETED() " + addresses.get(0)); + int nbEntries2delete = addresses.size(); for (String user : addresses) { List tmpListContact = groupMap.get(DEFAULT_GROUP); for (Contact contact : tmpListContact) { - if (contact.getJID().equals(user)) - tmpListContact.remove(contact); + if (contact.getJID().equals(user)) { + --nbEntries2delete; + delContactInGroup(contact, DEFAULT_GROUP); + } + if (nbEntries2delete == 0) + break; } } - if (groupMap.get(DEFAULT_GROUP).isEmpty()) { - groupMap.remove(DEFAULT_GROUP); - groupName.remove(DEFAULT_GROUP); - } mHandler.post(new RunnableChange()); } @Override public void onEntriesUpdated(List addresses) throws RemoteException { - // Log.d("CONTACTLIST", "DEBUG - ONENTRIESUPDATED()"); for (String str : addresses) { Contact curContact = mRoster.getContact(str); for (String group : curContact.getGroups()) { - if (!groupMap.containsKey(group)) { - groupMap.put(group, new ArrayList()); - groupName.add(group); - // Log.d("CONTACTLIST", "DEBUG - ONENTRIESUPDATED() found"); - groupMap.get(group).add(curContact); - } else { - boolean found = false; - for (Contact tempContact : groupMap.get(group)) { - if (tempContact.getJID().equals(str)) { - found = true; - break; - } - } - if (!found) { - // Log.d("CONTACTLIST", "DEBUG - ONENTRIESUPDATED() not found"); - groupMap.get(group).add(curContact); - } - } + addGroup(group); + addContactInGroup(curContact, group); } } mHandler.post(new RunnableChange()); @@ -241,7 +236,6 @@ @Override public void onPresenceChanged(PresenceAdapter presence) throws RemoteException { - // Log.d("CONTACTLIST", "DEBUG - ONPRESENCECHANGED()"); for (Contact curContact : mListContact) { if (curContact.getJID().equals(StringUtils.parseBareAddress(presence.getFrom()))) { curContact.setStatus(mRoster.getPresence(StringUtils.parseBareAddress(presence.getFrom()))); @@ -260,24 +254,14 @@ @Override public void onEntryDeleteFromGroup(String group, String jid) throws RemoteException { - // Log.d("CONTACTLIST", "DEBUG - ONENTRYDELETEFROMGROUP()"); for (Contact contact : mListContact) { - if (jid.equals(contact.getJID()) - && (contact.getGroups().contains(group) || contact.getGroups().size() == 0)) { - groupMap.get(group).remove(contact); - contact.delGroup(group); - if (groupMap.get(group).size() == 0) { - groupMap.remove(group); - groupName.remove(group); + if (jid.equals(contact.getJID())) { + delContactInGroup(contact, group); + if (contact.getGroups().size() == 0) { + addGroup(DEFAULT_GROUP); + addContactInGroup(contact, DEFAULT_GROUP); } - if (contact.getGroups().size() == 0) { - if (!groupMap.containsKey(DEFAULT_GROUP)) { - groupMap.put(DEFAULT_GROUP, new ArrayList()); - groupName.add(DEFAULT_GROUP); - } - groupMap.get(DEFAULT_GROUP).add(contact); - } - + break; } } mHandler.post(new RunnableChange());