--- a/AndroidManifest.xml Sun Sep 27 17:51:06 2009 +0200
+++ b/AndroidManifest.xml Sun Sep 27 19:08:01 2009 +0200
@@ -40,8 +40,7 @@
android:name="com.beem.project.beem.service.XmppConnectionAdapter.CONNECTION_CLOSED" />
</intent-filter>
</activity>
- <activity android:name=".ui.Subscription" android:label="@string/app_name" />
- <activity android:name=".ui.EditSettings" android:label="@string/edit_settings_name">
+ <activity android:name=".ui.Subscription" android:label="@string/app_name">
<intent-filter android:label="Beem Connection">
<action
android:name="com.beem.project.beem.service.XmppConnectionAdapter.CONNECTION_CLOSED" />
--- a/src/com/beem/project/beem/BeemService.java Sun Sep 27 17:51:06 2009 +0200
+++ b/src/com/beem/project/beem/BeemService.java Sun Sep 27 19:08:01 2009 +0200
@@ -101,6 +101,7 @@
@Override
public boolean onUnbind(Intent intent) {
+ Log.e("BEEMSERVICE", "ONUNBIND()");
if (!mConnection.getAdaptee().isConnected()) {
this.stopSelf();
}
--- a/src/com/beem/project/beem/service/XmppConnectionAdapter.java Sun Sep 27 17:51:06 2009 +0200
+++ b/src/com/beem/project/beem/service/XmppConnectionAdapter.java Sun Sep 27 19:08:01 2009 +0200
@@ -21,13 +21,14 @@
import android.os.RemoteException;
import android.util.Log;
+import com.beem.project.beem.BeemService;
import com.beem.project.beem.R;
-import com.beem.project.beem.BeemService;
import com.beem.project.beem.service.aidl.IBeemConnectionListener;
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.ui.Subscription;
+import com.beem.project.beem.utils.BeemBroadcastReceiver;
/**
* This class implements an adapter for XMPPConnection.
@@ -38,7 +39,7 @@
/**
* Beem connection closed Intent name.
*/
- public static final String BEEM_CONNECTION_CLOSED = "BeemConnectionClosed";
+
private static final String TAG = "XMPPConnectionAdapter";
private XMPPConnection mAdaptee;
private IChatManager mChatManager;
@@ -273,7 +274,9 @@
public void connectionClosed() {
Log.d(TAG, "closing connection");
mRoster = null;
- mService.sendBroadcast(new Intent(BEEM_CONNECTION_CLOSED));
+ Intent intent = new Intent(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED);
+ intent.putExtra("message", mService.getString(R.string.BeemBroadcastReceiverDisconnect));
+ mService.sendBroadcast(intent);
mService.stopSelf();
}
@@ -281,23 +284,13 @@
* {@inheritDoc}
*/
@Override
- public void connectionClosedOnError(Exception arg0) {
+ public void connectionClosedOnError(Exception exception) {
Log.d(TAG, "connectionClosedOnError");
mRoster = null;
- final int n = mRemoteConnListeners.beginBroadcast();
-
- for (int i = 0; i < n; i++) {
- IBeemConnectionListener listener = mRemoteConnListeners.getBroadcastItem(i);
- try {
- if (listener != null)
- 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();
+ Intent intent = new Intent(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED);
+ intent.putExtra("message", exception.getMessage());
+ mService.sendBroadcast(intent);
+ mService.stopSelf();
}
/**
--- a/src/com/beem/project/beem/ui/AddContact.java Sun Sep 27 17:51:06 2009 +0200
+++ b/src/com/beem/project/beem/ui/AddContact.java Sun Sep 27 19:08:01 2009 +0200
@@ -5,7 +5,6 @@
import java.util.regex.Pattern;
import android.app.Activity;
-import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Intent;
import android.content.IntentFilter;
@@ -22,7 +21,6 @@
import com.beem.project.beem.BeemService;
import com.beem.project.beem.R;
-import com.beem.project.beem.service.XmppConnectionAdapter;
import com.beem.project.beem.service.aidl.IXmppFacade;
import com.beem.project.beem.utils.BeemBroadcastReceiver;
/**
@@ -36,7 +34,7 @@
private final List<String> mGroup = new ArrayList<String>();
private IXmppFacade mXmppFacade;
private final ServiceConnection mServConn = new BeemServiceConnection();
- private BroadcastReceiver mReceiver;
+ private BeemBroadcastReceiver mReceiver;
static {
SERVICE_INTENT.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService"));
@@ -56,16 +54,7 @@
setContentView(R.layout.addcontact);
Button ok = (Button) findViewById(R.id.addc_ok);
ok.setOnClickListener(mOkListener);
- mReceiver = new BeemBroadcastReceiver();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected void onStop() {
- super.onStop();
- unbindService(mServConn);
+ mReceiver = new BeemBroadcastReceiver(mServConn);
}
/**
@@ -74,8 +63,9 @@
@Override
protected void onResume() {
super.onResume();
- this.registerReceiver(mReceiver, new IntentFilter(XmppConnectionAdapter.BEEM_CONNECTION_CLOSED));
+ this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED));
bindService(new Intent(this, BeemService.class), mServConn, BIND_AUTO_CREATE);
+ mReceiver.setBinded();
}
/**
@@ -85,6 +75,8 @@
protected void onPause() {
super.onPause();
this.unregisterReceiver(mReceiver);
+ if (mReceiver.isBinded())
+ unbindService(mServConn);
}
/**
--- a/src/com/beem/project/beem/ui/ChangeStatus.java Sun Sep 27 17:51:06 2009 +0200
+++ b/src/com/beem/project/beem/ui/ChangeStatus.java Sun Sep 27 19:08:01 2009 +0200
@@ -1,7 +1,6 @@
package com.beem.project.beem.ui;
import android.app.Activity;
-import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Intent;
import android.content.IntentFilter;
@@ -21,7 +20,6 @@
import com.beem.project.beem.BeemService;
import com.beem.project.beem.R;
-import com.beem.project.beem.service.XmppConnectionAdapter;
import com.beem.project.beem.service.aidl.IXmppFacade;
import com.beem.project.beem.utils.BeemBroadcastReceiver;
import com.beem.project.beem.utils.Status;
@@ -54,7 +52,7 @@
private IXmppFacade mXmppFacade;
private final ServiceConnection mServConn = new BeemServiceConnection();
private final OnClickListener mOnClickOk = new MyOnClickListener();
- private BroadcastReceiver mReceiver;
+ private BeemBroadcastReceiver mReceiver;
/**
* constructor.
@@ -123,7 +121,7 @@
mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinner.setAdapter(mAdapter);
mToast = Toast.makeText(this, R.string.ChangeStatusOk, Toast.LENGTH_LONG);
- mReceiver = new BeemBroadcastReceiver();
+ mReceiver = new BeemBroadcastReceiver(mServConn);
mStatusText.setText(getPreferenceString(R.string.PreferenceStatusText));
mSpinner.setSelection(getPreferenceStatusIndex());
}
@@ -132,19 +130,11 @@
* {@inheritDoc}
*/
@Override
- protected void onDestroy() {
- super.onDestroy();
- unbindService(mServConn);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
protected void onResume() {
super.onResume();
bindService(new Intent(this, BeemService.class), mServConn, BIND_AUTO_CREATE);
- this.registerReceiver(mReceiver, new IntentFilter(XmppConnectionAdapter.BEEM_CONNECTION_CLOSED));
+ mReceiver.setBinded();
+ this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED));
}
/**
@@ -154,6 +144,8 @@
protected void onPause() {
super.onPause();
this.unregisterReceiver(mReceiver);
+ if (mReceiver.isBinded())
+ unbindService(mServConn);
}
/**
--- a/src/com/beem/project/beem/ui/ContactList.java Sun Sep 27 17:51:06 2009 +0200
+++ b/src/com/beem/project/beem/ui/ContactList.java Sun Sep 27 19:08:01 2009 +0200
@@ -10,7 +10,6 @@
import org.jivesoftware.smack.util.StringUtils;
import android.app.Activity;
-import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -21,6 +20,7 @@
import android.os.Handler;
import android.os.IBinder;
import android.os.RemoteException;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -39,7 +39,6 @@
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.XmppConnectionAdapter;
import com.beem.project.beem.service.aidl.IBeemRosterListener;
import com.beem.project.beem.service.aidl.IRoster;
import com.beem.project.beem.service.aidl.IXmppFacade;
@@ -64,7 +63,7 @@
private Handler mHandler;
private IXmppFacade mXmppFacade;
private final ServiceConnection mServConn = new BeemServiceConnection();
- private BroadcastReceiver mReceiver;
+ private BeemBroadcastReceiver mReceiver;
static {
SERVICE_INTENT.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService"));
@@ -87,7 +86,7 @@
mAdapterContactList = new BeemContactList(this);
mAdapterBanner = new BeemBanner(this);
mHandler = new Handler();
- mReceiver = new BeemBroadcastReceiver();
+ mReceiver = new BeemBroadcastReceiver(mServConn);
}
/**
@@ -96,7 +95,7 @@
@Override
protected void onResume() {
super.onResume();
- this.registerReceiver(mReceiver, new IntentFilter(XmppConnectionAdapter.BEEM_CONNECTION_CLOSED));
+ this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED));
}
/**
@@ -159,6 +158,7 @@
protected void onStart() {
super.onStart();
bindService(SERVICE_INTENT, mServConn, BIND_AUTO_CREATE);
+ mReceiver.setBinded();
}
/**
@@ -166,8 +166,10 @@
*/
@Override
protected void onStop() {
+ Log.d("CONTACTLIST","onStop");
super.onStop();
- unbindService(mServConn);
+ if (mReceiver.isBinded())
+ unbindService(mServConn);
}
/**
@@ -519,7 +521,7 @@
break;
default:
imageDrawable = getResources().getDrawable(R.drawable.error);
- break;
+ break;
}
imgV.setImageDrawable(imageDrawable);
--- a/src/com/beem/project/beem/ui/Login.java Sun Sep 27 17:51:06 2009 +0200
+++ b/src/com/beem/project/beem/ui/Login.java Sun Sep 27 19:08:01 2009 +0200
@@ -171,6 +171,10 @@
@Override
public void connectionClosedOnError() throws RemoteException {
+ mIsConnected = false;
+ if (mXmppFacade != null) {
+ mXmppFacade = null;
+ }
}
@Override
--- a/src/com/beem/project/beem/ui/SendIM.java Sun Sep 27 17:51:06 2009 +0200
+++ b/src/com/beem/project/beem/ui/SendIM.java Sun Sep 27 19:08:01 2009 +0200
@@ -5,7 +5,6 @@
import org.jivesoftware.smack.util.StringUtils;
import android.app.Activity;
-import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Intent;
import android.content.IntentFilter;
@@ -35,7 +34,6 @@
import com.beem.project.beem.service.Contact;
import com.beem.project.beem.service.Message;
import com.beem.project.beem.service.PresenceAdapter;
-import com.beem.project.beem.service.XmppConnectionAdapter;
import com.beem.project.beem.service.aidl.IBeemRosterListener;
import com.beem.project.beem.service.aidl.IChat;
import com.beem.project.beem.service.aidl.IChatManager;
@@ -73,7 +71,7 @@
private final ServiceConnection mServConn = new BeemServiceConnection();
private IXmppFacade mXmppFacade;
private TextView mStatusText;
- private BroadcastReceiver mReceiver;
+ private BeemBroadcastReceiver mReceiver;
private static final Intent SERVICE_INTENT = new Intent();
static {
@@ -125,7 +123,7 @@
mScrolling = (ScrollView) findViewById(R.id.sendimscroll);
mStatusText = (TextView) findViewById(R.id.sendimstatus);
setViewHeader();
- mReceiver = new BeemBroadcastReceiver();
+ mReceiver = new BeemBroadcastReceiver(mServConn);
}
/**
@@ -246,7 +244,8 @@
} catch (RemoteException e) {
Log.d(TAG, "Error while closing chat", e);
}
- unbindService(mServConn);
+ if (mReceiver.isBinded())
+ unbindService(mServConn);
}
/**
@@ -255,8 +254,9 @@
@Override
protected void onResume() {
super.onResume();
- this.registerReceiver(mReceiver, new IntentFilter(XmppConnectionAdapter.BEEM_CONNECTION_CLOSED));
+ this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED));
bindService(new Intent(this, BeemService.class), mServConn, BIND_AUTO_CREATE);
+ mReceiver.setBinded();
mScrolling.fullScroll(ScrollView.FOCUS_DOWN);
}
--- a/src/com/beem/project/beem/ui/Settings.java Sun Sep 27 17:51:06 2009 +0200
+++ b/src/com/beem/project/beem/ui/Settings.java Sun Sep 27 19:08:01 2009 +0200
@@ -13,7 +13,7 @@
import android.view.MenuItem;
import com.beem.project.beem.R;
-import com.beem.project.beem.service.XmppConnectionAdapter;
+import com.beem.project.beem.utils.BeemBroadcastReceiver;
/**
* This class represents an activity which allows the user to change his account or proxy parameters.
@@ -22,7 +22,7 @@
public class Settings extends PreferenceActivity {
private static final Intent SERVICE_INTENT = new Intent();
- private BeemBroadcastReceiver mReceiver;
+ private SettingsBroadcastReceiver mReceiver;
static {
SERVICE_INTENT.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService"));
@@ -38,7 +38,7 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.preferences);
- mReceiver = new BeemBroadcastReceiver();
+ mReceiver = new SettingsBroadcastReceiver();
}
/**
@@ -56,7 +56,7 @@
@Override
public void onResume() {
super.onResume();
- this.registerReceiver(mReceiver, new IntentFilter(XmppConnectionAdapter.BEEM_CONNECTION_CLOSED));
+ this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED));
}
/**
@@ -111,12 +111,11 @@
/**
* disconnect Broadcast receiver.
*/
- private class BeemBroadcastReceiver extends BroadcastReceiver {
-
+ private class SettingsBroadcastReceiver extends BroadcastReceiver {
/**
* Constructor.
*/
- public BeemBroadcastReceiver() {
+ public SettingsBroadcastReceiver() {
}
@Override
--- a/src/com/beem/project/beem/utils/BeemBroadcastReceiver.java Sun Sep 27 17:51:06 2009 +0200
+++ b/src/com/beem/project/beem/utils/BeemBroadcastReceiver.java Sun Sep 27 19:08:01 2009 +0200
@@ -3,9 +3,9 @@
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.content.ServiceConnection;
import android.widget.Toast;
-import com.beem.project.beem.R;
import com.beem.project.beem.ui.Login;
/**
@@ -14,10 +14,16 @@
*/
public class BeemBroadcastReceiver extends BroadcastReceiver {
+ public static final String BEEM_CONNECTION_CLOSED = "BeemConnectionClosed";
+ private ServiceConnection mService;
+ private boolean mIsBinded;
+
/**
* constructor.
*/
- public BeemBroadcastReceiver() {
+ public BeemBroadcastReceiver(ServiceConnection service) {
+ mService = service;
+ mIsBinded = false;
}
/**
@@ -25,7 +31,18 @@
*/
@Override
public void onReceive(Context context, Intent intent) {
+ context.unbindService(mService);
+ mIsBinded = false;
context.startActivity(new Intent(context, Login.class));
- Toast.makeText(context, context.getString(R.string.BeemBroadcastReceiverDisconnect), Toast.LENGTH_LONG).show();
+ CharSequence message = intent.getCharSequenceExtra("message");
+ Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
+ }
+
+ public void setBinded() {
+ mIsBinded = true;
+ }
+
+ public boolean isBinded() {
+ return mIsBinded;
}
}