# HG changeset patch # User Da Risk # Date 1239035331 -7200 # Node ID ffe07347ceba386345ad0bdcb53de4b1aed0a50e # Parent 4d9067c5e08eec1e06e5f3e356f9e863987fe589# Parent cc06de2dfff0d603fd772e1013b4856c4215c4b6 little merge diff -r cc06de2dfff0 -r ffe07347ceba src/com/beem/project/beem/BeemApplication.java --- a/src/com/beem/project/beem/BeemApplication.java Sat Apr 04 20:03:43 2009 +0200 +++ b/src/com/beem/project/beem/BeemApplication.java Mon Apr 06 18:28:51 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,8 +55,19 @@ @Override public void onServiceConnected(ComponentName name, IBinder service) { - // TODO Auto-generated method stub + mIsConnected = true; mFacade = IXmppFacade.Stub.asInterface(service); + try { + mConnection = mFacade.createConnection(); + if (!mConnection.isAuthentificated()) { + mProgressDialog.show(); + mConnection.addConnectionListener(mConnectionListener); + mApplicationContext.startService(BeemApplication.SERVICE_INTENT); + } + } catch (RemoteException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } synchronized (mQueue) { for (Message msg : mQueue) { msg.sendToTarget(); @@ -64,67 +86,30 @@ /** * 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 +119,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,17 +128,16 @@ /** * 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 + * @param target the handler which will execute the callback + * @param callback the callback to execute */ public void callWhenServiceConnected(Handler target, Runnable callback) { Message msg = Message.obtain(target, callback); @@ -169,10 +152,81 @@ } /** - * 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(); + } + + /** + * {@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 cc06de2dfff0 -r ffe07347ceba src/com/beem/project/beem/BeemService.java --- a/src/com/beem/project/beem/BeemService.java Sat Apr 04 20:03:43 2009 +0200 +++ b/src/com/beem/project/beem/BeemService.java Mon Apr 06 18:28:51 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 cc06de2dfff0 -r ffe07347ceba src/com/beem/project/beem/service/XmppFacade.java --- a/src/com/beem/project/beem/service/XmppFacade.java Sat Apr 04 20:03:43 2009 +0200 +++ b/src/com/beem/project/beem/service/XmppFacade.java Mon Apr 06 18:28:51 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 cc06de2dfff0 -r ffe07347ceba src/com/beem/project/beem/service/aidl/IXmppFacade.aidl --- a/src/com/beem/project/beem/service/aidl/IXmppFacade.aidl Sat Apr 04 20:03:43 2009 +0200 +++ b/src/com/beem/project/beem/service/aidl/IXmppFacade.aidl Mon Apr 06 18:28:51 2009 +0200 @@ -18,4 +18,7 @@ IChatManager getChatManager(); + // to ameliore + void changeStatus(); + } diff -r cc06de2dfff0 -r ffe07347ceba src/com/beem/project/beem/ui/ContactList.java --- a/src/com/beem/project/beem/ui/ContactList.java Sat Apr 04 20:03:43 2009 +0200 +++ b/src/com/beem/project/beem/ui/ContactList.java Mon Apr 06 18:28:51 2009 +0200 @@ -88,6 +88,7 @@ protected void onStart() { super.onStart(); Log.i(TAG, "onStart"); + //mBeemApplication.startBeemService(); } @Override diff -r cc06de2dfff0 -r ffe07347ceba src/com/beem/project/beem/ui/ContactListDialogSettings.java --- a/src/com/beem/project/beem/ui/ContactListDialogSettings.java Sat Apr 04 20:03:43 2009 +0200 +++ b/src/com/beem/project/beem/ui/ContactListDialogSettings.java Mon Apr 06 18:28:51 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(); }