# HG changeset patch # User Da Risk # Date 1238086881 -3600 # Node ID 3e76846c48a978cbfc08103dc65732addce3dfdc # Parent 4145f456d73be52526545f08e5d64ca726c94119 We can now get the contact list of the user. Need to complete the Contact class and try to get some information on the mobile contact directory. diff -r 4145f456d73b -r 3e76846c48a9 checkstyle.xml --- a/checkstyle.xml Mon Mar 23 16:54:42 2009 +0100 +++ b/checkstyle.xml Thu Mar 26 18:01:21 2009 +0100 @@ -189,7 +189,9 @@ - + diff -r 4145f456d73b -r 3e76846c48a9 src/com/beem/project/beem/BeemService.java --- a/src/com/beem/project/beem/BeemService.java Mon Mar 23 16:54:42 2009 +0100 +++ b/src/com/beem/project/beem/BeemService.java Thu Mar 26 18:01:21 2009 +0100 @@ -25,11 +25,14 @@ import android.widget.Toast; import com.beem.project.beem.service.XMPPConnectionAdapter; +import com.beem.project.beem.service.XMPPFacade; +import com.beem.project.beem.service.aidl.IRoster; import com.beem.project.beem.service.aidl.IXMPPConnection; import com.beem.project.beem.service.aidl.IXMPPFacade; /** + * This class is for the Beem service. * @author darisk - * + * */ public class BeemService extends Service { @@ -41,30 +44,7 @@ private String mPassword; private String mHost; - private IXMPPFacade.Stub bind = new IXMPPFacade.Stub() { - - @Override - public IXMPPConnection getXMPPConnection() throws RemoteException { - return connection; - } - - @Override - public void disconnect() throws RemoteException { - connection.disconnect(); - } - - - @Override - public void connectAsync() throws RemoteException { - connection.connectAsync(mLogin, mPassword, "BEEM"); - } - - - @Override - public void connectSync() throws RemoteException { - connection.connectSync(mLogin, mPassword, "BEEM"); - } - }; + private IXMPPFacade.Stub mBind; /* * (non-Javadoc) @@ -74,7 +54,7 @@ @Override public IBinder onBind(Intent intent) { showBasicNotification(R.string.BeemServiceCreated); - return bind; + return mBind; // to forbid a client to bind // return null; } @@ -89,9 +69,10 @@ getString(R.string.PreferencePasswordKey), ""); mHost = settings.getString(getString(R.string.PreferenceHostKey), ""); notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); - connection = new XMPPConnectionAdapter("10.0.2.2"); // address + connection = new XMPPConnectionAdapter("10.0.2.2", mLogin, mPassword); // address + mBind = new XMPPFacade((XMPPConnectionAdapter) connection); } - + private void showBasicNotification(int stringResource) { String text = (String) getText(stringResource); Notification notif = new Notification(R.drawable.logo, text, System @@ -108,7 +89,7 @@ @Override public void onStart(Intent intent, int startId) { try { - connection.connectSync(mLogin, mPassword, "BEEM"); + connection.connectSync(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); diff -r 4145f456d73b -r 3e76846c48a9 src/com/beem/project/beem/service/Contact.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/com/beem/project/beem/service/Contact.java Thu Mar 26 18:01:21 2009 +0100 @@ -0,0 +1,93 @@ +/** + * + */ +package com.beem.project.beem.service; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * This class contains informations on a jabber contact. + * @author darisk + */ +public class Contact implements Parcelable { + + /** + * Parcelable.Creator needs by Android. + */ + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + + @Override + public Contact createFromParcel(Parcel source) { + return new Contact(source); + } + + @Override + public Contact[] newArray(int size) { + return new Contact[size]; + } + }; + + private String mJID; + private int mID; + private int mStatus; + private String mMsgState; + + /** + * Constructor. + */ + public Contact() { + // TODO Auto-generated constructor stub + } + + /** + * Constructor. + * @param jid JID of the contact + */ + public Contact(final String jid) { + mJID = jid; + } + + /** + * Construct a contact from a parcel. + * @param in parcel to use for construction + */ + private Contact(final Parcel in) { + + } + + /** + * Get the Jabber ID of the contact. + * @return the Jabber ID + */ + public String getJID() { + return mJID; + } + + /** + * Set the Jabber ID of the contact. + * @param mjid the jabber ID to set + */ + public void setJID(String mjid) { + mJID = mjid; + } + + /** + * {@inheritDoc} + */ + @Override + public int describeContents() { + // TODO Auto-generated method stub + return 0; + } + + /** + * {@inheritDoc} + */ + @Override + public void writeToParcel(Parcel dest, int flags) { + // TODO Auto-generated method stub + } + + +} diff -r 4145f456d73b -r 3e76846c48a9 src/com/beem/project/beem/service/RosterAdapter.java --- a/src/com/beem/project/beem/service/RosterAdapter.java Mon Mar 23 16:54:42 2009 +0100 +++ b/src/com/beem/project/beem/service/RosterAdapter.java Thu Mar 26 18:01:21 2009 +0100 @@ -4,8 +4,9 @@ package com.beem.project.beem.service; import java.util.ArrayList; -import java.util.Collection; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.jivesoftware.smack.Roster; import org.jivesoftware.smack.RosterEntry; @@ -13,49 +14,76 @@ import android.os.RemoteException; -import com.beem.project.beem.service.aidl.IRosterEntry; -import com.beem.project.beem.service.aidl.IRoster.Stub; - /** + * This class implement a Roster adapter for BEEM. * @author darisk - * */ public class RosterAdapter extends com.beem.project.beem.service.aidl.IRoster.Stub { - private Roster adaptee; - - public RosterAdapter(Roster roster) { - adaptee = roster; - } - - @Override - public IRosterEntry createEntry(String user, String name, String[] groups) - throws RemoteException { - try { - adaptee.createEntry(user, name, groups); - } catch (XMPPException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + private Roster mAdaptee; + private Map mContacts = new HashMap(); + + /** + * Constructor. + * @param roster the roster to adapt + */ + public RosterAdapter(final Roster roster) { + mAdaptee = roster; + for (RosterEntry entry : roster.getEntries()) { + String user = entry.getUser(); + mContacts.put(user, new Contact(user)); } - return null; } + /** + * {@inheritDoc} + */ @Override public void createGroup(String groupname) throws RemoteException { // TODO Auto-generated method stub - adaptee.createGroup(groupname); + mAdaptee.createGroup(groupname); + } + + /** + * {@inheritDoc} + */ + @Override + public Contact addContact(String user, String name, String[] groups) throws RemoteException { + try { + mAdaptee.createEntry(user, name, groups); + Contact res = new Contact(user); + mContacts.put(user, res); + return res; + } catch (XMPPException e) { + return null; + } } + /** + * {@inheritDoc} + */ @Override - public List getEntries() throws RemoteException { + public void deleteContact(Contact contact) throws RemoteException { // TODO Auto-generated method stub - Collection col = adaptee.getEntries(); - ArrayList result = new ArrayList(col.size()); - for (RosterEntry rosterEntry : col ) { - result.add(new RosterEntryAdapter(rosterEntry)); - } - return result; + + } + + /** + * {@inheritDoc} + */ + @Override + public Contact getContact(String jid) throws RemoteException { + return mContacts.get(jid); } - + + /** + * {@inheritDoc} + */ + @Override + public List getContactList() throws RemoteException { + List res = new ArrayList(); + res.addAll(mContacts.values()); + return res; + } } diff -r 4145f456d73b -r 3e76846c48a9 src/com/beem/project/beem/service/XMPPConnectionAdapter.java --- a/src/com/beem/project/beem/service/XMPPConnectionAdapter.java Mon Mar 23 16:54:42 2009 +0100 +++ b/src/com/beem/project/beem/service/XMPPConnectionAdapter.java Thu Mar 26 18:01:21 2009 +0100 @@ -1,10 +1,11 @@ /** - * + * */ package com.beem.project.beem.service; import org.jivesoftware.smack.ConnectionConfiguration; import org.jivesoftware.smack.ConnectionListener; +import org.jivesoftware.smack.Roster; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smackx.ServiceDiscoveryManager; @@ -12,6 +13,7 @@ import android.os.RemoteCallbackList; import android.os.RemoteException; +import android.util.Log; import com.beem.project.beem.BeemException; import com.beem.project.beem.service.aidl.IBeemConnectionListener; @@ -19,147 +21,223 @@ import com.beem.project.beem.service.aidl.IXMPPConnection; /** + * This class implements an adapter for XMPPConnection. * @author darisk - * */ public class XMPPConnectionAdapter extends IXMPPConnection.Stub { - private XMPPConnection adaptee; - private BeemException lastException; + private static final String TAG = "XMPPConnectionAdapter"; + private XMPPConnection mAdaptee; + private BeemException mLastException; + private String mLogin; + private String mPassword; + private RosterAdapter mRoster; - private RemoteCallbackList mRemoteConnListeners = new RemoteCallbackList(); + private RemoteCallbackList mRemoteConnListeners = + new RemoteCallbackList(); private ConnexionListenerAdapter mConListener = new ConnexionListenerAdapter(); - - public XMPPConnectionAdapter(XMPPConnection con) { - adaptee = con; - + + /** + * Constructor. + * @param con The connection to adapt + * @param login The login to use + * @param password The password to use + */ + public XMPPConnectionAdapter(final XMPPConnection con, final String login, final String password) { + mAdaptee = con; + mLogin = login; + mPassword = password; } - public XMPPConnectionAdapter(String serviceName) { - this(new XMPPConnection(serviceName)); - } - - public XMPPConnectionAdapter(ConnectionConfiguration config) { - this(new XMPPConnection(config)); + /** + * Constructor. + * @param serviceName name of the service to connect to + * @param login login to use on connect + * @param password password to use on connect + */ + public XMPPConnectionAdapter(final String serviceName, final String login, final String password) { + this(new XMPPConnection(serviceName), login, password); } + /** + * Constructor. + * @param config Configuration to use in order to connect + * @param login login to use on connect + * @param password password to use on connect + */ + public XMPPConnectionAdapter(final ConnectionConfiguration config, final String login, final String password) { + this(new XMPPConnection(config), login, password); + } + + /** + * {@inheritDoc} + */ @Override - public boolean connectSync(String username, String password, String resource) - throws RemoteException { - try { - adaptee.connect(); - this.initFeatures(); // pour declarer les features xmpp qu'on supporte - adaptee.addConnectionListener(mConListener); - adaptee.login(username, password, resource); - lastException = null; + public boolean connectSync() throws RemoteException { + try { + mAdaptee.connect(); + mAdaptee.addConnectionListener(mConListener); + mAdaptee.login(mLogin, mPassword, "BEEM"); + // TODO find why this cause a null pointer exception + // this.initFeatures(); // pour declarer les features xmpp qu'on supporte + mLastException = null; triggerAsynchronousConnectEvent(); return true; } catch (XMPPException e) { - lastException = new BeemException(e); + mLastException = new BeemException(e); } return false; } - public boolean disconnect() { - adaptee.disconnect(); - lastException = null; + /** + * {@inheritDoc} + */ + @Override + public boolean disconnect() { + mAdaptee.disconnect(); + mLastException = null; return true; } + /** + * {@inheritDoc} + */ @Override public IRoster getRoster() throws RemoteException { - return new RosterAdapter(adaptee.getRoster()); + if (mRoster != null) + return mRoster; + Roster adap = mAdaptee.getRoster(); + if (adap == null) + return null; + mRoster = new RosterAdapter(adap); + return mRoster; } + /** + * {@inheritDoc} + */ @Override - public void connectAsync(final String username, final String password, final String resource) - throws RemoteException { + public final void connectAsync() throws RemoteException { Thread t = new Thread(new Runnable() { @Override public void run() { try { - connectSync(username,password,resource); + connectSync(); } catch (RemoteException e) { - + Log.e(TAG, "Error while connecting", e); } } }); t.start(); } + /** + * {@inheritDoc} + */ @Override - public void addConnectionListener(IBeemConnectionListener listen) - throws RemoteException { + public void addConnectionListener(IBeemConnectionListener listen) throws RemoteException { if (listen != null) mRemoteConnListeners.register(listen); } + /** + * {@inheritDoc} + */ @Override - public void removeConnectionListener(IBeemConnectionListener listen) - throws RemoteException { + public void removeConnectionListener(IBeemConnectionListener listen) throws RemoteException { if (listen != null) mRemoteConnListeners.unregister(listen); } + /** + * Trigger Connection event. + */ private void triggerAsynchronousConnectEvent() { mConListener.onConnect(); } - + + /** + * Listener for XMPP connection events. + * It will calls the remote listeners for connexion events. + * @author darisk + */ private class ConnexionListenerAdapter implements ConnectionListener { + /** + * Defaut constructor. + */ + public ConnexionListenerAdapter() { + // TODO Auto-generated constructor stub + } + + /** + * Method to execute when a connection event occurs. + */ public void onConnect() { - final int N = mRemoteConnListeners.beginBroadcast(); + final int n = mRemoteConnListeners.beginBroadcast(); - for (int i = 0; i < N; i++) { + for (int i = 0; i < n; i++) { IBeemConnectionListener listener = mRemoteConnListeners.getBroadcastItem(i); try { listener.onConnect(); } catch (RemoteException e) { // The RemoteCallbackList will take care of removing the // dead listeners. + Log.w(TAG, "Error while triggering remote connection listeners", e); } } mRemoteConnListeners.finishBroadcast(); } - + + /** + * {@inheritDoc} + */ @Override public void connectionClosed() { - final int N = mRemoteConnListeners.beginBroadcast(); + final int n = mRemoteConnListeners.beginBroadcast(); - for (int i = 0; i < N; i++) { + for (int i = 0; i < n; i++) { IBeemConnectionListener listener = mRemoteConnListeners.getBroadcastItem(i); try { listener.connectionClosed(); } catch (RemoteException e) { // The RemoteCallbackList will take care of removing the // dead listeners. + Log.w(TAG, "Error while triggering remote connection listeners", e); } } mRemoteConnListeners.finishBroadcast(); } + /** + * {@inheritDoc} + */ @Override public void connectionClosedOnError(Exception arg0) { - final int N = mRemoteConnListeners.beginBroadcast(); + final int n = mRemoteConnListeners.beginBroadcast(); - for (int i = 0; i < N; i++) { + for (int i = 0; i < n; i++) { IBeemConnectionListener listener = mRemoteConnListeners.getBroadcastItem(i); try { listener.connectionClosedOnError(); } catch (RemoteException e) { // The RemoteCallbackList will take care of removing the // dead listeners. + Log.w(TAG, "Error while triggering remote connection listeners", e); } } mRemoteConnListeners.finishBroadcast(); } + /** + * {@inheritDoc} + */ @Override public void reconnectingIn(int arg0) { - final int N = mRemoteConnListeners.beginBroadcast(); + final int n = mRemoteConnListeners.beginBroadcast(); - for (int i = 0; i < N; i++) { + for (int i = 0; i < n; i++) { IBeemConnectionListener listener = mRemoteConnListeners.getBroadcastItem(i); try { listener.reconnectingIn(arg0); @@ -171,93 +249,75 @@ mRemoteConnListeners.finishBroadcast(); } + /** + * {@inheritDoc} + */ @Override public void reconnectionFailed(Exception arg0) { - final int N = mRemoteConnListeners.beginBroadcast(); + final int r = mRemoteConnListeners.beginBroadcast(); - for (int i = 0; i < N; i++) { + for (int i = 0; i < r; i++) { IBeemConnectionListener listener = mRemoteConnListeners.getBroadcastItem(i); try { listener.reconnectionFailed(); } catch (RemoteException e) { // The RemoteCallbackList will take care of removing the // dead listeners. + Log.w(TAG, "Error while triggering remote connection listeners", e); } } mRemoteConnListeners.finishBroadcast(); } + /** + * {@inheritDoc} + */ @Override public void reconnectionSuccessful() { - final int N = mRemoteConnListeners.beginBroadcast(); + final int n = mRemoteConnListeners.beginBroadcast(); - for (int i = 0; i < N; i++) { + for (int i = 0; i < n; i++) { IBeemConnectionListener listener = mRemoteConnListeners.getBroadcastItem(i); try { listener.reconnectionSuccessful(); } catch (RemoteException e) { // The RemoteCallbackList will take care of removing the // dead listeners. + Log.w(TAG, "Error while triggering remote connection listeners", e); } } mRemoteConnListeners.finishBroadcast(); } - + } - /** - * @brief: enregistre les featues dispo dans notre version - Liste de features que Telepathy supporte: - "http://www.google.com/xmpp/protocol/session" - "http://www.google.com/transport/p2p" - "http://jabber.org/protocol/jingle" - "http://jabber.org/protocol/chatstates" - "http://jabber.org/protocol/nick" - "http://jabber.org/protocol/nick+notify" - "http://jabber.org/protocol/si" - "ttp://jabber.org/protocol/ibb" - "ttp://telepathy.freedesktop.org/xmpp/tubes" - "http://www.google.com/xmpp/protocol/voice/v1" - "http://jabber.org/protocol/jingle/description/audio" - "http://jabber.org/protocol/jingle/description/video" - Liste de features que pidgin `supporte' (on notera la cradence de l'annonce): - "jabber:iq:last" - "jabber:iq:oob" - "jabber:iq:time" - "jabber:iq:version" - "jabber:x:conference" - "urn:xmpp:attention:0" - "urn:xmpp:bob" - "urn:xmpp:ping" - "xmpp:urn:time" - "http://jabber.org/protocol/bytestreams" - "http://jabber.org/protocol/disco#info" - "http://jabber.org/protocol/disco#items" - "http://jabber.org/protocol/ibb" - "http://jabber.org/protocol/muc" - "http://jabber.org/protocol/muc#user" - "http://jabber.org/protocol/si" - "http://jabber.org/protocol/si/profile/file-transfer" - "http://jabber.org/protocol/xhtml-im" - "http://www.xmpp.org/extensions/xep-0199.html#ns" - "http://jabber.org/protocol/mood" - "http://jabber.org/protocol/mood+notify" - "http://jabber.org/protocol/nick" - "http://jabber.org/protocol/nick+notify" - "http://jabber.org/protocol/tune" - "http://jabber.org/protocol/tune+notify" - "http://www.xmpp.org/extensions/xep-0084.html#ns-metadata" - "http://www.xmpp.org/extensions/xep-0084.html#ns-data" - "http://www.xmpp.org/extensions/xep-0084.html#ns-metadata+notify" - "http://www.xmpp.org/extensions/xep-0167.html#ns" << Jingle RTP Sessions - */ - private void initFeatures() { - JingleManager.setJingleServiceEnabled(); - ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(adaptee); - sdm.addFeature("http://jabber.org/protocol/disco#info"); - //sdm.addFeature("http://jabber.org/protocol/nick"); + /** + * enregistre les features dispo dans notre version Liste de features que Telepathy supporte. + * "http://www.google.com/xmpp/protocol/session" "http://www.google.com/transport/p2p" + * "http://jabber.org/protocol/jingle" "http://jabber.org/protocol/chatstates" "http://jabber.org/protocol/nick" + * "http://jabber.org/protocol/nick+notify" "http://jabber.org/protocol/si" "ttp://jabber.org/protocol/ibb" + * "ttp://telepathy.freedesktop.org/xmpp/tubes" "http://www.google.com/xmpp/protocol/voice/v1" + * "http://jabber.org/protocol/jingle/description/audio" "http://jabber.org/protocol/jingle/description/video" Liste + * de features que pidgin `supporte' (on notera la cradence de l'annonce): "jabber:iq:last" "jabber:iq:oob" + * "jabber:iq:time" "jabber:iq:version" "jabber:x:conference" "urn:xmpp:attention:0" "urn:xmpp:bob" "urn:xmpp:ping" + * "xmpp:urn:time" "http://jabber.org/protocol/bytestreams" "http://jabber.org/protocol/disco#info" + * "http://jabber.org/protocol/disco#items" "http://jabber.org/protocol/ibb" "http://jabber.org/protocol/muc" + * "http://jabber.org/protocol/muc#user" "http://jabber.org/protocol/si" + * "http://jabber.org/protocol/si/profile/file-transfer" "http://jabber.org/protocol/xhtml-im" + * "http://www.xmpp.org/extensions/xep-0199.html#ns" "http://jabber.org/protocol/mood" + * "http://jabber.org/protocol/mood+notify" "http://jabber.org/protocol/nick" + * "http://jabber.org/protocol/nick+notify" "http://jabber.org/protocol/tune" + * "http://jabber.org/protocol/tune+notify" "http://www.xmpp.org/extensions/xep-0084.html#ns-metadata" + * "http://www.xmpp.org/extensions/xep-0084.html#ns-data" + * "http://www.xmpp.org/extensions/xep-0084.html#ns-metadata+notify" + * "http://www.xmpp.org/extensions/xep-0167.html#ns" << Jingle RTP Sessions + */ + private void initFeatures() { + JingleManager.setJingleServiceEnabled(); + ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(mAdaptee); + sdm.addFeature("http://jabber.org/protocol/disco#info"); + // sdm.addFeature("http://jabber.org/protocol/nick"); - } - + } } diff -r 4145f456d73b -r 3e76846c48a9 src/com/beem/project/beem/service/XMPPFacade.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/com/beem/project/beem/service/XMPPFacade.java Thu Mar 26 18:01:21 2009 +0100 @@ -0,0 +1,55 @@ +/** + * + */ +package com.beem.project.beem.service; +import android.os.RemoteException; + +import com.beem.project.beem.service.aidl.IRoster; +import com.beem.project.beem.service.aidl.IXMPPConnection; +import com.beem.project.beem.service.aidl.IXMPPFacade; +/** + * @author darisk + * + */ +public class XMPPFacade extends IXMPPFacade.Stub { + + private XMPPConnectionAdapter mConnexion; + + /** + * Constructor for XMPPFacade. + * @param connection the connection use by the facade + */ + public XMPPFacade(XMPPConnectionAdapter connection) { + this.mConnexion = connection; + } + + @Override + public void connectAsync() throws RemoteException { + // TODO Auto-generated method stub + mConnexion.connectAsync(); + } + + @Override + public void connectSync() throws RemoteException { + // TODO Auto-generated method stub + mConnexion.connectSync(); + } + + @Override + public IXMPPConnection createConnection() throws RemoteException { + // TODO Auto-generated method stub + return mConnexion; + } + + @Override + public void disconnect() throws RemoteException { + // TODO Auto-generated method stub + mConnexion.disconnect(); + } + + @Override + public IRoster getRoster() throws RemoteException { + return mConnexion.getRoster(); + } + +} diff -r 4145f456d73b -r 3e76846c48a9 src/com/beem/project/beem/service/aidl/IRoster.aidl --- a/src/com/beem/project/beem/service/aidl/IRoster.aidl Mon Mar 23 16:54:42 2009 +0100 +++ b/src/com/beem/project/beem/service/aidl/IRoster.aidl Thu Mar 26 18:01:21 2009 +0100 @@ -4,11 +4,14 @@ interface IRoster { - IRosterEntry createEntry(in String user, in String name, in String[] groups); + Contact addContact(in String user, in String name, in String[] groups); + void deleteContact(in Contact contact); + + Contact getContact(in String jid); + void createGroup(in String groupname); - // List - List getEntries(); + List getContactList(); } \ No newline at end of file diff -r 4145f456d73b -r 3e76846c48a9 src/com/beem/project/beem/service/aidl/IXMPPConnection.aidl --- a/src/com/beem/project/beem/service/aidl/IXMPPConnection.aidl Mon Mar 23 16:54:42 2009 +0100 +++ b/src/com/beem/project/beem/service/aidl/IXMPPConnection.aidl Thu Mar 26 18:01:21 2009 +0100 @@ -5,14 +5,12 @@ interface IXMPPConnection { - boolean connectSync(in String username, in String password, in String resource); + boolean connectSync(); - void connectAsync(in String username, in String password, in String resource); + void connectAsync(); boolean disconnect(); - // void login(String username, String password, String resource); - IRoster getRoster(); void addConnectionListener(in IBeemConnectionListener listen); diff -r 4145f456d73b -r 3e76846c48a9 src/com/beem/project/beem/service/aidl/IXMPPFacade.aidl --- a/src/com/beem/project/beem/service/aidl/IXMPPFacade.aidl Mon Mar 23 16:54:42 2009 +0100 +++ b/src/com/beem/project/beem/service/aidl/IXMPPFacade.aidl Thu Mar 26 18:01:21 2009 +0100 @@ -1,10 +1,13 @@ package com.beem.project.beem.service.aidl; import com.beem.project.beem.service.aidl.IXMPPConnection; +import com.beem.project.beem.service.aidl.IRoster; interface IXMPPFacade { - IXMPPConnection getXMPPConnection(); + IXMPPConnection createConnection(); + + IRoster getRoster(); void connectSync(); diff -r 4145f456d73b -r 3e76846c48a9 src/com/beem/project/beem/ui/Beem.java --- a/src/com/beem/project/beem/ui/Beem.java Mon Mar 23 16:54:42 2009 +0100 +++ b/src/com/beem/project/beem/ui/Beem.java Thu Mar 26 18:01:21 2009 +0100 @@ -29,7 +29,7 @@ */ public Beem() { super(); - mHandler= new Handler(); + mHandler = new Handler(); } /** @@ -105,5 +105,4 @@ mButton.setText(jid); } - } diff -r 4145f456d73b -r 3e76846c48a9 src/com/beem/project/beem/ui/ContactList.java --- a/src/com/beem/project/beem/ui/ContactList.java Mon Mar 23 16:54:42 2009 +0100 +++ b/src/com/beem/project/beem/ui/ContactList.java Thu Mar 26 18:01:21 2009 +0100 @@ -18,12 +18,16 @@ import com.beem.project.beem.BeemService; import com.beem.project.beem.R; +import com.beem.project.beem.service.Contact; import com.beem.project.beem.service.aidl.IBeemConnectionListener; +import com.beem.project.beem.service.aidl.IRoster; import com.beem.project.beem.service.aidl.IXMPPConnection; import com.beem.project.beem.service.aidl.IXMPPFacade; public class ContactList extends ExpandableListActivity { + private static final String TAG = "CONTACTLIST_ACT"; + private IXMPPFacade mService = null; @Override @@ -65,7 +69,7 @@ public void onServiceConnected(ComponentName name, IBinder service) { mService = IXMPPFacade.Stub.asInterface(service); try { - IXMPPConnection con = mService.getXMPPConnection(); + IXMPPConnection con = mService.createConnection(); con.addConnectionListener(new TestConnectionListener()); mService.connectSync(); Log.i("BEEM", "Connected !!!"); @@ -108,6 +112,10 @@ @Override public void onConnect() throws RemoteException { // TODO Auto-generated method stub + IRoster roster = mService.getRoster(); + for (Contact contact : roster.getContactList()) { + Log.v(TAG,"Contact name " + contact.getJID() ); + } showContactList(); }