# HG changeset patch # User Nikita Kozlov # Date 1257532082 -3600 # Node ID 7ac6af9ceb0dd14fba80596a2caeade62f40b335 # Parent dd9ad5fec728f63c099b920fa2ed0d2e4280e50c a debug diff -r dd9ad5fec728 -r 7ac6af9ceb0d src/com/beem/project/beem/ui/Login.java --- a/src/com/beem/project/beem/ui/Login.java Fri Nov 06 18:00:49 2009 +0100 +++ b/src/com/beem/project/beem/ui/Login.java Fri Nov 06 19:28:02 2009 +0100 @@ -46,7 +46,7 @@ private ConnectionRunnable mConnectionRunnable = new ConnectionRunnable(); private ProgressDialog mProgressDialog; - private boolean mIsConnected; + private boolean mIsConnectedService; private final ServiceConnection mServConn = new BeemServiceConnection(); private IXmppFacade mXmppFacade; @@ -54,7 +54,7 @@ private boolean mIsConfigured; private int mRetry; private BeemBroadcastReceiver mReceiver; - + private IXmppConnection mXmppConnection; /** * Constructor. @@ -97,14 +97,23 @@ @Override protected void onStop() { super.onStop(); - Log.d(TAG,"onStop"); - if (mIsConfigured && (mIsConnected || mXmppFacade != null)) { + Log.d(TAG,"onStop " + mIsConnectedService); + if (mIsConfigured && (mIsConnectedService || mXmppFacade != null)) { mReceiver.setBinded(false); + boolean isConnected = false; + try { + isConnected = mXmppConnection.isAuthentificated(); + } catch (RemoteException e) { + e.printStackTrace(); + } unbindService(mServConn); + if (isConnected) { + stopService(SERVICE_INTENT); + } mXmppFacade = null; } } - + /** * {@inheritDoc} */ @@ -115,12 +124,13 @@ mConnectionHandler.removeCallbacks(mConnectionRunnable); mProgressDialog.dismiss(); } - + /** * {@inheritDoc} */ protected void onResume() { super.onResume(); + Log.d(TAG,"onResume"); this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED)); } @@ -130,9 +140,9 @@ @Override public void onStart() { super.onStart(); - Log.d(TAG,"onStart"); + Log.d(TAG,"onStart " + mIsConnectedService); mIsConfigured = mSettings.getBoolean("PreferenceIsConfigured", false); - if (mIsConfigured && !mIsConnected) { + if (mIsConfigured && !mIsConnectedService) { try { Thread.sleep(1000); //HACK: Pour éviter de rebinder un service pas encore arreter. } catch (InterruptedException e) { @@ -140,6 +150,7 @@ } bindService(Login.SERVICE_INTENT, mServConn, BIND_AUTO_CREATE); mReceiver.setBinded(true); + mIsConnectedService = true; } } @@ -220,16 +231,16 @@ */ @Override public void connectionClosed() throws RemoteException { - mIsConnected = false; if (mXmppFacade != null) { + mConnectionHandler.postAtTime(mConnectionRunnable, Integer.parseInt(mSettings.getString("settings_key_reco_delay", "10")) * 1000 + SystemClock.uptimeMillis()); mXmppFacade = null; } } @Override public void connectionClosedOnError() throws RemoteException { - mIsConnected = false; if (mXmppFacade != null) { + mConnectionHandler.postAtTime(mConnectionRunnable, Integer.parseInt(mSettings.getString("settings_key_reco_delay", "10")) * 1000 + SystemClock.uptimeMillis()); mXmppFacade = null; } } @@ -237,11 +248,11 @@ @Override public void connectionFailed(String errorMsg) throws RemoteException { Log.d(TAG, "CONNECTIONFAILLED"); - mIsConnected = false; if (mXmppFacade != null) { mReceiver.setBinded(false); Login.this.unbindService(mServConn); Login.this.stopService(SERVICE_INTENT); + mIsConnectedService = false; mXmppFacade = null; } dismissProgressDialog(); @@ -285,7 +296,6 @@ @Override public void onConnect() throws RemoteException { - mIsConnected = true; dismissProgressDialog(); Log.i(TAG, "Connected."); mXmppFacade.changeStatus(Status.CONTACT_STATUS_AVAILABLE, null); @@ -296,18 +306,14 @@ @Override public void reconnectingIn(int seconds) throws RemoteException { - mIsConnected = true; - } @Override public void reconnectionFailed() throws RemoteException { - mIsConnected = false; } @Override public void reconnectionSuccessful() throws RemoteException { - mIsConnected = true; } } @@ -315,8 +321,6 @@ * ServiceConnection use to connect to the Beem Service. */ private class BeemServiceConnection implements ServiceConnection { - private IXmppConnection mXmppConnection; - /** * Constructor. */ @@ -327,19 +331,18 @@ public void onServiceConnected(ComponentName name, IBinder service) { Log.d(TAG, "service connected"); mXmppFacade = IXmppFacade.Stub.asInterface(service); + mIsConnectedService = true; try { mXmppConnection = mXmppFacade.createConnection(); mXmppConnection.addConnectionListener(new BeemConnectionListener()); if (!mXmppConnection.isAuthentificated()) { mConnectionHandler.post(new Runnable() { - @Override public void run() { mProgressDialog.setMessage(getString(R.string.login_login_progress)); mProgressDialog.show(); } }); - Login.this.startService(Login.SERVICE_INTENT); } else { startActivity(new Intent(Login.this, ContactList.class)); @@ -353,7 +356,7 @@ @Override public void onServiceDisconnected(ComponentName name) { Log.d(TAG, "service disconnected"); - mIsConnected = false; + mIsConnectedService = false; mXmppFacade = null; } }