# HG changeset patch # User Da Risk # Date 1238712182 -7200 # Node ID ae9ca6ed909575a3fabc4b21020a511b79369c99 # Parent c91278dda16610e45f15b1e9b34771cef91c3dc7 Add a listner for presence message in the RosterAdapter class diff -r c91278dda166 -r ae9ca6ed9095 src/com/beem/project/beem/service/Contact.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; /** diff -r c91278dda166 -r ae9ca6ed9095 src/com/beem/project/beem/service/RosterAdapter.java --- 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 mContacts = new HashMap(); + 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 arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void entriesDeleted(Collection arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void entriesAdded(Collection 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)); } }