--- a/src/com/beem/project/beem/BeemApplication.java Tue Mar 31 21:29:48 2009 +0200
+++ b/src/com/beem/project/beem/BeemApplication.java Tue Mar 31 22:21:42 2009 +0200
@@ -3,7 +3,8 @@
*/
package com.beem.project.beem;
-import com.beem.project.beem.service.aidl.IXMPPFacade;
+import java.util.LinkedList;
+import java.util.List;
import android.app.Activity;
import android.app.Application;
@@ -13,7 +14,11 @@
import android.content.ServiceConnection;
import android.content.res.Configuration;
import android.content.res.Resources;
+import android.os.Handler;
import android.os.IBinder;
+import android.os.Message;
+
+import com.beem.project.beem.service.aidl.IXMPPFacade;
/**
* @author darisk
@@ -25,6 +30,7 @@
private Context mApplicationContext;
private Resources mPrivateResources;
private static BeemApplication mBeemApp;
+ private List<Message> mQueue = new LinkedList<Message>();
public static BeemApplication getApplication(Activity activity) {
if (mBeemApp == null) {
@@ -81,7 +87,14 @@
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
+ // TODO Auto-generated method stub
mFacade = IXMPPFacade.Stub.asInterface(service);
+ synchronized (mQueue) {
+ for (Message msg : mQueue) {
+ msg.sendToTarget();
+ }
+ mQueue.clear();
+ }
}
};
@@ -94,5 +107,16 @@
public IXMPPFacade getXmppFacade() {
return mFacade;
}
-
+
+ public void callWhenServiceConnected(Handler target, Runnable callback) {
+ Message msg = Message.obtain(target, callback);
+ if (mFacade != null) {
+ msg.sendToTarget();
+ } else {
+ startBeemService();
+ synchronized (mQueue) {
+ mQueue.add(msg);
+ }
+ }
+ }
}