deconnexion et fin du service presque ok
authorDa Risk <darisk972@gmail.com>
Tue, 21 Apr 2009 19:37:32 +0200
changeset 127 395f1beb409f
parent 126 8754e2f19c9c
child 128 52d32ded7b9d
deconnexion et fin du service presque ok
src/com/beem/project/beem/BeemApplication.java
src/com/beem/project/beem/service/XmppFacade.java
src/com/beem/project/beem/ui/ChangeStatus.java
src/com/beem/project/beem/ui/ContactList.java
src/com/beem/project/beem/ui/SendIM.java
--- a/src/com/beem/project/beem/BeemApplication.java	Tue Apr 21 17:14:09 2009 +0200
+++ b/src/com/beem/project/beem/BeemApplication.java	Tue Apr 21 19:37:32 2009 +0200
@@ -95,7 +95,7 @@
 	mBeemApp.mActivity = activity;
 	mBeemApp.mProgressDialog = new ProgressDialog(activity);
 	mBeemApp.mProgressDialog.setTitle("Beem");
-	//mBeemApp.mProgressDialog.setIcon(R.drawable.logo);
+	// mBeemApp.mProgressDialog.setIcon(R.drawable.logo);
 	mBeemApp.mProgressDialog.setMessage("Connecting...");
 	mBeemApp.mApplicationContext = activity.getApplication();
 	mBeemApp.mPrivateResources = activity.getResources();
@@ -126,6 +126,13 @@
 	}
     }
 
+    public synchronized void unbindBeemService() {
+	if (mIsConnected) {
+	    mApplicationContext.unbindService(mServConn);
+	    mIsConnected = false;
+	}
+    }
+
     /**
      * 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.
@@ -160,15 +167,15 @@
     }
 
     private class ConnectionRunnable implements Runnable {
-	private String mErrorMsg;	
-	
+	private String mErrorMsg;
+
 	public ConnectionRunnable(String string) {
 	    this.mErrorMsg = string;
 	}
 
 	@Override
 	public void run() {
-	    mBeemApp.mProgressDialog.setMessage(mErrorMsg);	    
+	    mBeemApp.mProgressDialog.setMessage(mErrorMsg);
 	}
 
 	/**
@@ -206,7 +213,7 @@
 	@Override
 	public void connectionClosed() throws RemoteException {
 	    // TODO Auto-generated method stub
-	    Log.e("BeemApp","test1");
+	    Log.e("BeemApp", "test1");
 
 	}
 
@@ -216,7 +223,7 @@
 	@Override
 	public void connectionClosedOnError() throws RemoteException {
 	    mBeemApp.mProgressDialog.setMessage("Connection closed on error");
-	    Log.e(TAG,"ConnectionClosedOnError");
+	    Log.e(TAG, "ConnectionClosedOnError");
 	    // TODO afficher une notification et reafficher le progress dialog
 	}
 
@@ -252,7 +259,7 @@
 	@Override
 	public void reconnectionFailed() throws RemoteException {
 	    // TODO Auto-generated method stub
-	    Log.e("BeemApp","test3");
+	    Log.e("BeemApp", "test3");
 
 	}
 
--- a/src/com/beem/project/beem/service/XmppFacade.java	Tue Apr 21 17:14:09 2009 +0200
+++ b/src/com/beem/project/beem/service/XmppFacade.java	Tue Apr 21 19:37:32 2009 +0200
@@ -13,6 +13,7 @@
 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.ui.ChangeStatus;
 
 /**
  * This class is a facade for the Beem Service.
@@ -103,7 +104,7 @@
 	// TODO
 	// mStatusNotification.contentView = ;
 	mStatusNotification.setLatestEventInfo(mBeemService, "Beem Status", text, PendingIntent.getActivity(
-	    mBeemService, 0, new Intent(), 0));
+	    mBeemService, 0, new Intent(mBeemService,ChangeStatus.class), 0));
 	mBeemService.sendNotification(BeemService.NOTIFICATION_STATUS_ID, mStatusNotification);
     }
 }
--- a/src/com/beem/project/beem/ui/ChangeStatus.java	Tue Apr 21 17:14:09 2009 +0200
+++ b/src/com/beem/project/beem/ui/ChangeStatus.java	Tue Apr 21 19:37:32 2009 +0200
@@ -1,7 +1,11 @@
 package com.beem.project.beem.ui;
 
 import android.app.Activity;
+import android.content.Intent;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.RemoteException;
+import android.util.Log;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.ArrayAdapter;
@@ -9,45 +13,131 @@
 import android.widget.Spinner;
 import android.widget.TextView;
 
+import com.beem.project.beem.BeemApplication;
+import com.beem.project.beem.BeemService;
 import com.beem.project.beem.R;
+import com.beem.project.beem.R.string;
+import com.beem.project.beem.service.aidl.IXmppFacade;
+import com.beem.project.beem.utils.Status;
 
 public class ChangeStatus extends Activity {
-    
+
     private TextView mTextStatus;
     private Button mOk;
     private Button mClear;
-    private static final String[] mStatus = {"Available for chat", "Available", "Busy", "Away",
-	"Unavailable", "Disconnected"};
-    
+    private Handler mHandler;
+    private BeemApplication mBeemApplication;
+    private IXmppFacade mService = null;
+    private Spinner mSpinner;
+    private static final String[] STATUS = { "Available for chat", "Available", "Busy", "Away", "Unavailable",
+	"Disconnected" };
+    private static final int DISCONNECTED_IDX = 5;
+    private static final int AVAILABLE_FOR_CHAT_IDX = 0;
+    private static final int AVAILABLE_IDX = 1;
+    private static final int BUSY_IDX = 2;
+    private static final int AWAY_IDX = 3;
+    private static final int UNAVAILABLE_IDX = 4;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
-        // TODO Auto-generated method stub
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.changestatus);
-        
-        mTextStatus = (TextView) findViewById(R.id.ChangeStatusText);
-        mOk = (Button) findViewById(R.id.ChangeStatusOk);
-        mClear = (Button) findViewById(R.id.ChangeStatusClear);
-        mOk.setOnClickListener(mOnClickOk);
-        mClear.setOnClickListener(mOnClickClear);
-        
-        
-        Spinner s1 = (Spinner) findViewById(R.id.ChangeStatusSpinner);
-        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
-                android.R.layout.simple_spinner_item, mStatus);
-        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
-        s1.setAdapter(adapter);
+	super.onCreate(savedInstanceState);
+	setContentView(R.layout.changestatus);
+
+	// Beem Application specific
+	mHandler = new Handler();
+	mBeemApplication = BeemApplication.getApplication(this);
+
+	mTextStatus = (TextView) findViewById(R.id.ChangeStatusText);
+	mOk = (Button) findViewById(R.id.ChangeStatusOk);
+	mClear = (Button) findViewById(R.id.ChangeStatusClear);
+	mOk.setOnClickListener(mOnClickOk);
+	mClear.setOnClickListener(mOnClickClear);
+
+	mSpinner = (Spinner) findViewById(R.id.ChangeStatusSpinner);
+	ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, STATUS);
+	adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+	mSpinner.setAdapter(adapter);
+    }
+
+    @Override
+    protected void onStart() {
+	super.onStart();
+	mBeemApplication.startBeemService();
+    }
+
+    @Override
+    protected void onResume() {
+	super.onResume();
+	mBeemApplication.callWhenConnectedToServer(mHandler, new Runnable() {
+	    @Override
+	    public void run() {
+		mService = mBeemApplication.getXmppFacade();
+	    }
+	});
     }
     
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        mBeemApplication.unbindBeemService();
+    }
+
     private OnClickListener mOnClickOk = new OnClickListener() {
 	public void onClick(View v) {
+	    if (v == mOk) {
+		String selected = (String) mSpinner.getSelectedItem();
+		if (selected != null) {
+		    CharSequence msg = mTextStatus.getText();
+		    int status = getStatusForService(selected);
+		    if (status == Status.CONTACT_STATUS_DISCONNECT) {
+			stopService(new Intent(ChangeStatus.this, BeemService.class));
+		    } else
+			try {
+			    mService.changeStatus(status, msg.toString());
+
+			} catch (RemoteException e) {
+			    // TODO Auto-generated catch block
+			    e.printStackTrace();
+			}
+		    ChangeStatus.this.finish();
+		}
+	    } else if (v == mClear) {
+		mTextStatus.setText(null);
+	    }
 
 	};
     };
-    
+
     private OnClickListener mOnClickClear = new OnClickListener() {
 	public void onClick(View v) {
 	    mTextStatus.setText(null);
 	};
     };
+
+    private int getStatusForService(String item) {
+	int res = Status.CONTACT_STATUS_AVAILABLE;
+	for (int i = 0; i < ChangeStatus.STATUS.length; i++) {
+	    String str = ChangeStatus.STATUS[i];
+	    if (str.equals(item)) {
+		switch (i) {
+		    case ChangeStatus.DISCONNECTED_IDX:
+			return Status.CONTACT_STATUS_DISCONNECT;
+		    case ChangeStatus.AVAILABLE_FOR_CHAT_IDX:
+			return Status.CONTACT_STATUS_AVAILABLE_FOR_CHAT;
+		    case ChangeStatus.AVAILABLE_IDX:
+			return Status.CONTACT_STATUS_AVAILABLE;
+		    case ChangeStatus.AWAY_IDX:
+			return Status.CONTACT_STATUS_AWAY;
+		    case ChangeStatus.BUSY_IDX:
+			return Status.CONTACT_STATUS_BUSY;
+		    case ChangeStatus.UNAVAILABLE_IDX:
+			return Status.CONTACT_STATUS_UNAVAILABLE;
+		    default:
+			res = Status.CONTACT_STATUS_AVAILABLE;
+			break;
+		}
+	    }
+	}
+	return res;
+    }
 }
--- a/src/com/beem/project/beem/ui/ContactList.java	Tue Apr 21 17:14:09 2009 +0200
+++ b/src/com/beem/project/beem/ui/ContactList.java	Tue Apr 21 19:37:32 2009 +0200
@@ -74,6 +74,13 @@
 	super.onStart();
 	mBeemApplication.startBeemService();
     }
+    
+    @Override
+    protected void onDestroy() {
+        // TODO Auto-generated method stub
+        super.onDestroy();
+        mBeemApplication.unbindBeemService();
+    }
 
     @Override
     protected void onResume() {
--- a/src/com/beem/project/beem/ui/SendIM.java	Tue Apr 21 17:14:09 2009 +0200
+++ b/src/com/beem/project/beem/ui/SendIM.java	Tue Apr 21 19:37:32 2009 +0200
@@ -29,16 +29,14 @@
 import com.beem.project.beem.service.aidl.IXmppFacade;
 
 /**
- * This activity class provides the view for instant messaging
- *         after selecting a correspondant.
- * @author barbu 
+ * This activity class provides the view for instant messaging after selecting a correspondant.
+ * @author barbu
  */
 
-public class SendIM extends Activity implements OnClickListener,
-	OnKeyListener {
+public class SendIM extends Activity implements OnClickListener, OnKeyListener {
     private EditText mToSend;
-    //private ArrayList<String> mMessages = new ArrayList<String>();
-    //private ArrayAdapter<String> mAdapter;
+    // private ArrayList<String> mMessages = new ArrayList<String>();
+    // private ArrayAdapter<String> mAdapter;
     private SendIMDialogSmiley mSmyDialog;
     private SharedPreferences mSet;
     private SharedPreferences mGlobalSettings;
@@ -78,11 +76,10 @@
 	mToSend = (EditText) findViewById(R.id.userText);
 	mSet = getSharedPreferences("lol", MODE_PRIVATE);
 	mSmyDialog = new SendIMDialogSmiley(this, mSet);
-	mGlobalSettings = getSharedPreferences(
-		getString(R.string.PreferenceFileName), MODE_PRIVATE);
-	/*mAdapter = new ArrayAdapter<String>(this, R.layout.messagelist,
-		mMessages);
-	setListAdapter(mAdapter);*/
+	mGlobalSettings = getSharedPreferences(getString(R.string.PreferenceFileName), MODE_PRIVATE);
+	/*
+	 * mAdapter = new ArrayAdapter<String>(this, R.layout.messagelist, mMessages); setListAdapter(mAdapter);
+	 */
 
 	mToSend.setOnClickListener(this);
 	mToSend.setOnKeyListener(this);
@@ -90,9 +87,8 @@
 	mText = (TextView) findViewById(R.id.sendimlist);
 	mScrolling = (ScrollView) findViewById(R.id.sendimscroll);
     }
-    
-    private void setViewHeader()
-    {
+
+    private void setViewHeader() {
 	String status = mContact.getMsgState();
 	if (status == null)
 	    status = getString(R.string.SendIMNoStatusSet);
@@ -104,7 +100,7 @@
     @Override
     public void onStart() {
 	super.onStart();
-	//TODO cancel the notification if any
+	// TODO cancel the notification if any
 	if (mContact == null)
 	    mContact = getIntent().getParcelableExtra("contact");
 	setViewHeader();
@@ -115,9 +111,9 @@
 	    mChatManager.addChatCreationListener(mChatManagerListener);
 	    mChat = mChatManager.createChat(mContact, mMessageListener);
 	    String text = mChat.getLastMessages();
-	    if (! "".equals(text)) {
+	    if (!"".equals(text)) {
 		mText.append(text);
-		mChat.clearLastMessages(); 
+		mChat.clearLastMessages();
 	    }
 	} catch (RemoteException e) {
 	    // TODO Auto-generated catch block
@@ -135,8 +131,9 @@
 	    // TODO Auto-generated catch block
 	    e.printStackTrace();
 	}
+	mBeemApplication.unbindBeemService();
     }
-    
+
     /**
      * Abstract method inherited from OnClickListener
      */
@@ -145,9 +142,8 @@
     }
 
     /**
-     * This method send a message to the server over the XMPP connection and
-     * display it on activity view TODO : Exception si la connexion se coupe
-     * pendant la conversation
+     * This method send a message to the server over the XMPP connection and display it on activity view TODO :
+     * Exception si la connexion se coupe pendant la conversation
      */
     private void sendText() {
 	if (mSpeak)
@@ -190,9 +186,7 @@
 
     /**
      * Callback for menu creation.
-     * 
-     * @param menu
-     *            the menu created
+     * @param menu the menu created
      * @return true on success, false otherwise
      */
     @Override
@@ -217,8 +211,7 @@
     private class OnChatListener extends IChatManagerListener.Stub {
 
 	@Override
-	public void chatCreated(IChat chat, boolean locally)
-		throws RemoteException {
+	public void chatCreated(IChat chat, boolean locally) throws RemoteException {
 	    Log.i("LOG", "chatCreated");
 
 	}
@@ -228,31 +221,29 @@
     private class OnMessageListener extends IMessageListener.Stub {
 
 	@Override
-	public void processMessage(IChat chat, Message msg)
-		throws RemoteException {
+	public void processMessage(IChat chat, Message msg) throws RemoteException {
 	    Log.i("LOG", "processMessage");
-	    /*mAdapter.add(mContact.getJID() + " "
-		    + getString(R.string.SendIMSays) + msg.getBody());*/
-	    if(chat!= mChat)
+	    /*
+	     * mAdapter.add(mContact.getJID() + " " + getString(R.string.SendIMSays) + msg.getBody());
+	     */
+	    if (chat != mChat)
 		return;
-	    
+
 	    final Message m = msg;
 	    mHandler.post(new Runnable() {
-	    
-	        @Override
-	        public void run() {
-	            if (m.getBody() != null)
-	            {
-	        	if (!mSpeak)
-	        	    mText.append(m.getBody() + "\n");
-	        	else
-	        	    mText.append(mContact.getJID() + " "
-				    + getString(R.string.SendIMSays) + m.getBody() + "\n");
-	        	mSpeak = false;
-	        	mScrolling.fullScroll(ScrollView.FOCUS_DOWN);
-	        	mToSend.requestFocus();
-	            }
-	        }
+
+		@Override
+		public void run() {
+		    if (m.getBody() != null) {
+			if (!mSpeak)
+			    mText.append(m.getBody() + "\n");
+			else
+			    mText.append(mContact.getJID() + " " + getString(R.string.SendIMSays) + m.getBody() + "\n");
+			mSpeak = false;
+			mScrolling.fullScroll(ScrollView.FOCUS_DOWN);
+			mToSend.requestFocus();
+		    }
+		}
 	    });
 	}
     }