--- a/src/com/beem/project/beem/service/Contact.java Fri Apr 03 00:13:52 2009 +0200
+++ b/src/com/beem/project/beem/service/Contact.java Fri Apr 03 00:43:02 2009 +0200
@@ -12,6 +12,14 @@
*/
public class Contact implements Parcelable {
+ public static final int CONTACT_STATUS_DISCONNECT = 100;
+ public static final int CONTACT_STATUS_UNAVAILABLE = 200;
+ public static final int CONTACT_STATUS_AWAY = 300;
+ public static final int CONTACT_STATUS_BUSY = 400;
+ public static final int CONTACT_STATUS_AVAILABLE = 500;
+ public static final int CONTACT_STATUS_AVAILABLE_FOR_CHAT = 600;
+
+
/**
* Parcelable.Creator needs by Android.
*/
@@ -31,6 +39,49 @@
private String mJID;
private int mID;
private int mStatus;
+
+ /**
+ * @return the mID
+ */
+ public int getID() {
+ return mID;
+ }
+
+ /**
+ * @param mid the mID to set
+ */
+ public void setID(int mid) {
+ mID = mid;
+ }
+
+ /**
+ * @return the mStatus
+ */
+ public int getStatus() {
+ return mStatus;
+ }
+
+ /**
+ * @param status the mStatus to set
+ */
+ public void setStatus(int status) {
+ mStatus = status;
+ }
+
+ /**
+ * @return the mMsgState
+ */
+ public String getMMsgState() {
+ return mMsgState;
+ }
+
+ /**
+ * @param msgState the mMsgState to set
+ */
+ public void setMMsgState(String msgState) {
+ mMsgState = msgState;
+ }
+
private String mMsgState;
/**
--- a/src/com/beem/project/beem/service/RosterAdapter.java Fri Apr 03 00:13:52 2009 +0200
+++ b/src/com/beem/project/beem/service/RosterAdapter.java Fri Apr 03 00:43:02 2009 +0200
@@ -12,9 +12,12 @@
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.RosterGroup;
+import org.jivesoftware.smack.RosterListener;
import org.jivesoftware.smack.XMPPException;
+import org.jivesoftware.smack.packet.Presence;
import android.os.RemoteException;
+import android.util.Log;
/**
* This class implement a Roster adapter for BEEM.
@@ -24,6 +27,64 @@
private Roster mAdaptee;
private Map<String, Contact> mContacts = new HashMap<String, Contact>();
+ private RosterListener mRosterListener = new RosterListener() {
+
+ @Override
+ public void presenceChanged(Presence presence) {
+ String user = presence.getFrom();
+ Presence bestPresence = mAdaptee.getPresence(user);
+ Contact c = mContacts.get(user);
+ if (c == null) {
+ c = new Contact(user);
+ mContacts.put(user, c);
+ }
+ int status;
+ if (bestPresence.getType().equals(Presence.Type.unavailable))
+ status = Contact.CONTACT_STATUS_DISCONNECT;
+ else {
+ switch (bestPresence.getMode()) {
+ case available:
+ status = Contact.CONTACT_STATUS_AVAILABLE;
+ break;
+ case away:
+ status = Contact.CONTACT_STATUS_AWAY;
+ break;
+ case chat:
+ status = Contact.CONTACT_STATUS_AVAILABLE_FOR_CHAT;
+ break;
+ case dnd:
+ status = Contact.CONTACT_STATUS_BUSY;
+ break;
+ case xa:
+ status = Contact.CONTACT_STATUS_UNAVAILABLE;
+ break;
+ default:
+ Log.e("RosterAdapter", "Status mode non gere");
+ status = Contact.CONTACT_STATUS_DISCONNECT;
+ break;
+ }
+ }
+ c.setStatus(status);
+ }
+
+ @Override
+ public void entriesUpdated(Collection<String> arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void entriesDeleted(Collection<String> arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void entriesAdded(Collection<String> arg0) {
+ // TODO Auto-generated method stub
+
+ }
+ };
/**
* Constructor.
@@ -31,9 +92,11 @@
*/
public RosterAdapter(final Roster roster) {
mAdaptee = roster;
+ roster.addRosterListener(mRosterListener);
for (RosterEntry entry : roster.getEntries()) {
String user = entry.getUser();
- mContacts.put(user, new Contact(user));
+ if ( !mContacts.containsKey(user))
+ mContacts.put(user, new Contact(user));
}
}