--- a/src/com/beem/project/beem/ui/ContactList.java Wed Jun 17 18:14:08 2009 +0200
+++ b/src/com/beem/project/beem/ui/ContactList.java Wed Jun 17 18:33:14 2009 +0200
@@ -38,6 +38,117 @@
public class ContactList extends ExpandableListActivity {
+ private static final String TAG = "CONTACTLIST_ACT";
+ private static final String DEFAULT_GROUP = "Default";
+ private IXmppFacade mService = null;
+ private MyExpandableListAdapter mAdapter;
+ private BeemApplication mBeemApplication;
+ private BeemRosterListener mRosterListener;
+ private IRoster mRoster;
+ private Map<String, List<Contact>> groupMap;
+ private List<String> groupName;
+ private List<Contact> mListContact;
+ private Handler mHandler;
+
+ /**
+ * Callback for menu creation.
+ * @param menu the menu created
+ * @return true on success, false otherwise
+ */
+ @Override
+ public final boolean onCreateOptionsMenu(Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.contact_list, menu);
+ return true;
+ }
+
+ /**
+ * Callback for menu item selected.
+ * @param item the item selected
+ * @return true on success, false otherwise
+ */
+ @Override
+ public final boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.contact_list_menu_settings:
+ startActivity(new Intent(this, EditSettings.class));
+ return true;
+ case R.id.contact_list_menu_add_contact:
+ startActivity(new Intent(ContactList.this, AddContact.class));
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ @Override
+ protected void onCreate(Bundle saveBundle) {
+ super.onCreate(saveBundle);
+ mHandler = new Handler();
+ mRosterListener = new BeemRosterListener();
+ mBeemApplication = BeemApplication.getApplication(this);
+ groupMap = new HashMap<String, List<Contact>>();
+ groupName = new ArrayList<String>();
+ mBeemApplication.callWhenConnectedToServer(mHandler, new Runnable() {
+
+ @Override
+ public void run() {
+ mService = mBeemApplication.getXmppFacade();
+ try {
+ mRoster = mService.getRoster();
+ } catch (RemoteException e1) {
+ Log.e(TAG, "Get roster failed", e1);
+ }
+ if (mRoster != null) {
+ try {
+ mRoster.addConnectionListener(mRosterListener);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ }
+ callbackShowContactList();
+ }
+ });
+ }
+
+ private void callbackShowContactList() {
+ if (mRoster != null) {
+ try {
+ buildContactList(mRoster.getContactList());
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private void buildContactList(List<Contact> listContact) {
+ mListContact = listContact;
+ for (Contact contact : listContact) {
+ 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);
+ }
+ }
+ 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);
+ }
+ }
+ mAdapter = new MyExpandableListAdapter();
+ setListAdapter(mAdapter);
+ }
+
private class BeemRosterListener extends IBeemRosterListener.Stub {
@Override
@@ -56,13 +167,7 @@
}
}
}
- mHandler.post(new Runnable() {
-
- @Override
- public void run() {
- mAdapter.changed();
- }
- });
+ mHandler.post(new RunnableChange());
}
@Override
@@ -79,13 +184,7 @@
}
}
}
- mHandler.post(new Runnable() {
-
- @Override
- public void run() {
- mAdapter.changed();
- }
- });
+ mHandler.post(new RunnableChange());
}
@Override
@@ -112,13 +211,7 @@
}
}
}
- mHandler.post(new Runnable() {
-
- @Override
- public void run() {
- mAdapter.changed();
- }
- });
+ mHandler.post(new RunnableChange());
}
@Override
@@ -126,18 +219,19 @@
for (Contact curContact : mListContact) {
if (curContact.getJID().equals(StringUtils.parseBareAddress(presence.getFrom()))) {
curContact.setStatus(presence);
- mHandler.post(new Runnable() {
-
- @Override
- public void run() {
- mAdapter.changed();
- }
- });
+ mHandler.post(new RunnableChange());
return;
}
}
}
+ private class RunnableChange implements Runnable {
+ @Override
+ public void run() {
+ mAdapter.changed();
+ }
+ }
+
}
private class MyExpandableListAdapter implements ExpandableListAdapter {
@@ -191,27 +285,27 @@
ImageView imgV = (ImageView) view.findViewById(R.id.contactliststatus);
Drawable imageDrawable = null;
switch (curContact.getStatus()) {
- case Status.CONTACT_STATUS_AVAILABLE:
- imageDrawable = getResources().getDrawable(R.drawable.online);
- break;
- case Status.CONTACT_STATUS_AVAILABLE_FOR_CHAT:
- imageDrawable = getResources().getDrawable(R.drawable.chat);
- break;
- case Status.CONTACT_STATUS_AWAY:
- imageDrawable = getResources().getDrawable(R.drawable.away);
- break;
- case Status.CONTACT_STATUS_BUSY:
- imageDrawable = getResources().getDrawable(R.drawable.dnd);
- break;
- case Status.CONTACT_STATUS_DISCONNECT:
- imageDrawable = getResources().getDrawable(R.drawable.offline);
- break;
- case Status.CONTACT_STATUS_UNAVAILABLE:
- imageDrawable = getResources().getDrawable(R.drawable.requested);
- break;
- default:
- imageDrawable = getResources().getDrawable(R.drawable.error);
- break;
+ case Status.CONTACT_STATUS_AVAILABLE:
+ imageDrawable = getResources().getDrawable(R.drawable.online);
+ break;
+ case Status.CONTACT_STATUS_AVAILABLE_FOR_CHAT:
+ imageDrawable = getResources().getDrawable(R.drawable.chat);
+ break;
+ case Status.CONTACT_STATUS_AWAY:
+ imageDrawable = getResources().getDrawable(R.drawable.away);
+ break;
+ case Status.CONTACT_STATUS_BUSY:
+ imageDrawable = getResources().getDrawable(R.drawable.dnd);
+ break;
+ case Status.CONTACT_STATUS_DISCONNECT:
+ imageDrawable = getResources().getDrawable(R.drawable.offline);
+ break;
+ case Status.CONTACT_STATUS_UNAVAILABLE:
+ imageDrawable = getResources().getDrawable(R.drawable.requested);
+ break;
+ default:
+ imageDrawable = getResources().getDrawable(R.drawable.error);
+ break;
}
imgV.setImageDrawable(imageDrawable);
@@ -280,7 +374,7 @@
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
- ViewGroup parent) {
+ ViewGroup parent) {
View v;
if (convertView == null) {
v = LayoutInflater.from(ContactList.this).inflate(R.layout.contactlistcontact, null);
@@ -368,122 +462,4 @@
observers.remove(observer);
}
}
-
- private static final String TAG = "CONTACTLIST_ACT";
- private static final String DEFAULT_GROUP = "Default";
- private IXmppFacade mService = null;
- private MyExpandableListAdapter mAdapter;
- private BeemApplication mBeemApplication;
- private BeemRosterListener mRosterListener;
- private IRoster mRoster;
- private Map<String, List<Contact>> groupMap;
- private List<String> groupName;
- private List<Contact> mListContact;
-
- private Handler mHandler;
-
- private void buildContactList(List<Contact> listContact) {
- mListContact = listContact;
- for (Contact contact : listContact) {
- 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);
- }
- }
- 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);
- }
- }
- mAdapter = new MyExpandableListAdapter();
- setListAdapter(mAdapter);
- }
-
- private void callbackShowContactList() {
- if (mRoster != null) {
- try {
- buildContactList(mRoster.getContactList());
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- }
- }
-
- @Override
- protected void onCreate(Bundle saveBundle) {
- Log.d(getString(R.string.contact_list_tag), "onCreate() started");
- super.onCreate(saveBundle);
- mHandler = new Handler();
- mRosterListener = new BeemRosterListener();
- mBeemApplication = BeemApplication.getApplication(this);
- groupMap = new HashMap<String, List<Contact>>();
- groupName = new ArrayList<String>();
- mBeemApplication.callWhenConnectedToServer(mHandler, new Runnable() {
-
- @Override
- public void run() {
- mService = mBeemApplication.getXmppFacade();
- try {
- mRoster = mService.getRoster();
- } catch (RemoteException e1) {
- Log.e(TAG, "Get roster failed", e1);
- }
- if (mRoster != null) {
- try {
- mRoster.addConnectionListener(mRosterListener);
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- }
- callbackShowContactList();
- }
- });
- Log.d(getString(R.string.contact_list_tag), "onCreate() ended");
- }
-
- /**
- * Callback for menu creation.
- *
- * @param menu
- * the menu created
- * @return true on success, false otherwise
- */
- @Override
- public final boolean onCreateOptionsMenu(Menu menu) {
- super.onCreateOptionsMenu(menu);
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.contact_list, menu);
- return true;
- }
-
- /**
- * Callback for menu item selected.
- *
- * @param item
- * the item selected
- * @return true on success, false otherwise
- */
- @Override
- public final boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.contact_list_menu_settings:
- startActivity(new Intent(this, EditSettings.class));
- return true;
- case R.id.contact_list_menu_add_contact:
- startActivity(new Intent(ContactList.this, AddContact.class));
- return true;
- default:
- return false;
- }
- }
}