MOdification de la classe ContactList.
AddGroup, DelGroup AddContactInList DelContactInList
sont des fonctions de la classe.
--- 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());