# HG changeset patch # User marseille@KungFuh # Date 1238831459 -7200 # Node ID ec87eec66d56ddf0dc3e1cd83d289ecbc9af8ead # Parent aa70a805da1760c776d72c02ddeea0efddbf3d4f# Parent 08cfba11099ab5e501018b64ecbc6eb3755b8837 Correction d'un petit bug pour recuperer les infos du contact dans le SendIM.java diff -r 08cfba11099a -r ec87eec66d56 AndroidManifest.xml --- a/AndroidManifest.xml Fri Apr 03 18:50:13 2009 +0200 +++ b/AndroidManifest.xml Sat Apr 04 09:50:59 2009 +0200 @@ -3,13 +3,12 @@ package="com.beem.project.beem" android:versionCode="1" android:versionName="1.0"> - + - @@ -24,5 +23,5 @@ - + diff -r 08cfba11099a -r ec87eec66d56 res/drawable/away.png Binary file res/drawable/away.png has changed diff -r 08cfba11099a -r ec87eec66d56 res/drawable/chat.png Binary file res/drawable/chat.png has changed diff -r 08cfba11099a -r ec87eec66d56 res/drawable/closed.png Binary file res/drawable/closed.png has changed diff -r 08cfba11099a -r ec87eec66d56 res/drawable/connecting.png Binary file res/drawable/connecting.png has changed diff -r 08cfba11099a -r ec87eec66d56 res/drawable/dnd.png Binary file res/drawable/dnd.png has changed diff -r 08cfba11099a -r ec87eec66d56 res/drawable/error.png Binary file res/drawable/error.png has changed diff -r 08cfba11099a -r ec87eec66d56 res/drawable/invisible.png Binary file res/drawable/invisible.png has changed diff -r 08cfba11099a -r ec87eec66d56 res/drawable/message.png Binary file res/drawable/message.png has changed diff -r 08cfba11099a -r ec87eec66d56 res/drawable/not_in_the_roster.png Binary file res/drawable/not_in_the_roster.png has changed diff -r 08cfba11099a -r ec87eec66d56 res/drawable/offline.png Binary file res/drawable/offline.png has changed diff -r 08cfba11099a -r ec87eec66d56 res/drawable/online.png Binary file res/drawable/online.png has changed diff -r 08cfba11099a -r ec87eec66d56 res/drawable/requested.png Binary file res/drawable/requested.png has changed diff -r 08cfba11099a -r ec87eec66d56 res/layout/beem.xml --- a/res/layout/beem.xml Fri Apr 03 18:50:13 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff -r 08cfba11099a -r ec87eec66d56 res/layout/contactlistcontact.xml --- a/res/layout/contactlistcontact.xml Fri Apr 03 18:50:13 2009 +0200 +++ b/res/layout/contactlistcontact.xml Sat Apr 04 09:50:59 2009 +0200 @@ -2,25 +2,34 @@ - + + - - + + - - + + \ No newline at end of file diff -r 08cfba11099a -r ec87eec66d56 res/layout/contactlistdialogsettings.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/res/layout/contactlistdialogsettings.xml Sat Apr 04 09:50:59 2009 +0200 @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -r 08cfba11099a -r ec87eec66d56 res/menu/beemmenu.xml --- a/res/menu/beemmenu.xml Fri Apr 03 18:50:13 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ - - - - diff -r 08cfba11099a -r ec87eec66d56 res/menu/contactlistmenu.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/res/menu/contactlistmenu.xml Sat Apr 04 09:50:59 2009 +0200 @@ -0,0 +1,4 @@ + + + + diff -r 08cfba11099a -r ec87eec66d56 res/values/strings.xml --- a/res/values/strings.xml Fri Apr 03 18:50:13 2009 +0200 +++ b/res/values/strings.xml Sat Apr 04 09:50:59 2009 +0200 @@ -3,7 +3,7 @@ Beem - Creer un compte + Jabber ID @@ -13,9 +13,9 @@ Beem - login + host - password + Jabber IDloginpassword port @@ -24,4 +24,5 @@ Is : and is speaking from : Insert a smiley + diff -r 08cfba11099a -r ec87eec66d56 src/com/beem/project/beem/BeemApplication.java --- a/src/com/beem/project/beem/BeemApplication.java Fri Apr 03 18:50:13 2009 +0200 +++ b/src/com/beem/project/beem/BeemApplication.java Sat Apr 04 09:50:59 2009 +0200 @@ -29,11 +29,14 @@ private static BeemApplication mBeemApp; private IXMPPFacade mFacade; + private Context mApplicationContext; private Resources mPrivateResources; private List mQueue = new LinkedList(); private boolean mIsConnected; + + private ServiceConnection mServConn = new ServiceConnection() { @Override @@ -132,9 +135,14 @@ * Stop the Beem service. */ public synchronized void stopBeemService() { - Intent intent = new Intent(this, BeemService.class); - mApplicationContext.unbindService(mServConn); - mApplicationContext.stopService(intent); + if (mIsConnected) { + Intent intent = new Intent(); + intent.setComponent(new ComponentName("com.beem.project.beem", + "com.beem.project.beem.BeemService")); + mApplicationContext.unbindService(mServConn); + mApplicationContext.stopService(intent); + mIsConnected = false; + } } /** @@ -145,6 +153,7 @@ return mFacade; } + /** * Add a methode to execute when the application is connected to the Beem service. * @param target the handler which will execute the callback @@ -161,4 +170,12 @@ } } } + + /** + * Indique si on est connecte au service. + */ + public boolean isConnected() { + return mIsConnected; + } + } diff -r 08cfba11099a -r ec87eec66d56 src/com/beem/project/beem/provider/BeemDatabaseHelper.java --- a/src/com/beem/project/beem/provider/BeemDatabaseHelper.java Fri Apr 03 18:50:13 2009 +0200 +++ b/src/com/beem/project/beem/provider/BeemDatabaseHelper.java Sat Apr 04 09:50:59 2009 +0200 @@ -23,7 +23,6 @@ public void onCreate(SQLiteDatabase db) { db.execSQL(this.creationQuery); } - @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { diff -r 08cfba11099a -r ec87eec66d56 src/com/beem/project/beem/service/PresenceAdapter.java --- a/src/com/beem/project/beem/service/PresenceAdapter.java Fri Apr 03 18:50:13 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -package com.beem.project.beem.service; - -import org.jivesoftware.smack.packet.Presence; - -import android.os.IBinder; -import android.os.Parcel; -import android.os.Parcelable; - -public class PresenceAdapter implements Parcelable { - - private Presence mPresence; - - /** - * Parcelable.Creator needs by Android. - */ - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { - - @Override - public PresenceAdapter createFromParcel(Parcel source) { - return new PresenceAdapter(source); - } - - @Override - public PresenceAdapter[] newArray(int size) { - return new PresenceAdapter[size]; - } - }; - - public PresenceAdapter(Presence presence) { - mPresence = presence; - } - - - public PresenceAdapter(Parcel source) { - // TODO Auto-generated constructor stub - } - - @Override - public int describeContents() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - // TODO Auto-generated method stub - - } - - public IBinder asBinder() { - // TODO Auto-generated method stub - return null; - } -} diff -r 08cfba11099a -r ec87eec66d56 src/com/beem/project/beem/service/RosterAdapter.java --- a/src/com/beem/project/beem/service/RosterAdapter.java Fri Apr 03 18:50:13 2009 +0200 +++ b/src/com/beem/project/beem/service/RosterAdapter.java Sat Apr 04 09:50:59 2009 +0200 @@ -16,10 +16,6 @@ import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.packet.Presence; -import com.beem.project.beem.service.aidl.IBeemConnectionListener; -import com.beem.project.beem.service.aidl.IBeemRosterListener; - -import android.os.RemoteCallbackList; import android.os.RemoteException; import android.util.Log; @@ -29,238 +25,143 @@ */ public class RosterAdapter extends com.beem.project.beem.service.aidl.IRoster.Stub { - private static final String TAG = "RosterAdapter"; - private Roster mAdaptee; - private RemoteCallbackList mRemoteRosListeners = - new RemoteCallbackList(); - 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); + 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; } - - @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. - * @param roster the roster to adapt - */ - public RosterAdapter(final Roster roster) { - mAdaptee = roster; - roster.addRosterListener(mRosterListener); - for (RosterEntry entry : roster.getEntries()) { - String user = entry.getUser(); - if ( !mContacts.containsKey(user)) - mContacts.put(user, new Contact(user)); - } + } + c.setStatus(status); } - /** - * {@inheritDoc} - */ @Override - public void createGroup(String groupname) throws RemoteException { - // TODO Auto-generated method stub - 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 void deleteContact(Contact contact) throws RemoteException { - // TODO Auto-generated method stub + public void entriesUpdated(Collection arg0) { + // TODO Auto-generated method stub } - @Override - public void addConnectionListener(IBeemRosterListener listen) throws RemoteException { - if (listen != null) - mRemoteRosListeners.register(listen); - } - /** - * {@inheritDoc} - */ - @Override - public void removeConnectionListener(IBeemRosterListener listen) throws RemoteException { - if (listen != null) - mRemoteRosListeners.unregister(listen); - } - /** - * {@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; - } - - private class RosterListenerAdapter implements RosterListener { - - @Override - public void entriesAdded(Collection addresses) { - final int n = mRemoteRosListeners.beginBroadcast(); - - List tab = null; - for (int i = 0; i < n; i++) { - IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i); - try { - tab.addAll(addresses); - listener.onEntriesAdded(tab); - } catch (RemoteException e) { - // The RemoteCallbackList will take care of removing the - // dead listeners. - Log.w(TAG, "Error while adding roster entries", e); - } - } - mRemoteRosListeners.finishBroadcast(); - - } - - @Override - public void entriesDeleted(Collection addresses) { - final int n = mRemoteRosListeners.beginBroadcast(); - - List tab = null; - for (int i = 0; i < n; i++) { - IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i); - try { - tab.addAll(addresses); - listener.onEntriesDeleted(tab); - } catch (RemoteException e) { - // The RemoteCallbackList will take care of removing the - // dead listeners. - Log.w(TAG, "Error while deleting roster entries", e); - } - } - mRemoteRosListeners.finishBroadcast(); - } - - @Override - public void entriesUpdated(Collection addresses) { - final int n = mRemoteRosListeners.beginBroadcast(); - - List tab = null; - for (int i = 0; i < n; i++) { - IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i); - try { - tab.addAll(addresses); - listener.onEntriesUpdated(tab); - } catch (RemoteException e) { - // The RemoteCallbackList will take care of removing the - // dead listeners. - Log.w(TAG, "Error while updating roster entries", e); - } - } - mRemoteRosListeners.finishBroadcast(); - } - - @Override - public void presenceChanged(Presence presence) { - final int n = mRemoteRosListeners.beginBroadcast(); - - List tab = null; - for (int i = 0; i < n; i++) { - IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i); - try { - listener.onPresenceChanged(new PresenceAdapter(presence)); - } catch (RemoteException e) { - // The RemoteCallbackList will take care of removing the - // dead listeners. - Log.w(TAG, "Error while updating roster entries", e); - } - } - mRemoteRosListeners.finishBroadcast(); - } + public void entriesDeleted(Collection arg0) { + // TODO Auto-generated method stub } - /** - * {@inheritDoc} - */ @Override - public List getGroupsNames() throws RemoteException { - Collection groups = mAdaptee.getGroups(); - ArrayList result = new ArrayList(groups.size()); - for (RosterGroup rosterGroup : groups) { - result.add(rosterGroup.getName()); - } - return result; + public void entriesAdded(Collection arg0) { + // TODO Auto-generated method stub + + } + }; + + /** + * Constructor. + * @param roster the roster to adapt + */ + public RosterAdapter(final Roster roster) { + mAdaptee = roster; + roster.addRosterListener(mRosterListener); + for (RosterEntry entry : roster.getEntries()) { + String user = entry.getUser(); + if ( !mContacts.containsKey(user)) + mContacts.put(user, new Contact(user)); + } + } + + /** + * {@inheritDoc} + */ + @Override + public void createGroup(String groupname) throws RemoteException { + // TODO Auto-generated method stub + 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 void deleteContact(Contact contact) throws RemoteException { + // TODO Auto-generated method stub + + } + + /** + * {@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; + } + + /** + * {@inheritDoc} + */ + @Override + public List getGroupsNames() throws RemoteException { + Collection groups = mAdaptee.getGroups(); + ArrayList result = new ArrayList(groups.size()); + for (RosterGroup rosterGroup : groups) { + result.add(rosterGroup.getName()); + } + return result; + } } diff -r 08cfba11099a -r ec87eec66d56 src/com/beem/project/beem/service/XMPPConnectionAdapter.java --- a/src/com/beem/project/beem/service/XMPPConnectionAdapter.java Fri Apr 03 18:50:13 2009 +0200 +++ b/src/com/beem/project/beem/service/XMPPConnectionAdapter.java Sat Apr 04 09:50:59 2009 +0200 @@ -25,308 +25,313 @@ */ public class XMPPConnectionAdapter extends IXmppConnection.Stub { - private static final String TAG = "XMPPConnectionAdapter"; - private XMPPConnection mAdaptee; - private IChatManager mChatManager; - private BeemException mLastException; - private String mLogin; - private String mPassword; - private RosterAdapter mRoster; + private static final String TAG = "XMPPConnectionAdapter"; + private XMPPConnection mAdaptee; + private IChatManager mChatManager; + private BeemException mLastException; + private String mLogin; + private String mPassword; + private RosterAdapter mRoster; + + private RemoteCallbackList mRemoteConnListeners = + new RemoteCallbackList(); + private ConnexionListenerAdapter mConListener = new ConnexionListenerAdapter(); + + /** + * 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; + } + + /** + * 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() throws RemoteException { + try { + mAdaptee.connect(); + mAdaptee.addConnectionListener(mConListener); + mAdaptee.login(mLogin, mPassword, "BEEM"); + mChatManager = new BeemChatManager(mAdaptee.getChatManager()); + // 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) { + mLastException = new BeemException(e); + } + return false; + } - private RemoteCallbackList mRemoteConnListeners = - new RemoteCallbackList(); - private ConnexionListenerAdapter mConListener = new ConnexionListenerAdapter(); + /** + * {@inheritDoc} + */ + @Override + public boolean disconnect() { + mAdaptee.disconnect(); + mLastException = null; + return true; + } + + /** + * {@inheritDoc} + */ + @Override + public IRoster getRoster() throws RemoteException { + if (mRoster != null) + return mRoster; + Roster adap = mAdaptee.getRoster(); + if (adap == null) + return null; + mRoster = new RosterAdapter(adap); + return mRoster; + } + + /** + * {@inheritDoc} + */ + @Override + public final void connectAsync() throws RemoteException { + Thread t = new Thread(new Runnable() { + + @Override + public void run() { + try { + connectSync(); + } catch (RemoteException e) { + Log.e(TAG, "Error while connecting", e); + } + } + }); + t.start(); + } + + /** + * {@inheritDoc} + */ + @Override + public void addConnectionListener(IBeemConnectionListener listen) throws RemoteException { + if (listen != null) + mRemoteConnListeners.register(listen); + } + + /** + * {@inheritDoc} + */ + @Override + public void removeConnectionListener(IBeemConnectionListener listen) throws RemoteException { + if (listen != null) + mRemoteConnListeners.unregister(listen); + } + + /** + * {@inheritDoc} + */ + @Override + public IChatManager getChatManager() throws RemoteException { + return mChatManager; + } + + /** + * 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 { /** - * Constructor. - * @param con The connection to adapt - * @param login The login to use - * @param password The password to use + * Defaut constructor. */ - public XMPPConnectionAdapter(final XMPPConnection con, final String login, final String password) { - mAdaptee = con; - mLogin = login; - mPassword = password; - } - - /** - * 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); + public ConnexionListenerAdapter() { + // TODO Auto-generated constructor stub } /** - * {@inheritDoc} - */ - @Override - public boolean connectSync() throws RemoteException { - try { - mAdaptee.connect(); - mAdaptee.addConnectionListener(mConListener); - mAdaptee.login(mLogin, mPassword, "BEEM"); - mChatManager = new BeemChatManager(mAdaptee.getChatManager()); - // 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) { - mLastException = new BeemException(e); - } - return false; - } - - /** - * {@inheritDoc} - */ - @Override - public boolean disconnect() { - mAdaptee.disconnect(); - mLastException = null; - return true; - } - - /** - * {@inheritDoc} + * Method to execute when a connection event occurs. */ - @Override - public IRoster getRoster() throws RemoteException { - if (mRoster != null) - return mRoster; - Roster adap = mAdaptee.getRoster(); - if (adap == null) - return null; - mRoster = new RosterAdapter(adap); - return mRoster; - } - - /** - * {@inheritDoc} - */ - @Override - public final void connectAsync() throws RemoteException { - Thread t = new Thread(new Runnable() { + public void onConnect() { + final int n = mRemoteConnListeners.beginBroadcast(); - @Override - public void run() { - try { - connectSync(); - } catch (RemoteException e) { - Log.e(TAG, "Error while connecting", e); - } - } - }); - t.start(); - } - - /** - * {@inheritDoc} - */ - @Override - public void addConnectionListener(IBeemConnectionListener listen) throws RemoteException { - if (listen != null) - mRemoteConnListeners.register(listen); - } - - /** - * {@inheritDoc} - */ - @Override - public void removeConnectionListener(IBeemConnectionListener listen) throws RemoteException { - if (listen != null) - mRemoteConnListeners.unregister(listen); + 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 IChatManager getChatManager() throws RemoteException { - return mChatManager; + public void connectionClosed() { + final int n = mRemoteConnListeners.beginBroadcast(); + + 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(); } /** - * Trigger Connection event. + * {@inheritDoc} */ - private void triggerAsynchronousConnectEvent() { - mConListener.onConnect(); + @Override + public void connectionClosedOnError(Exception arg0) { + final int n = mRemoteConnListeners.beginBroadcast(); + + 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(); + + for (int i = 0; i < n; i++) { + IBeemConnectionListener listener = mRemoteConnListeners.getBroadcastItem(i); + try { + listener.reconnectingIn(arg0); + } catch (RemoteException e) { + // The RemoteCallbackList will take care of removing the + // dead listeners. + } + } + mRemoteConnListeners.finishBroadcast(); } /** - * Listener for XMPP connection events. - * It will calls the remote listeners for connexion events. - * @author darisk + * {@inheritDoc} */ - 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(); - - 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(); - - 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(); + @Override + public void reconnectionFailed(Exception arg0) { + final int r = mRemoteConnListeners.beginBroadcast(); - 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(); - - for (int i = 0; i < n; i++) { - IBeemConnectionListener listener = mRemoteConnListeners.getBroadcastItem(i); - try { - listener.reconnectingIn(arg0); - } catch (RemoteException e) { - // The RemoteCallbackList will take care of removing the - // dead listeners. - } - } - mRemoteConnListeners.finishBroadcast(); + 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); } - - /** - * {@inheritDoc} - */ - @Override - public void reconnectionFailed(Exception arg0) { - final int r = mRemoteConnListeners.beginBroadcast(); - - 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(); - - 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(); - } - + } + mRemoteConnListeners.finishBroadcast(); } /** - * 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 + * {@inheritDoc} */ - 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"); + @Override + public void reconnectionSuccessful() { + final int n = mRemoteConnListeners.beginBroadcast(); + 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(); } + } + + /** + * 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"); + + } + + @Override + public boolean isAuthentificated() throws RemoteException { + return mAdaptee.isAuthenticated(); + } + } diff -r 08cfba11099a -r ec87eec66d56 src/com/beem/project/beem/service/XMPPFacade.java --- a/src/com/beem/project/beem/service/XMPPFacade.java Fri Apr 03 18:50:13 2009 +0200 +++ b/src/com/beem/project/beem/service/XMPPFacade.java Sat Apr 04 09:50:59 2009 +0200 @@ -27,7 +27,6 @@ */ @Override public void connectAsync() throws RemoteException { - // TODO Auto-generated method stub mConnexion.connectAsync(); } @@ -36,7 +35,6 @@ */ @Override public void connectSync() throws RemoteException { - // TODO Auto-generated method stub mConnexion.connectSync(); } @@ -45,7 +43,6 @@ */ @Override public IXmppConnection createConnection() throws RemoteException { - // TODO Auto-generated method stub return mConnexion; } @@ -54,7 +51,6 @@ */ @Override public void disconnect() throws RemoteException { - // TODO Auto-generated method stub mConnexion.disconnect(); } diff -r 08cfba11099a -r ec87eec66d56 src/com/beem/project/beem/service/aidl/IXmppConnection.aidl --- a/src/com/beem/project/beem/service/aidl/IXmppConnection.aidl Fri Apr 03 18:50:13 2009 +0200 +++ b/src/com/beem/project/beem/service/aidl/IXmppConnection.aidl Sat Apr 04 09:50:59 2009 +0200 @@ -17,5 +17,7 @@ void addConnectionListener(in IBeemConnectionListener listen); void removeConnectionListener(in IBeemConnectionListener listen); + boolean isAuthentificated(); + IChatManager getChatManager(); } \ No newline at end of file diff -r 08cfba11099a -r ec87eec66d56 src/com/beem/project/beem/ui/Beem.java --- a/src/com/beem/project/beem/ui/Beem.java Fri Apr 03 18:50:13 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -package com.beem.project.beem.ui; - -import android.app.Activity; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.os.Handler; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.Button; - -import com.beem.project.beem.BeemApplication; -import com.beem.project.beem.R; - -/** - * La principale activite to be continuous. - */ -public class Beem extends Activity { - - private SharedPreferences mSettings; - private BeemDialogSettings mDialog; - private Button mButton; - private Handler mHandler; - private BeemApplication mBeemApplication; - - /** - * Default constructor. - */ - public Beem() { - super(); - mHandler = new Handler(); - } - - /** - * Called when the activity is first created. - * @param savedInstanceState - * previous state. - */ - @Override - public final void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mBeemApplication = BeemApplication.getApplication(this); - setContentView(R.layout.beem); - mSettings = getSharedPreferences( - getString(R.string.PreferenceFileName), MODE_PRIVATE); - mDialog = new BeemDialogSettings(this, mSettings); - - mButton = (Button) findViewById(R.id.connection); - mButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - if (mButton.getText() == getString(R.string.BeemCreateAccount)) - mDialog.show(); - else - startActivity(new Intent(Beem.this, ContactList.class)); - } - }); - showJID(); - } - - /** - * 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.beemmenu, 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.account_edit: - mDialog.show(); - return true; - case R.id.account_about: - return true; - default: - return false; - } - } - - /** - * Show jabber id in button. - */ - public final void showJID() { - String jid = mSettings.getString( - getString(R.string.PreferenceLoginKey), "") - + "@" - + mSettings - .getString(getString(R.string.PreferenceHostKey), ""); - if (jid.length() == 1) - jid = getString(R.string.BeemCreateAccount); - mButton.setText(jid); - } - -} diff -r 08cfba11099a -r ec87eec66d56 src/com/beem/project/beem/ui/BeemDialogSettings.java --- a/src/com/beem/project/beem/ui/BeemDialogSettings.java Fri Apr 03 18:50:13 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -package com.beem.project.beem.ui; - -import android.app.Dialog; -import android.content.Context; -import android.content.SharedPreferences; -import android.view.View; -import android.widget.Button; -import android.widget.EditText; - -import com.beem.project.beem.R; - -/** - * - */ -public class BeemDialogSettings extends Dialog implements - android.view.View.OnClickListener { - - private Beem mbeem; - - private SharedPreferences mSettings; - - public BeemDialogSettings(Beem beem, SharedPreferences settings) { - super(beem); - this.mbeem = beem; - this.mSettings = settings; - } - - @Override - protected void onStart() { - super.onStart(); - setContentView(R.layout.beemdialogsettings); - getWindow().setFlags(4, 4); - setTitle("Jabber Account Settings"); - showSettings(); - Button ok = (Button) findViewById(R.id.ok); - ok.setOnClickListener(this); - } - - @Override - public void onClick(View v) { - SharedPreferences.Editor editor = mSettings.edit(); - Context ctx = getContext(); - editor.putString(ctx.getString(R.string.PreferenceHostKey), - getWidgetText(R.id.host)); - editor.putString(ctx.getString(R.string.PreferencePortKey), - getWidgetText(R.id.port)); - editor.putString(ctx.getString(R.string.PreferenceLoginKey), - getWidgetText(R.id.userid)); - editor.putString(ctx.getString(R.string.PreferencePasswordKey), - getWidgetText(R.id.password)); - editor.commit(); - this.mbeem.showJID(); - dismiss(); - } - - private void showSettings() { - String tmp; - EditText eHost = (EditText) findViewById(R.id.host); - if ((tmp = mSettings.getString("host", "")) != "") - eHost.setText(tmp); - EditText ePort = (EditText) findViewById(R.id.port); - if ((tmp = mSettings.getString("port", "")) != "") - ePort.setText(tmp); - EditText eLogin = (EditText) findViewById(R.id.userid); - if ((tmp = mSettings.getString("login", "")) != "") - eLogin.setText(tmp); - EditText ePwd = (EditText) findViewById(R.id.password); - if ((tmp = mSettings.getString("password", "")) != "") - ePwd.setText(tmp); - } - - private String getWidgetText(int id) { - EditText widget = (EditText) this.findViewById(id); - return widget.getText().toString(); - } -} diff -r 08cfba11099a -r ec87eec66d56 src/com/beem/project/beem/ui/ContactList.java --- a/src/com/beem/project/beem/ui/ContactList.java Fri Apr 03 18:50:13 2009 +0200 +++ b/src/com/beem/project/beem/ui/ContactList.java Sat Apr 04 09:50:59 2009 +0200 @@ -4,14 +4,20 @@ import java.util.HashMap; import java.util.List; import java.util.Map; + import android.app.ExpandableListActivity; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; +import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.RemoteException; import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ExpandableListAdapter; @@ -19,95 +25,196 @@ import android.widget.ImageView; import android.widget.SimpleExpandableListAdapter; import android.widget.TextView; + import com.beem.project.beem.BeemApplication; import com.beem.project.beem.R; import com.beem.project.beem.service.Contact; +import com.beem.project.beem.service.aidl.IRoster; import com.beem.project.beem.service.aidl.IXMPPFacade; public class ContactList extends ExpandableListActivity { private static final String TAG = "CONTACTLIST_ACT"; + private SharedPreferences mSettings; private IXMPPFacade mService = null; private Handler mHandler; private BeemApplication mBeemApplication; + private ContactListDialogSettings mDialog; + + @SuppressWarnings("unchecked") + @Override + public boolean onChildClick(ExpandableListView parent, View v, + int groupPosition, int childPosition, long id) { + Intent i = new Intent(this, SendIM.class); + Map child = (HashMap) parent + .getExpandableListAdapter().getChild(groupPosition, + childPosition); + i.putExtra("contact", child.get("CHILD")); + startActivity(i); + return true; + } @Override - public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { - startActivity(new Intent(this, SendIM.class)); - return true; - - }; - - @Override - public void onCreate(Bundle saveBundle) { + protected void onCreate(Bundle saveBundle) { super.onCreate(saveBundle); mHandler = new Handler(); mBeemApplication = BeemApplication.getApplication(this); + mSettings = getSharedPreferences( + getString(R.string.PreferenceFileName), MODE_PRIVATE); + mDialog = new ContactListDialogSettings(this, mSettings); + + mSettings + .registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() { + @Override + public void onSharedPreferenceChanged( + SharedPreferences sharedPreferences, String key) { + /* + * TODO : A faire apres listener nikita + * + * mBeemApplication.stopBeemService(); + * mBeemApplication.startBeemService(); + * mBeemApplication.callWhenServiceConnected(mHandler, + * new Runnable() { + * + * @Override public void run() { + * callbackShowContactList(); } }); + */ + } + }); } @Override - public void onStart() { + protected void onStart() { super.onStart(); - mBeemApplication.startBeemService(); + Log.i(TAG, "onStart"); + } + + @Override + protected void onResume() { + super.onResume(); + /* + * @TODO: A ameliorer apres listener de nikita + */ + Log.i(TAG, "onResume"); + if (!mBeemApplication.isConnected()) + mBeemApplication.startBeemService(); + else { + callbackShowContactList(); + } mBeemApplication.callWhenServiceConnected(mHandler, new Runnable() { @Override public void run() { - mService = mBeemApplication.getXmppFacade(); - try { - showContactList(mService.getRoster().getContactList(), mService.getRoster().getContactList()); - } catch (RemoteException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - + callbackShowContactList(); } }); } - private void showContactList(List listGroup, List listContact) { + private void callbackShowContactList() { + /* + * @TODO: A ameliorer apres listener de nikita + */ + mService = mBeemApplication.getXmppFacade(); + if (mService != null) { + try { + IRoster r = mService.getRoster(); + if (r != null) + showContactList(r.getGroupsNames(), r.getContactList()); + } catch (RemoteException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + + /** + * 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.contactlistmenu, 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.account_edit: + mDialog.show(); + return true; + case R.id.account_about: + return true; + default: + return false; + } + } + + private void showContactList(List listGroup, + List listContact) { ExpandableListAdapter Adapter; List> groupData = new ArrayList>(); - List>> childData = new ArrayList>>(); + List>> childData = new ArrayList>>(); if (listGroup.size() == 0) - listGroup.add(new Contact()); + listGroup.add("Default"); for (int i = 0; i < listGroup.size(); i++) { Map curGroupMap = new HashMap(); groupData.add(curGroupMap); - curGroupMap.put("NAME", "Default"); + curGroupMap.put("GROUP", listGroup.get(i)); - List> children = new ArrayList>(); + List> children = new ArrayList>(); for (int j = 0; j < listContact.size(); ++j) { - Map curChildMap = new HashMap(); + Map curChildMap = new HashMap(); children.add(curChildMap); - curChildMap.put("NAME_CHILD", listContact.get(j).getJID()); - curChildMap.put("MSG", "Taper votre message perso"); + Contact c = listContact.get(j); + Log.i(TAG, c.getID() + " " +c.getJID()); + curChildMap.put("CHILD", c); } childData.add(children); } - Adapter = new ContactExpandableListAdapter(this, groupData, R.layout.contactlistgroup, new String[] { "NAME" }, - new int[] { R.id.textgroup }, childData, R.layout.contactlistcontact, new String[] { "NAME_CHILD", "MSG" }, - new int[] { R.id.textchild1, R.id.textchild2, R.id.avatar }); + Adapter = new ContactExpandableListAdapter(this, groupData, + R.layout.contactlistgroup, new String[] { "GROUP" }, + new int[] { R.id.textgroup }, childData, + R.layout.contactlistcontact, new String[] { "CHILD" }, + new int[] { R.id.contactliststatus, R.id.contactlistpseudo, + R.id.contactlistmsgperso, R.id.contactlistavatar }); setListAdapter(Adapter); } /** - * A simple adapter which allows you to bind data to specific Views defined within the layout of an Expandable Lists - * children (Implement getGroupView() to define the layout of parents) + * A simple adapter which allows you to bind data to specific Views defined + * within the layout of an Expandable Lists children (Implement + * getGroupView() to define the layout of parents) */ - public class ContactExpandableListAdapter extends SimpleExpandableListAdapter { + private class ContactExpandableListAdapter extends + SimpleExpandableListAdapter { private List>> mChildData; private String[] mChildFrom; private int[] mChildTo; - public ContactExpandableListAdapter(Context context, List> groupData, int groupLayout, - String[] groupFrom, int[] groupTo, List>> childData, - int childLayout, String[] childFrom, int[] childTo) { - super(context, groupData, groupLayout, groupFrom, groupTo, childData, childLayout, childFrom, childTo); + public ContactExpandableListAdapter(Context context, + List> groupData, int groupLayout, + String[] groupFrom, int[] groupTo, + List>> childData, + int childLayout, String[] childFrom, int[] childTo) { + super(context, groupData, groupLayout, groupFrom, groupTo, + childData, childLayout, childFrom, childTo); mChildData = childData; mChildFrom = childFrom; @@ -116,8 +223,8 @@ } @Override - public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, - ViewGroup parent) { + public View getChildView(int groupPosition, int childPosition, + boolean isLastChild, View convertView, ViewGroup parent) { View v; if (convertView == null) { @@ -125,33 +232,67 @@ } else { v = convertView; } - bindView(v, mChildData.get(groupPosition).get(childPosition), mChildFrom, mChildTo, groupPosition, - childPosition); + bindView(v, mChildData.get(groupPosition).get(childPosition), + mChildFrom, mChildTo, groupPosition, childPosition); return v; } - // This method binds my data to the Views specified in the child - // xmllayout - private void bindView(View view, Map data, String[] from, int[] to, int groupPosition, - int childPosition) { - // Apply TextViews - TextView v1 = (TextView) view.findViewById(to[0]); - if (v1 != null) { - Log.i("CONTACT LIST 1", (String) data.get(from[0]) + " " + to[0]); - v1.setText((String) data.get(from[0])); - } - TextView v2 = (TextView) view.findViewById(to[1]); - if (v2 != null) { - Log.i("CONTACT LIST 2", (String) data.get(from[1]) + " " + to[1]); - v2.setText((String) data.get(from[1])); - } - // Apply ImageView - ImageView imgV = (ImageView) view.findViewById(to[2]); - if (imgV != null) { - Drawable avatar = (Drawable) getResources().getDrawable(R.drawable.avatar); - imgV.setImageDrawable(avatar); + private void bindView(View view, Map data, String[] from, + int[] to, int groupPosition, int childPosition) { + Contact c = (Contact) data.get(from[0]); + + if (c != null) { + + ImageView imgV = (ImageView) view.findViewById(to[0]); + Drawable imageDrawable = null; + switch (c.getStatus()) { + case Contact.CONTACT_STATUS_AVAILABLE: + imageDrawable = (Drawable) getResources().getDrawable( + R.drawable.avatar); + case Contact.CONTACT_STATUS_AVAILABLE_FOR_CHAT: + imageDrawable = (Drawable) getResources().getDrawable( + R.drawable.chat); + case Contact.CONTACT_STATUS_AWAY: + imageDrawable = (Drawable) getResources().getDrawable( + R.drawable.away); + case Contact.CONTACT_STATUS_BUSY: + imageDrawable = (Drawable) getResources().getDrawable( + R.drawable.dnd); + case Contact.CONTACT_STATUS_DISCONNECT: + imageDrawable = (Drawable) getResources().getDrawable( + R.drawable.offline); + case Contact.CONTACT_STATUS_UNAVAILABLE: + imageDrawable = (Drawable) getResources().getDrawable( + R.drawable.requested); + default: + imageDrawable = (Drawable) getResources().getDrawable( + R.drawable.error); + } + imgV.setImageDrawable(imageDrawable); + + TextView v = (TextView) view.findViewById(to[1]); + if (v != null) { + v.setText(c.getJID()); + } + /* + * @TODO: Rajouter le message perso du contact v = (TextView) + */ + v = (TextView) view.findViewById(to[2]); + if (v != null) { + v.setText(c.getMMsgState()); + } + + /* + * @TODO: Rajouter l'avatar du contact getAvatar() dans la + * classe + */ + imgV = (ImageView) view.findViewById(to[3]); + if (imgV != null) { + imageDrawable = (Drawable) getResources().getDrawable( + R.drawable.avatar); + imgV.setImageDrawable(imageDrawable); + } } } } - -} +} \ No newline at end of file diff -r 08cfba11099a -r ec87eec66d56 src/com/beem/project/beem/ui/ContactListDialogSettings.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/com/beem/project/beem/ui/ContactListDialogSettings.java Sat Apr 04 09:50:59 2009 +0200 @@ -0,0 +1,81 @@ +package com.beem.project.beem.ui; + +import android.app.Dialog; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.RemoteException; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +import com.beem.project.beem.BeemApplication; +import com.beem.project.beem.R; + +/** + * + */ +public class ContactListDialogSettings extends Dialog implements + android.view.View.OnClickListener { + + private SharedPreferences mSettings; + private ContactList mContactList; + + public ContactListDialogSettings(ContactList contactList, + SharedPreferences settings) { + super(contactList); + this.mContactList = contactList; + this.mSettings = settings; + } + + @Override + protected void onStart() { + super.onStart(); + setContentView(R.layout.contactlistdialogsettings); + getWindow().setFlags(4, 4); + setTitle("Jabber Account Settings"); + showSettings(); + Button ok = (Button) findViewById(R.id.ok); + ok.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + SharedPreferences.Editor editor = mSettings.edit(); + Context ctx = getContext(); + editor.putString(ctx.getString(R.string.PreferenceHostKey), + getWidgetText(R.id.host)); + editor.putString(ctx.getString(R.string.PreferencePortKey), + getWidgetText(R.id.port)); + editor.putString(ctx.getString(R.string.PreferenceLoginKey), + getWidgetText(R.id.userid)); + editor.putString(ctx.getString(R.string.PreferencePasswordKey), + getWidgetText(R.id.password)); + String JID = ctx.getString(R.string.PreferenceLoginKey) + "@" + + ctx.getString(R.string.PreferenceHostKey); + editor.putString(ctx.getString(R.string.PreferenceJID), JID); + editor.commit(); + dismiss(); + } + + private void showSettings() { + Context ctx = getContext(); + EditText e = (EditText) findViewById(R.id.host); + e.setText(mSettings.getString( + ctx.getString(R.string.PreferenceHostKey), "")); + e = (EditText) findViewById(R.id.port); + e.setText(mSettings.getString( + ctx.getString(R.string.PreferencePortKey), "")); + e = (EditText) findViewById(R.id.userid); + e.setText(mSettings.getString(ctx + .getString(R.string.PreferenceLoginKey), "")); + e = (EditText) findViewById(R.id.password); + e.setText(mSettings.getString(ctx + .getString(R.string.PreferencePasswordKey), "")); + } + + private String getWidgetText(int id) { + EditText widget = (EditText) this.findViewById(id); + return widget.getText().toString(); + } +} diff -r 08cfba11099a -r ec87eec66d56 src/com/beem/project/beem/ui/SendIM.java --- a/src/com/beem/project/beem/ui/SendIM.java Fri Apr 03 18:50:13 2009 +0200 +++ b/src/com/beem/project/beem/ui/SendIM.java Sat Apr 04 09:50:59 2009 +0200 @@ -5,6 +5,7 @@ import android.app.ListActivity; import android.content.SharedPreferences; import android.os.Bundle; +import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuInflater; @@ -16,19 +17,21 @@ import android.widget.EditText; import com.beem.project.beem.R; +import com.beem.project.beem.service.Contact; /** - * @author barbu - * This activity class provide the view for instant messaging - * after selecting a correspondant. + * @author barbu This activity class provide the view for instant messaging + * after selecting a correspondant. */ -public class SendIM extends ListActivity implements OnClickListener, OnKeyListener { - private EditText mToSend; - private ArrayList mMessages = new ArrayList(); - private ArrayAdapter mAdapter; - private SendIMDialogSmiley mSmyDialog; +public class SendIM extends ListActivity implements OnClickListener, + OnKeyListener { + private EditText mToSend; + private ArrayList mMessages = new ArrayList(); + private ArrayAdapter mAdapter; + private SendIMDialogSmiley mSmyDialog; private SharedPreferences mSet; + private Contact mContact; /** * Constructor. @@ -43,16 +46,26 @@ @Override public void onCreate(Bundle saveBundle) { super.onCreate(saveBundle); + setContentView(R.layout.sendim); mToSend = (EditText) findViewById(R.id.userText); mSet = getSharedPreferences("lol", MODE_PRIVATE); mSmyDialog = new SendIMDialogSmiley(this, mSet); - mAdapter = new ArrayAdapter(this, R.layout.messagelist, mMessages); + mAdapter = new ArrayAdapter(this, R.layout.messagelist, + mMessages); setListAdapter(mAdapter); mToSend.setOnClickListener(this); mToSend.setOnKeyListener(this); + + mContact = getIntent().getParcelableExtra("contact"); + } + + @Override + public void onStart() { + super.onStart(); + } /** @@ -63,19 +76,25 @@ } /** - * This method send a message to the server over the XMPP - * connection and display it on activity view - * TODO : Exception si la connexion se coupe pendant la conversation + * This method send a message to the server over the XMPP connection and + * display it on activity view TODO : Exception si la connexion se coupe + * pendant la conversation */ private void sendText() { String text = mToSend.getText().toString(); if (!text.equals("")) { /* - * Prepare the message to be send - * */ - /*Message msg = new Message("barbu", Message.Type.chat);*/ - /*msg.setBody(text);*/ - mAdapter.add("Barbu " + getString(R.string.SendIMSays) + text); + * Prepare the message to be send + */ + /* Message msg = new Message("barbu", Message.Type.chat); */ + /* msg.setBody(text); */ + /* + * Rien a voir il faut changer le mContact.getJID() et remplacer + * avec son pseudo cetait juste un test pour savoir qu'on recupere + * bien le contact a qui envoyer les infos + */ + mAdapter.add(mContact.getJID() + " " + + getString(R.string.SendIMSays) + text); mToSend.setText(null); } } @@ -94,9 +113,10 @@ } return false; } - + /** * Callback for menu creation. + * * @param menu * the menu created * @return true on success, false otherwise @@ -108,7 +128,7 @@ inflater.inflate(R.menu.sendimmenu, menu); return true; } - + @Override public final boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) {