MOdification de la classe ContactList.
authorMarseille
Sun, 05 Jul 2009 20:22:33 +0200
changeset 330 52e3cbc03730
parent 326 c5f000965df8
child 331 acfdfca27cc8
MOdification de la classe ContactList. AddGroup, DelGroup AddContactInList DelContactInList sont des fonctions de la classe.
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<Contact> listContact) {
 	mListContact = listContact;
 	Collections.sort(mListContact, new ComparatorContactListByStatusAndName<Contact>());
+	Collections.sort(groupName);
 	for (Contact contact : mListContact) {
 	    for (String group : contact.getGroups()) {
-		if (!groupMap.containsKey(group)) {
-		    groupMap.put(group, new ArrayList<Contact>());
-		    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<Contact>());
-		    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<Contact>());
+	    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<String> 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<Contact>());
-			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<String> addresses) throws RemoteException {
-	    // Log.d("CONTACTLIST", "DEBUG - ONENTRIESDELETED() " + addresses.get(0));
+	    int nbEntries2delete = addresses.size();
 	    for (String user : addresses) {
 		List<Contact> 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<String> 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<Contact>());
-			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<Contact>());
-			    groupName.add(DEFAULT_GROUP);
-			}
-			groupMap.get(DEFAULT_GROUP).add(contact);
-		    }
-
+		    break;
 		}
 	    }
 	    mHandler.post(new RunnableChange());