Add a listner for presence message in the RosterAdapter class
authorDa Risk <darisk972@gmail.com>
Fri, 03 Apr 2009 00:43:02 +0200
changeset 58 ae9ca6ed9095
parent 57 c91278dda166
child 59 ff98ffba21f4
child 61 08cfba11099a
child 67 8c3870db8e31
Add a listner for presence message in the RosterAdapter class
src/com/beem/project/beem/service/Contact.java
src/com/beem/project/beem/service/RosterAdapter.java
--- 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));
 	}
     }