# HG changeset patch
# User marseille@KungFuh
# Date 1239124061 -7200
# Node ID eb9112a00b024f176cb9cf8ce8a676727ca03370
# Parent a02d227ac5a61a49f76e484d8cb9065463ed2b99# Parent fb3e3ed4bafca4667c24a177f185d20934b960d7
Merge.
diff -r fb3e3ed4bafc -r eb9112a00b02 res/layout/contactlistcontact.xml
--- a/res/layout/contactlistcontact.xml Tue Apr 07 15:20:28 2009 +0200
+++ b/res/layout/contactlistcontact.xml Tue Apr 07 19:07:41 2009 +0200
@@ -6,7 +6,7 @@
android:gravity="center_vertical" >
diff -r fb3e3ed4bafc -r eb9112a00b02 src/com/beem/project/beem/BeemApplication.java
--- a/src/com/beem/project/beem/BeemApplication.java Tue Apr 07 15:20:28 2009 +0200
+++ b/src/com/beem/project/beem/BeemApplication.java Tue Apr 07 19:07:41 2009 +0200
@@ -8,6 +8,7 @@
import android.app.Activity;
import android.app.Application;
+import android.app.ProgressDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -17,22 +18,32 @@
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
+import android.os.RemoteException;
+import com.beem.project.beem.service.aidl.IBeemConnectionListener;
+import com.beem.project.beem.service.aidl.IXmppConnection;
import com.beem.project.beem.service.aidl.IXmppFacade;
/**
- * The Beem application.
- * This class has some methods utiliy needs by the activities.
+ * The Beem application. This class has some methods utiliy needs by the activities.
* @author darisk
*/
public class BeemApplication extends Application {
private static BeemApplication mBeemApp;
+ private static final Intent SERVICE_INTENT = new Intent();
private IXmppFacade mFacade;
private Context mApplicationContext;
private Resources mPrivateResources;
private List mQueue = new LinkedList();
private boolean mIsConnected;
+ private IXmppConnection mConnection;
+ private ProgressDialog mProgressDialog;
+ private ConnectionListener mConnectionListener = new ConnectionListener();
+
+ static {
+ SERVICE_INTENT.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService"));
+ }
private ServiceConnection mServConn = new ServiceConnection() {
@@ -44,13 +55,18 @@
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
- // TODO Auto-generated method stub
+ mIsConnected = true;
mFacade = IXmppFacade.Stub.asInterface(service);
- synchronized (mQueue) {
- for (Message msg : mQueue) {
- msg.sendToTarget();
+ try {
+ mConnection = mFacade.createConnection();
+ if (!mConnection.isAuthentificated()) {
+ mProgressDialog.show();
+ mConnection.addConnectionListener(mConnectionListener);
+ mApplicationContext.startService(BeemApplication.SERVICE_INTENT);
}
- mQueue.clear();
+ } catch (RemoteException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
}
}
};
@@ -59,72 +75,35 @@
* Constructor.
*/
public BeemApplication() {
- // TODO Auto-generated constructor stub
+ mIsConnected = false;
}
/**
* Get the Beem application for an activity.
- * @param activity the activity which want the Beem application
- * @return the Beem application
+ * @param activity the activity which want the Beem application
+ * @return the Beem application
*/
public static BeemApplication getApplication(Activity activity) {
if (mBeemApp == null) {
mBeemApp = new BeemApplication();
- mBeemApp.mApplicationContext = activity.getApplication();
- mBeemApp.mPrivateResources = activity.getResources();
- mBeemApp.onCreate();
}
+ mBeemApp.mProgressDialog = new ProgressDialog(activity);
+ mBeemApp.mProgressDialog.setTitle("Beem");
+ mBeemApp.mProgressDialog.setIcon(R.drawable.logo);
+ mBeemApp.mProgressDialog.setMessage("Connexion en cours");
+ mBeemApp.mApplicationContext = activity.getApplication();
+ mBeemApp.mPrivateResources = activity.getResources();
+ mBeemApp.onCreate();
return mBeemApp;
}
/**
- * {@inheritDoc}
- */
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- // TODO Auto-generated method stub
- super.onConfigurationChanged(newConfig);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void onCreate() {
- // TODO Auto-generated method stub
- super.onCreate();
- mFacade = null;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void onLowMemory() {
- // TODO Auto-generated method stub
- super.onLowMemory();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void onTerminate() {
- // TODO Auto-generated method stub
- super.onTerminate();
- }
-
- /**
* Start the beem service.
*/
public synchronized void startBeemService() {
if (!mIsConnected) {
- // Intent intent = new Intent(this, BeemService.class);
- Intent intent = new Intent();
- intent.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService"));
- mApplicationContext.startService(intent);
- mApplicationContext.bindService(intent, mServConn, BIND_AUTO_CREATE);
- mIsConnected = true;
+ // the connection will be made on service connect
+ mApplicationContext.bindService(BeemApplication.SERVICE_INTENT, mServConn, BIND_AUTO_CREATE);
}
}
@@ -134,8 +113,7 @@
public synchronized void stopBeemService() {
if (mIsConnected) {
Intent intent = new Intent();
- intent.setComponent(new ComponentName("com.beem.project.beem",
- "com.beem.project.beem.BeemService"));
+ intent.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService"));
mApplicationContext.unbindService(mServConn);
mApplicationContext.stopService(intent);
mIsConnected = false;
@@ -144,21 +122,20 @@
/**
* Get the facade to use to access the Beem service.
- * @return the facade or null if the application is not connected to the beem service.
+ * @return the facade or null if the application is not connected to the beem service.
*/
public IXmppFacade getXmppFacade() {
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
- * @param callback the callback to execute
+ * Add a methode to execute when the application is connected to the server.
+ * @param target the handler which will execute the callback
+ * @param callback the callback to execute
*/
- public void callWhenServiceConnected(Handler target, Runnable callback) {
+ public void callWhenConnectedToServer(Handler target, Runnable callback) {
Message msg = Message.obtain(target, callback);
- if (!mIsConnected) {
+ if (mIsConnected) {
msg.sendToTarget();
} else {
startBeemService();
@@ -169,10 +146,87 @@
}
/**
- * Indique si on est connecte au service.
+ * Tell if we are connected with the Beem Service.
+ * @return true if connected false otherwise
*/
public boolean isConnected() {
return mIsConnected;
}
+ /**
+ * Connection listener use to hide the progress dialog.
+ * @author darisk
+ */
+ private class ConnectionListener extends IBeemConnectionListener.Stub {
+
+ /**
+ * Constructor.
+ */
+ public ConnectionListener() {
+
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void connectionClosed() throws RemoteException {
+ // TODO Auto-generated method stub
+
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void connectionClosedOnError() throws RemoteException {
+ // TODO Auto-generated method stub
+ // afficher une notification et reafficher le progress dialog
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onConnect() throws RemoteException {
+ // TODO Auto-generated method stub
+ mProgressDialog.dismiss();
+ mFacade.changeStatus();
+ synchronized (mQueue) {
+ for (Message msg : mQueue) {
+ msg.sendToTarget();
+ }
+ mQueue.clear();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void reconnectingIn(int seconds) throws RemoteException {
+ // TODO Auto-generated method stub
+ mProgressDialog.show();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void reconnectionFailed() throws RemoteException {
+ // TODO Auto-generated method stub
+
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void reconnectionSuccessful() throws RemoteException {
+ // TODO Auto-generated method stub
+
+ }
+
+ }
+
}
diff -r fb3e3ed4bafc -r eb9112a00b02 src/com/beem/project/beem/BeemService.java
--- a/src/com/beem/project/beem/BeemService.java Tue Apr 07 15:20:28 2009 +0200
+++ b/src/com/beem/project/beem/BeemService.java Tue Apr 07 19:07:41 2009 +0200
@@ -12,31 +12,44 @@
import com.beem.project.beem.service.XmppConnectionAdapter;
import com.beem.project.beem.service.XmppFacade;
+import com.beem.project.beem.service.aidl.IBeemConnectionListener;
import com.beem.project.beem.service.aidl.IXmppFacade;
import com.beem.project.beem.service.aidl.IXmppConnection;
+
/**
* This class is for the Beem service.
+ * The connection to the xmpp server will be made asynchronously when the service
+ * will start.
* @author darisk
- *
*/
public class BeemService extends Service {
+ /**
+ * The id to use for status notification.
+ */
+ public static final int NOTIFICATION_STATUS_ID = 1;
+
private NotificationManager mNotificationManager;
-
private IXmppConnection mConnection;
private SharedPreferences mSettings;
private String mLogin;
private String mPassword;
private String mHost;
+
private IXmppFacade.Stub mBind;
/**
+ * Constructor.
+ */
+ public BeemService() {
+ }
+
+ /**
* {@inheritDoc}
*/
@Override
public IBinder onBind(Intent intent) {
- showBasicNotification(R.string.BeemServiceCreated);
return mBind;
// to forbid a client to bind
// return null;
@@ -48,15 +61,13 @@
@Override
public void onCreate() {
super.onCreate();
- mSettings = getSharedPreferences(getString(R.string.PreferenceFileName),
- MODE_PRIVATE);
+ mSettings = getSharedPreferences(getString(R.string.PreferenceFileName), MODE_PRIVATE);
mLogin = mSettings.getString(getString(R.string.PreferenceLoginKey), "");
- mPassword = mSettings.getString(
- getString(R.string.PreferencePasswordKey), "");
+ mPassword = mSettings.getString(getString(R.string.PreferencePasswordKey), "");
mHost = mSettings.getString(getString(R.string.PreferenceHostKey), "");
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mConnection = new XmppConnectionAdapter("10.0.2.2", mLogin, mPassword); // address
- mBind = new XmppFacade((XmppConnectionAdapter) mConnection);
+ mBind = new XmppFacade(mConnection, this);
}
/**
@@ -65,7 +76,7 @@
@Override
public void onStart(Intent intent, int startId) {
try {
- mConnection.connectSync();
+ mConnection.connectAsync();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
@@ -78,7 +89,7 @@
@Override
public void onDestroy() {
closeConnection();
- showBasicNotification(R.string.BeemServiceDestroyed);
+ mNotificationManager.cancel(NOTIFICATION_STATUS_ID);
}
/**
@@ -95,21 +106,11 @@
}
/**
- * Add a notification in the notification status bar.
- * @param stringResource the ressource of the text to show
+ * Show a notification.
+ * @param id the id of the notification.
+ * @param notif the notification to show
*/
- private void showBasicNotification(int stringResource) {
- String text = (String) getText(stringResource);
- Notification notif = new Notification(R.drawable.logo, text, System
- .currentTimeMillis());
- notif.defaults = Notification.DEFAULT_ALL;
- notif.setLatestEventInfo(this, text, text, PendingIntent.getActivity(
- this, 0, new Intent(), 0));
- mNotificationManager.notify(stringResource, notif);
- Toast toast = Toast.makeText(this, R.string.BeemServiceCreated,
- Toast.LENGTH_LONG);
- toast.show();
+ public void sendNotification(int id, Notification notif) {
+ mNotificationManager.notify(id, notif);
}
-
-
}
diff -r fb3e3ed4bafc -r eb9112a00b02 src/com/beem/project/beem/service/BeemChatManager.java
--- a/src/com/beem/project/beem/service/BeemChatManager.java Tue Apr 07 15:20:28 2009 +0200
+++ b/src/com/beem/project/beem/service/BeemChatManager.java Tue Apr 07 19:07:41 2009 +0200
@@ -10,6 +10,7 @@
import org.jivesoftware.smack.ChatManager;
import org.jivesoftware.smack.ChatManagerListener;
import org.jivesoftware.smack.MessageListener;
+import org.jivesoftware.smack.packet.Message;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
@@ -31,10 +32,11 @@
*/
public static final String TAG = "BeemChatManager";
private ChatManager mAdaptee;
- private Map mChats = new HashMap();
+ private Map mChats = new HashMap();
private ChatListener mChatListener = new ChatListener();
private RemoteCallbackList mRemoteChatCreationListeners =
new RemoteCallbackList();
+ private RemoteCallbackList mRemoteMessageListeners = new RemoteCallbackList();
/**
* Constructor.
@@ -52,8 +54,12 @@
* @param listener listener to use for chat events on this chat session
* @return the chat session
*/
- public Chat createChat(String jid, MessageListener listener) {
- return mAdaptee.createChat(jid, listener);
+ public IChat createChat(String jid, IMessageListener listener) {
+ mRemoteMessageListeners.register(listener);
+ if (mChats.containsKey(jid)) {
+ return mChats.get(jid);
+ }
+ return new ChatAdapter( mAdaptee.createChat(jid, mChatListener));
}
/**
@@ -62,7 +68,7 @@
* @param listener listener to use for chat events on this chat session
* @return the chat session
*/
- public Chat createChat(Contact contact, MessageListener listener) {
+ public IChat createChat(Contact contact, IMessageListener listener) {
String jid = contact.getJID();
return createChat(jid, listener);
}
@@ -72,7 +78,6 @@
*/
@Override
public void addChatCreationListener(IChatManagerListener listener) throws RemoteException {
- // TODO Auto-generated method stub
mRemoteChatCreationListeners.register(listener);
}
@@ -80,25 +85,24 @@
* {@inheritDoc}
*/
@Override
- public IChat createChat(Contact contact, IMessageListener listener) throws RemoteException {
- // TODO Auto-generated method stub
- return null;
+ public void removeChatCreationListener(IChatManagerListener listener) throws RemoteException {
+ mRemoteChatCreationListeners.unregister(listener);
}
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void removeChatCreationListener(IChatManagerListener listener) throws RemoteException {
- // TODO Auto-generated method stub
- mRemoteChatCreationListeners.unregister(listener);
+
+ private IChat getChat(Chat chat) {
+ if (mChats.containsKey(chat.getParticipant())) {
+ return mChats.get(chat.getParticipant());
+ }
+ IChat res = new ChatAdapter(chat);
+ mChats.put(chat.getParticipant(), res);
+ return res;
}
/**
* A listener for all the chat creation event that happens on the connection.
* @author darisk
*/
- private class ChatListener implements ChatManagerListener {
+ private class ChatListener implements ChatManagerListener, MessageListener {
/**
* Constructor.
@@ -112,15 +116,15 @@
*/
@Override
public void chatCreated(Chat chat, boolean locally) {
+ IChat newchat = getChat(chat);
if (!locally) {
- mChats.put(chat.getParticipant(), chat);
+ mChats.put(chat.getParticipant(), newchat);
}
final int n = mRemoteChatCreationListeners.beginBroadcast();
for (int i = 0; i < n; i++) {
IChatManagerListener listener = mRemoteChatCreationListeners.getBroadcastItem(i);
try {
- IChat newchat = new ChatAdapter(chat);
listener.chatCreated(newchat, locally);
} catch (RemoteException e) {
// The RemoteCallbackList will take care of removing the
@@ -130,6 +134,24 @@
}
mRemoteChatCreationListeners.finishBroadcast();
}
+
+ @Override
+ public void processMessage(Chat chat, Message message) {
+ IChat newchat = getChat(chat);
+ final int n = mRemoteMessageListeners.beginBroadcast();
+ for (int i = 0; i < n; i++) {
+ IMessageListener listener = mRemoteMessageListeners.getBroadcastItem(i);
+ try {
+ listener.processMessage(newchat, new com.beem.project.beem.service.Message(message));
+ //listener.chatCreated(newchat, locally);
+ } catch (RemoteException e) {
+ // The RemoteCallbackList will take care of removing the
+ // dead listeners.
+ Log.w(TAG, "Error while triggering remote connection listeners", e);
+ }
+ }
+ mRemoteMessageListeners.finishBroadcast();
+ }
}
}
diff -r fb3e3ed4bafc -r eb9112a00b02 src/com/beem/project/beem/service/Contact.java
--- a/src/com/beem/project/beem/service/Contact.java Tue Apr 07 15:20:28 2009 +0200
+++ b/src/com/beem/project/beem/service/Contact.java Tue Apr 07 19:07:41 2009 +0200
@@ -52,7 +52,8 @@
/**
* Construct a contact from a parcel.
- * @param in parcel to use for construction
+ * @param in
+ * parcel to use for construction
*/
private Contact(final Parcel in) {
mID = in.readInt();
@@ -60,7 +61,7 @@
mJID = in.readString();
mMsgState = in.readString();
mRes = new ArrayList();
- in.readStringList(mRes);
+ in.readStringList(mRes);
}
/**
@@ -93,7 +94,8 @@
/**
* Constructor.
- * @param jid JID of the contact
+ * @param jid
+ * JID of the contact
*/
public Contact(final String jid) {
mJID = jid;
@@ -110,7 +112,8 @@
}
/**
- * @param mid the mID to set
+ * @param mid
+ * the mID to set
*/
public void setID(int mid) {
mID = mid;
@@ -124,21 +127,23 @@
}
/**
- * @param status the mStatus to set
+ * @param status
+ * the mStatus to set
*/
public void setStatus(int status) {
mStatus = status;
}
/**
- * @param presence the presence containing status
+ * @param presence
+ * the presence containing status
*/
public void setStatus(Presence presence) {
- if (presence.getType().equals(Presence.Type.unavailable)) {
- Log.d(TAG, "Presence pas dispo");
- mStatus = Contact.CONTACT_STATUS_DISCONNECT;
- } else {
- Log.d(TAG,"Presence OK");
+ Log.i(TAG, "NIKITAAAA");
+ /* presence.isAvailable() !?!? */
+ if (presence.getType().equals(Presence.Type.available)) {
+ mStatus = Contact.CONTACT_STATUS_AVAILABLE;
+ Log.d(TAG, "Presence OK");
Mode mode = presence.getMode();
switch (mode) {
case available:
@@ -158,9 +163,12 @@
break;
default:
Log.e("RosterAdapter", "Status mode non gere");
- mStatus = Contact.CONTACT_STATUS_DISCONNECT;
- break;
+ mStatus = Contact.CONTACT_STATUS_AVAILABLE;
+ break;
}
+ } else {
+ Log.d(TAG, "Presence pas dispo");
+ mStatus = Contact.CONTACT_STATUS_DISCONNECT;
}
}
@@ -172,7 +180,8 @@
}
/**
- * @param msgState the mMsgState to set
+ * @param msgState
+ * the mMsgState to set
*/
public void setMMsgState(String msgState) {
mMsgState = msgState;
@@ -188,7 +197,8 @@
/**
* Set the Jabber ID of the contact.
- * @param mjid the jabber ID to set
+ * @param mjid
+ * the jabber ID to set
*/
public void setJID(String mjid) {
mJID = mjid;
@@ -204,7 +214,8 @@
}
/**
- * @param mRes the mRes to set
+ * @param mRes
+ * the mRes to set
*/
public void setMRes(List mRes) {
this.mRes = mRes;
diff -r fb3e3ed4bafc -r eb9112a00b02 src/com/beem/project/beem/service/Message.java
--- a/src/com/beem/project/beem/service/Message.java Tue Apr 07 15:20:28 2009 +0200
+++ b/src/com/beem/project/beem/service/Message.java Tue Apr 07 19:07:41 2009 +0200
@@ -5,6 +5,7 @@
import android.os.Parcel;
import android.os.Parcelable;
+import android.util.Log;
/**
* This class represents a instant message.
@@ -71,6 +72,27 @@
this(to, MSG_TYPE_CHAT);
}
+ public Message(org.jivesoftware.smack.packet.Message smackMsg) {
+ this(smackMsg.getTo());
+ switch (smackMsg.getType()) {
+ case chat:
+ mType = MSG_TYPE_CHAT;
+ break;
+ case groupchat:
+ mType = MSG_TYPE_GROUP_CHAT;
+ break;
+ case normal:
+ mType = MSG_TYPE_NORMAL;
+ break;
+ default:
+ Log.w("BEEM_MESSAGE", "type de message non gerer" + smackMsg.getType());
+ break;
+ }
+ mBody = smackMsg.getBody();
+ mSubject = smackMsg.getSubject();
+ mThread = smackMsg.getThread();
+ }
+
/**
* Construct a message from a parcel.
* @param in parcel to use for construction
diff -r fb3e3ed4bafc -r eb9112a00b02 src/com/beem/project/beem/service/XmppConnectionAdapter.java
--- a/src/com/beem/project/beem/service/XmppConnectionAdapter.java Tue Apr 07 15:20:28 2009 +0200
+++ b/src/com/beem/project/beem/service/XmppConnectionAdapter.java Tue Apr 07 19:07:41 2009 +0200
@@ -73,20 +73,20 @@
*/
@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;
+ 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;
}
/**
@@ -106,10 +106,10 @@
public IRoster getRoster() throws RemoteException {
if (mRoster != null)
return mRoster;
- Roster adap = mAdaptee.getRoster();
- if (adap == null)
- return null;
- mRoster = new RosterAdapter(adap);
+ Roster adap = mAdaptee.getRoster();
+ if (adap == null)
+ return null;
+ mRoster = new RosterAdapter(adap);
return mRoster;
}
@@ -213,6 +213,7 @@
*/
@Override
public void connectionClosed() {
+ mRoster = null;
final int n = mRemoteConnListeners.beginBroadcast();
for (int i = 0; i < n; i++) {
@@ -233,6 +234,7 @@
*/
@Override
public void connectionClosedOnError(Exception arg0) {
+ mRoster = null;
final int n = mRemoteConnListeners.beginBroadcast();
for (int i = 0; i < n; i++) {
diff -r fb3e3ed4bafc -r eb9112a00b02 src/com/beem/project/beem/service/XmppFacade.java
--- a/src/com/beem/project/beem/service/XmppFacade.java Tue Apr 07 15:20:28 2009 +0200
+++ b/src/com/beem/project/beem/service/XmppFacade.java Tue Apr 07 19:07:41 2009 +0200
@@ -1,10 +1,14 @@
package com.beem.project.beem.service;
+
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Intent;
import android.os.RemoteException;
-
+import com.beem.project.beem.BeemService;
import com.beem.project.beem.service.aidl.IChatManager;
import com.beem.project.beem.service.aidl.IRoster;
import com.beem.project.beem.service.aidl.IXmppConnection;
-import com.beem.project.beem.service.aidl.IXmppFacade;;
+import com.beem.project.beem.service.aidl.IXmppFacade;
/**
* This class is a facade for the Beem Service.
@@ -12,14 +16,17 @@
*/
public class XmppFacade extends IXmppFacade.Stub {
- private XmppConnectionAdapter mConnexion;
+ private IXmppConnection mConnexion;
+ private BeemService mBeemService;
/**
* Constructor for XMPPFacade.
* @param connection the connection use by the facade
+ * @param service the service which holds the facade
*/
- public XmppFacade(final XmppConnectionAdapter connection) {
+ public XmppFacade(final IXmppConnection connection, final BeemService service) {
this.mConnexion = connection;
+ this.mBeemService = service;
}
/**
@@ -70,4 +77,20 @@
return mConnexion.getChatManager();
}
+ /**
+ * {@inheritDoc}
+ */
+ public void changeStatus() {
+ Notification mStatusNotification;
+ String text = "Salut les amirs !!!!";
+ mStatusNotification = new Notification(com.beem.project.beem.R.drawable.logo, text, System.currentTimeMillis());
+ mStatusNotification.defaults = Notification.DEFAULT_ALL;
+ mStatusNotification.flags = Notification.FLAG_NO_CLEAR;
+
+ // TODO
+ // mStatusNotification.contentView = ;
+ mStatusNotification.setLatestEventInfo(mBeemService, "Beem Status", text, PendingIntent.getActivity(
+ mBeemService, 0, new Intent(), 0));
+ mBeemService.sendNotification(BeemService.NOTIFICATION_STATUS_ID, mStatusNotification);
+ }
}
diff -r fb3e3ed4bafc -r eb9112a00b02 src/com/beem/project/beem/service/aidl/IXmppFacade.aidl
--- a/src/com/beem/project/beem/service/aidl/IXmppFacade.aidl Tue Apr 07 15:20:28 2009 +0200
+++ b/src/com/beem/project/beem/service/aidl/IXmppFacade.aidl Tue Apr 07 19:07:41 2009 +0200
@@ -18,4 +18,7 @@
IChatManager getChatManager();
+ // to ameliore
+ void changeStatus();
+
}
diff -r fb3e3ed4bafc -r eb9112a00b02 src/com/beem/project/beem/ui/ContactList.java
--- a/src/com/beem/project/beem/ui/ContactList.java Tue Apr 07 15:20:28 2009 +0200
+++ b/src/com/beem/project/beem/ui/ContactList.java Tue Apr 07 19:07:41 2009 +0200
@@ -13,6 +13,7 @@
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
+import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.view.Menu;
@@ -29,6 +30,8 @@
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.PresenceAdapter;
+import com.beem.project.beem.service.aidl.IBeemRosterListener;
import com.beem.project.beem.service.aidl.IXmppFacade;
import com.beem.project.beem.service.aidl.IRoster;
@@ -40,6 +43,8 @@
private Handler mHandler;
private BeemApplication mBeemApplication;
private ContactListDialogSettings mDialog;
+ private BeemRosterListener mRosterListener;
+ private IRoster mRoster;
@SuppressWarnings("unchecked")
@Override
@@ -62,6 +67,7 @@
mSettings = getSharedPreferences(
getString(R.string.PreferenceFileName), MODE_PRIVATE);
mDialog = new ContactListDialogSettings(this, mSettings);
+ mRosterListener = new BeemRosterListener();
mSettings
.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() {
@@ -81,13 +87,13 @@
*/
}
});
-
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart");
+ mBeemApplication.startBeemService();
}
@Override
@@ -97,14 +103,18 @@
* @TODO: A ameliorer apres listener de nikita
*/
Log.i(TAG, "onResume");
- if (!mBeemApplication.isConnected())
- mBeemApplication.startBeemService();
- else {
- callbackShowContactList();
- }
- mBeemApplication.callWhenServiceConnected(mHandler, new Runnable() {
+ mBeemApplication.startBeemService();
+ mBeemApplication.callWhenConnectedToServer(mHandler, new Runnable() {
@Override
public void run() {
+ mService = mBeemApplication.getXmppFacade();
+ try {
+ mRoster = mService.getRoster();
+ mRoster.addConnectionListener(mRosterListener);
+ Log.i(TAG, "ROSTERLISTENER OK");
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
callbackShowContactList();
}
});
@@ -114,17 +124,12 @@
/*
* @TODO: A ameliorer apres listener de nikita
*/
- mService = mBeemApplication.getXmppFacade();
- if (mService != null) {
+ if (mRoster != null)
try {
- IRoster r = mService.getRoster();
- if (r != null)
- showContactList(r.getGroupsNames(), r.getContactList());
+ showContactList(mRoster.getGroupsNames(), mRoster.getContactList());
} catch (RemoteException e) {
- // TODO Auto-generated catch block
e.printStackTrace();
- }
- }
+ }
}
/**
@@ -248,25 +253,32 @@
switch (c.getStatus()) {
case Contact.CONTACT_STATUS_AVAILABLE:
imageDrawable = (Drawable) getResources().getDrawable(
- R.drawable.avatar);
+ R.drawable.online);
+ break;
case Contact.CONTACT_STATUS_AVAILABLE_FOR_CHAT:
imageDrawable = (Drawable) getResources().getDrawable(
R.drawable.chat);
+ break;
case Contact.CONTACT_STATUS_AWAY:
imageDrawable = (Drawable) getResources().getDrawable(
R.drawable.away);
+ break;
case Contact.CONTACT_STATUS_BUSY:
imageDrawable = (Drawable) getResources().getDrawable(
R.drawable.dnd);
+ break;
case Contact.CONTACT_STATUS_DISCONNECT:
imageDrawable = (Drawable) getResources().getDrawable(
R.drawable.offline);
+ break;
case Contact.CONTACT_STATUS_UNAVAILABLE:
imageDrawable = (Drawable) getResources().getDrawable(
R.drawable.requested);
+ break;
default:
imageDrawable = (Drawable) getResources().getDrawable(
R.drawable.error);
+ break;
}
imgV.setImageDrawable(imageDrawable);
@@ -295,4 +307,33 @@
}
}
}
+
+ private class BeemRosterListener extends IBeemRosterListener.Stub {
+
+ @Override
+ public void onEntriesAdded(List addresses)
+ throws RemoteException {
+ Log.i(TAG, "ENTRIES ADDED");
+
+ }
+ @Override
+ public void onEntriesDeleted(List addresses)
+ throws RemoteException {
+ Log.i(TAG, "ENTRIES DEL");
+
+ }
+ @Override
+ public void onEntriesUpdated(List addresses)
+ throws RemoteException {
+ Log.i(TAG, "ENTRIES UPD");
+
+ }
+ @Override
+ public void onPresenceChanged(PresenceAdapter presence)
+ throws RemoteException {
+ Log.i(TAG, "PRESENCE CHANGED");
+
+ }
+
+ }
}
\ No newline at end of file
diff -r fb3e3ed4bafc -r eb9112a00b02 src/com/beem/project/beem/ui/ContactListDialogSettings.java
--- a/src/com/beem/project/beem/ui/ContactListDialogSettings.java Tue Apr 07 15:20:28 2009 +0200
+++ b/src/com/beem/project/beem/ui/ContactListDialogSettings.java Tue Apr 07 19:07:41 2009 +0200
@@ -1,5 +1,6 @@
package com.beem.project.beem.ui;
+import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.SharedPreferences;
@@ -19,12 +20,10 @@
android.view.View.OnClickListener {
private SharedPreferences mSettings;
- private ContactList mContactList;
- public ContactListDialogSettings(ContactList contactList,
+ public ContactListDialogSettings(Activity activity,
SharedPreferences settings) {
- super(contactList);
- this.mContactList = contactList;
+ super(activity);
this.mSettings = settings;
}
@@ -54,6 +53,7 @@
String JID = ctx.getString(R.string.PreferenceLoginKey) + "@"
+ ctx.getString(R.string.PreferenceHostKey);
editor.putString(ctx.getString(R.string.PreferenceJID), JID);
+ editor.putBoolean("ACCOUNT_CONFIGURED", true);
editor.commit();
dismiss();
}