# HG changeset patch # User Da Risk # Date 1261164763 -3600 # Node ID 72d9d76900af9d1cde38232954b5d1791d333e74 # Parent ca7bec1b5754734f33144b323e35c2ed29488b75 Fix many bugs and memory leak diff -r ca7bec1b5754 -r 72d9d76900af src/com/beem/project/beem/service/BeemChatManager.java --- a/src/com/beem/project/beem/service/BeemChatManager.java Thu Dec 17 16:15:02 2009 +0100 +++ b/src/com/beem/project/beem/service/BeemChatManager.java Fri Dec 18 20:32:43 2009 +0100 @@ -52,10 +52,7 @@ import org.jivesoftware.smack.ChatManager; import org.jivesoftware.smack.ChatManagerListener; import org.jivesoftware.smack.MessageListener; -import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.util.StringUtils; -import org.jivesoftware.smackx.ChatState; -import org.jivesoftware.smackx.ChatStateListener; import android.app.Notification; import android.app.PendingIntent; @@ -71,6 +68,7 @@ import com.beem.project.beem.service.aidl.IChatManagerListener; import com.beem.project.beem.service.aidl.IMessageListener; import com.beem.project.beem.service.aidl.IRoster; +import com.beem.project.beem.service.Message; // TODO: Auto-generated Javadoc /** @@ -83,7 +81,7 @@ * A listener for all the chat creation event that happens on the connection. * @author darisk */ - private class ChatListener implements ChatStateListener, ChatManagerListener, MessageListener { + private class ChatListener extends IMessageListener.Stub implements ChatManagerListener { /** * Constructor. @@ -97,20 +95,20 @@ @Override public void chatCreated(Chat chat, boolean locally) { IChat newchat = getChat(chat); - chat.addMessageListener(mChatListener); - final int n = mRemoteChatCreationListeners.beginBroadcast(); + try { + newchat.addMessageListener(mChatListener); + final int n = mRemoteChatCreationListeners.beginBroadcast(); - for (int i = 0; i < n; i++) { - IChatManagerListener listener = mRemoteChatCreationListeners.getBroadcastItem(i); - try { + for (int i = 0; i < n; i++) { + IChatManagerListener listener = mRemoteChatCreationListeners.getBroadcastItem(i); listener.chatCreated(newchat, locally); - } catch (RemoteException e) { - // The RemoteCallbackList will take care of removing the - // dead listeners. - Log.w(TAG, " Error while triggering remote connection listeners in chat creation", e); } + mRemoteChatCreationListeners.finishBroadcast(); + } catch (RemoteException e) { + // The RemoteCallbackList will take care of removing the + // dead listeners. + Log.w(TAG, " Error while triggering remote connection listeners in chat creation", e); } - mRemoteChatCreationListeners.finishBroadcast(); } /** @@ -127,7 +125,7 @@ Log.e(TAG, e.getMessage()); } PendingIntent contentIntent = PendingIntent.getActivity(mService, 0, chatIntent, - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent.FLAG_UPDATE_CURRENT); return contentIntent; } @@ -140,11 +138,11 @@ CharSequence tickerText = mService.getBind().getRoster().getContact(chat.getParticipant().getJID()) .getName(); Notification notification = new Notification(android.R.drawable.stat_notify_chat, tickerText, System - .currentTimeMillis()); + .currentTimeMillis()); notification.defaults = Notification.DEFAULT_ALL; notification.flags = Notification.FLAG_AUTO_CANCEL; notification.setLatestEventInfo(mService, tickerText, mService - .getString(R.string.BeemChatManagerNewMessage), makeChatIntent(chat)); + .getString(R.string.BeemChatManagerNewMessage), makeChatIntent(chat)); mService.sendNotification(chat.hashCode(), notification); } catch (RemoteException e) { Log.e(TAG, e.getMessage()); @@ -155,48 +153,18 @@ * {@inheritDoc} */ @Override - public void processMessage(Chat chat, Message message) { - ChatAdapter newchat = getChat(chat); - try { - if (message.getBody() != null) - newchat.addMessage(new com.beem.project.beem.service.Message(message)); - final int n = mRemoteMessageListeners.beginBroadcast(); - for (int i = 0; i < n; i++) { - IMessageListener listener = mRemoteMessageListeners.getBroadcastItem(i); - listener.processMessage(newchat, new com.beem.project.beem.service.Message(message)); - } - mRemoteMessageListeners.finishBroadcast(); - if (!newchat.isOpen() && message.getBody() != null) { - notifyNewChat(newchat); - } - } catch (RemoteException e) { - Log.w(TAG, e.getMessage()); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void stateChanged(Chat chat, ChatState state) { - IChat newchat = getChat(chat); - try { - newchat.setState(state.name()); - } catch (RemoteException e) { - e.printStackTrace(); - } - final int n = mRemoteMessageListeners.beginBroadcast(); - - for (int i = 0; i < n; i++) { - IMessageListener listener = mRemoteMessageListeners.getBroadcastItem(i); + public void processMessage(IChat chat, Message message) { try { - listener.stateChanged(newchat); + if (!chat.isOpen() && message.getBody() != null) { + notifyNewChat(chat); + } } catch (RemoteException e) { Log.w(TAG, e.getMessage()); } } - mRemoteMessageListeners.finishBroadcast(); - } + + @Override + public void stateChanged(IChat chat) {} } /** Tag to use with log methods. */ @@ -205,7 +173,6 @@ private final Map mChats = new HashMap(); private final ChatListener mChatListener = new ChatListener(); private final RemoteCallbackList mRemoteChatCreationListeners = new RemoteCallbackList(); - private final RemoteCallbackList mRemoteMessageListeners = new RemoteCallbackList(); private final BeemService mService; /** @@ -224,7 +191,8 @@ */ @Override public void addChatCreationListener(IChatManagerListener listener) throws RemoteException { - mRemoteChatCreationListeners.register(listener); + if (listener != null) + mRemoteChatCreationListeners.register(listener); } /** @@ -233,6 +201,7 @@ * @param listener listener to use for chat events on this chat session * @return the chat session */ + @Override public IChat createChat(Contact contact, IMessageListener listener) { String jid = contact.getJID(); return createChat(jid, listener); @@ -245,13 +214,18 @@ * @return the chat session */ public IChat createChat(String jid, IMessageListener listener) { - mRemoteMessageListeners.register(listener); String key = StringUtils.parseBareAddress(jid); + ChatAdapter result; if (mChats.containsKey(key)) { - return mChats.get(key); + result = mChats.get(key); + result.addMessageListener(listener); + return result; } - mAdaptee.createChat(key, mChatListener); - return mChats.get(key); + Chat c = mAdaptee.createChat(key, null); + result = new ChatAdapter(c); + result.addMessageListener(listener); + mChats.put(key, result); + return result; } /** @@ -259,11 +233,7 @@ */ @Override public void destroyChat(IChat chat) throws RemoteException { - Log.d(TAG, "BEGIN destroyChat - jid = " + chat.getParticipant().getJID()); - IChat c = mChats.remove(chat.getParticipant().getJID()); - if (c == null) - Log.w(TAG, "destroyChat - chat = null, jid = " + chat.getParticipant().getJID()); - Log.d(TAG, "END destroyChat - jid = " + chat.getParticipant().getJID()); + mChats.remove(chat.getParticipant().getJID()); } /* (non-Javadoc) @@ -299,7 +269,7 @@ IRoster mRoster = mService.getBind().getRoster(); for (ChatAdapter chat : mChats.values()) { - if (chat.getMessages().size() > 0) // TODO check plutot le nombre de messages dans l'historique + if (chat.getMessages().size() > 0) // TODO Verifier si le contact n'est pas dans le Roster openedChats.add(mRoster.getContact(chat.getParticipant().getJID())); } return openedChats; @@ -310,7 +280,8 @@ */ @Override public void removeChatCreationListener(IChatManagerListener listener) throws RemoteException { - mRemoteChatCreationListeners.unregister(listener); + if (listener != null) + mRemoteChatCreationListeners.unregister(listener); } } diff -r ca7bec1b5754 -r 72d9d76900af src/com/beem/project/beem/service/ChatAdapter.java --- a/src/com/beem/project/beem/service/ChatAdapter.java Thu Dec 17 16:15:02 2009 +0100 +++ b/src/com/beem/project/beem/service/ChatAdapter.java Fri Dec 18 20:32:43 2009 +0100 @@ -50,6 +50,8 @@ import org.jivesoftware.smack.Chat; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.MessageListener; +import org.jivesoftware.smackx.ChatStateListener; +import org.jivesoftware.smackx.ChatState; import android.os.RemoteCallbackList; import android.os.RemoteException; @@ -130,8 +132,9 @@ */ @Override public void removeMessageListener(IMessageListener listen) { - if (listen != null) + if (listen != null) { mRemoteListeners.unregister(listen); + } } /** @@ -192,21 +195,42 @@ mMessages.add(msg); } - private class MsgListener implements MessageListener { + private class MsgListener implements MessageListener, ChatStateListener { @Override public void processMessage(Chat chat, org.jivesoftware.smack.packet.Message message) { + Message msg = new Message(message); + ChatAdapter.this.addMessage(msg); final int n = mRemoteListeners.beginBroadcast(); for (int i = 0; i < n; i++) { IMessageListener listener = mRemoteListeners.getBroadcastItem(i); try { if (listener != null) - listener.processMessage(ChatAdapter.this, new Message(message)); + listener.processMessage(ChatAdapter.this, msg); } catch (RemoteException e) { Log.w(TAG, "Error while diffusing message to listener", e); } } mRemoteListeners.finishBroadcast(); } + + /** + * {@inheritDoc} + */ + @Override + public void stateChanged(Chat chat, ChatState state) { + mState = state.name(); + final int n = mRemoteListeners.beginBroadcast(); + + for (int i = 0; i < n; i++) { + IMessageListener listener = mRemoteListeners.getBroadcastItem(i); + try { + listener.stateChanged(ChatAdapter.this); + } catch (RemoteException e) { + Log.w(TAG, e.getMessage()); + } + } + mRemoteListeners.finishBroadcast(); + } } } diff -r ca7bec1b5754 -r 72d9d76900af src/com/beem/project/beem/ui/AddContact.java --- a/src/com/beem/project/beem/ui/AddContact.java Thu Dec 17 16:15:02 2009 +0100 +++ b/src/com/beem/project/beem/ui/AddContact.java Fri Dec 18 20:32:43 2009 +0100 @@ -79,7 +79,7 @@ private final List mGroup = new ArrayList(); private IXmppFacade mXmppFacade; private final ServiceConnection mServConn = new BeemServiceConnection(); - private BeemBroadcastReceiver mReceiver; + private final BeemBroadcastReceiver mReceiver = new BeemBroadcastReceiver(); static { SERVICE_INTENT.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService")); @@ -100,7 +100,7 @@ setContentView(R.layout.addcontact); Button ok = (Button) findViewById(R.id.addc_ok); ok.setOnClickListener(mOkListener); - mReceiver = new BeemBroadcastReceiver(mServConn); + this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED)); } /* (non-Javadoc) @@ -109,7 +109,6 @@ @Override protected void onStart() { super.onStart(); - this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED)); } /** @@ -118,9 +117,7 @@ @Override protected void onResume() { super.onResume(); - this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED)); bindService(new Intent(this, BeemService.class), mServConn, BIND_AUTO_CREATE); - mReceiver.setBinded(true); } /** @@ -129,10 +126,7 @@ @Override protected void onPause() { super.onPause(); - if (mReceiver.isBinded()) { - unbindService(mServConn); - mReceiver.setBinded(false); - } + unbindService(mServConn); } /* (non-Javadoc) @@ -158,7 +152,6 @@ @Override public void onServiceConnected(ComponentName name, IBinder service) { mXmppFacade = IXmppFacade.Stub.asInterface(service); - mReceiver.setBinded(true); } @Override diff -r ca7bec1b5754 -r 72d9d76900af src/com/beem/project/beem/ui/ChangeStatus.java --- a/src/com/beem/project/beem/ui/ChangeStatus.java Thu Dec 17 16:15:02 2009 +0100 +++ b/src/com/beem/project/beem/ui/ChangeStatus.java Fri Dec 18 20:32:43 2009 +0100 @@ -100,7 +100,7 @@ private IXmppFacade mXmppFacade; private final ServiceConnection mServConn = new BeemServiceConnection(); private final OnClickListener mOnClickOk = new MyOnClickListener(); - private BeemBroadcastReceiver mReceiver; + private final BeemBroadcastReceiver mReceiver = new BeemBroadcastReceiver(); /** * Constructor. @@ -138,7 +138,6 @@ mToast = Toast.makeText(this, R.string.ChangeStatusOk, Toast.LENGTH_LONG); mSpinner.setSelection(getPreferenceStatusIndex()); - mReceiver = new BeemBroadcastReceiver(mServConn); this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED)); } @@ -149,7 +148,6 @@ protected void onResume() { super.onResume(); bindService(new Intent(this, BeemService.class), mServConn, BIND_AUTO_CREATE); - mReceiver.setBinded(true); } /** @@ -159,10 +157,7 @@ protected void onPause() { super.onPause(); Log.d("TAG", "pause"); - if (mReceiver.isBinded()) { - unbindService(mServConn); - mReceiver.setBinded(false); - } + unbindService(mServConn); } /* (non-Javadoc) diff -r ca7bec1b5754 -r 72d9d76900af src/com/beem/project/beem/ui/Chat.java --- a/src/com/beem/project/beem/ui/Chat.java Thu Dec 17 16:15:02 2009 +0100 +++ b/src/com/beem/project/beem/ui/Chat.java Fri Dec 18 20:32:43 2009 +0100 @@ -111,7 +111,7 @@ static { SERVICE_INTENT.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService")); } - private Handler mHandler; + private Handler mHandler = new Handler(); private IRoster mRoster; private Contact mContact; @@ -128,12 +128,13 @@ private IChat mChat; private IChatManager mChatManager; - private IChatManagerListener mChatManagerListener; - private IMessageListener mMessageListener; - private MessagesListAdapter mMessagesListAdapter; + private final IMessageListener mMessageListener = new OnMessageListener(); + private MessagesListAdapter mMessagesListAdapter = new MessagesListAdapter(); private final ServiceConnection mConn = new BeemServiceConnection(); - private BeemBroadcastReceiver mBroadcastReceiver; + private final BeemBroadcastReceiver mBroadcastReceiver = new BeemBroadcastReceiver(); + private final BeemRosterListener mBeemRosterListener = new BeemRosterListener(); + private IXmppFacade mXmppFacade; /** * Constructor. @@ -148,21 +149,7 @@ @Override protected void onCreate(Bundle savedBundle) { super.onCreate(savedBundle); - - Log.v(TAG, "BEGIN onCreate."); setContentView(R.layout.chat); - mMessagesListAdapter = new MessagesListAdapter(this); - - mHandler = new Handler(); - - // SVC Bind - bindService(SERVICE_INTENT, mConn, BIND_AUTO_CREATE); - - // Listeners - mMessageListener = new OnMessageListener(); - mChatManagerListener = new OnChatManagerListener(); - - mBroadcastReceiver = new BeemBroadcastReceiver(mConn); this.registerReceiver(mBroadcastReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED)); // UI @@ -182,8 +169,13 @@ }); prepareIconsStatus(); + } - Log.v(TAG, "END onCreate."); + @Override + protected void onStart() { + super.onStart(); + if (mXmppFacade == null) + bindService(SERVICE_INTENT, mConn, BIND_AUTO_CREATE); } /** @@ -192,32 +184,7 @@ @Override protected void onDestroy() { super.onDestroy(); - - Log.v(TAG, "BEGIN onDestroy."); - - if (mChatManager != null) { - try { - mChatManager.removeChatCreationListener(mChatManagerListener); - } catch (RemoteException e) { - Log.e(TAG, e.getMessage()); - } - } - this.unregisterReceiver(mBroadcastReceiver); - unbindService(mConn); - - Log.v(TAG, "END onDestroy."); - } - - /** - * {@inheritDoc}. - */ - @Override - protected void onStart() { - super.onStart(); - - Log.v(TAG, "BEGIN onStart."); - Log.v(TAG, "END onStart."); } /** @@ -227,23 +194,21 @@ protected void onStop() { super.onStop(); - Log.v(TAG, "BEGIN onStop."); - if (mChat != null) { - try { + try { + if (mChat != null) { mChat.setOpen(false); - } catch (RemoteException e) { - Log.e(TAG, e.getMessage()); + mChat.removeMessageListener(mMessageListener); } + if (mRoster != null) + mRoster.removeRosterListener(mBeemRosterListener); + } catch (RemoteException e) { + Log.e(TAG, e.getMessage()); } - Log.v(TAG, "END onStop."); - } - - /** - * {@inheritDoc}. - */ - @Override - protected void onResume() { - super.onResume(); + unbindService(mConn); + mXmppFacade = null; + mRoster = null; + mChat = null; + mChatManager = null; } /** @@ -260,15 +225,12 @@ @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); - - Log.v(TAG, "BEGIN onNewIntent."); try { mContact = new Contact(intent.getData()); changeCurrentChat(mContact); } catch (RemoteException e) { Log.e(TAG, e.getMessage()); } - Log.v(TAG, "END onNewIntent."); } /** @@ -295,7 +257,6 @@ @Override public final boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); - MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.chat, menu); return true; @@ -315,7 +276,6 @@ case R.id.chat_menu_change_chat: try { final List openedChats = mChatManager.getOpenedChatList(); - if (openedChats.size() > 0) createChatSwitcherDialog(openedChats); else @@ -378,20 +338,21 @@ * @throws RemoteException If a Binder remote-invocation error occurred. */ private void changeCurrentChat(Contact contact) throws RemoteException { - Log.v(TAG, "BEGIN changeCurrentChat."); - if (mChat != null) + if (mChat != null) { mChat.setOpen(false); + mChat.removeMessageListener(mMessageListener); + } mChat = mChatManager.createChat(contact, mMessageListener); mChat.setOpen(true); - mChatManager.deleteChatNotification(mChat); + // TODO thecontact isnotnecesarrely ubn the roseter. + // this can leadtoa null exception mContact = mRoster.getContact(contact.getJID()); updateContactInformations(); updateContactStatusIcon(); playRegisteredTranscript(); - Log.v(TAG, "END changeCurrentChat."); } /** @@ -402,35 +363,26 @@ String fromBareJid = null; String fromName = null; List chatMessages = mChat.getMessages(); + mListMessages.clear(); + MessageText lastMessage = null; - Log.v(TAG, "BEGIN playRegisteredTranscript."); - mListMessages.clear(); - if (chatMessages.size() > 0) { - MessageText lastMessage = null; - for (Message m : chatMessages) { - fromBareJid = StringUtils.parseBareAddress(m.getFrom()); - fromName = mContact.getName(); - - if (fromBareJid == null) { - fromBareJid = getString(R.string.chat_self); - fromName = getString(R.string.chat_self); + for (Message m : chatMessages) { + fromBareJid = StringUtils.parseBareAddress(m.getFrom()); + fromName = mContact.getName(); + if (fromBareJid == null) { + fromBareJid = getString(R.string.chat_self); + fromName = getString(R.string.chat_self); + } + if (m.getBody() != null) { + if (lastMessage == null || !lastMessage.getBareJid().equals(fromBareJid)) { + lastMessage = new MessageText(fromBareJid, fromName, m.getBody()); + mListMessages.add(lastMessage); + } else { + lastMessage.setMessage(lastMessage.getMessage().concat("\n" + m.getBody())); } - - if (lastMessage == null) { - lastMessage = new MessageText(fromBareJid, fromName, m.getBody()); - continue; - } - - if (!lastMessage.getBareJid().equals(fromBareJid)) { - mListMessages.add(lastMessage); - lastMessage = new MessageText(fromBareJid, fromName, m.getBody()); - } else - lastMessage.setMessage(lastMessage.getMessage().concat("\n" + m.getBody())); } - mListMessages.add(lastMessage); } mMessagesListAdapter.notifyDataSetChanged(); - Log.v(TAG, "END playRegisteredTranscript."); } /** @@ -438,44 +390,36 @@ */ private final class BeemServiceConnection implements ServiceConnection { - private IXmppFacade mXmppFacade; - private final BeemRosterListener mBeemRosterListener = new BeemRosterListener(); /** * {@inheritDoc}. */ @Override - public void onServiceConnected(ComponentName name, IBinder service) { - Log.v(TAG, "BEGIN onServiceConnected."); - mXmppFacade = IXmppFacade.Stub.asInterface(service); - mBroadcastReceiver.setBinded(true); - try { - mChatManager = mXmppFacade.getChatManager(); - mRoster = mXmppFacade.getRoster(); - mRoster.addRosterListener(mBeemRosterListener); - mContact = new Contact(getIntent().getData()); - changeCurrentChat(mContact); - } catch (RemoteException e) { - Log.e(TAG, e.getMessage()); + public void onServiceConnected(ComponentName name, IBinder service) { + mXmppFacade = IXmppFacade.Stub.asInterface(service); + try { + mChatManager = mXmppFacade.getChatManager(); + mRoster = mXmppFacade.getRoster(); + mRoster.addRosterListener(mBeemRosterListener); + mContact = new Contact(getIntent().getData()); + changeCurrentChat(mContact); + } catch (RemoteException e) { + Log.e(TAG, e.getMessage()); + } } - Log.v(TAG, "END onServiceConnected."); - } /** * {@inheritDoc}. */ @Override - public void onServiceDisconnected(ComponentName name) { - Log.v(TAG, "BEGIN onServiceDisconnected."); - mXmppFacade = null; - mBroadcastReceiver.setBinded(false); - try { - mRoster.removeRosterListener(mBeemRosterListener); - } catch (RemoteException e) { - Log.e(TAG, e.getMessage()); + public void onServiceDisconnected(ComponentName name) { + mXmppFacade = null; + try { + mRoster.removeRosterListener(mBeemRosterListener); + } catch (RemoteException e) { + Log.e(TAG, e.getMessage()); + } } - Log.v(TAG, "END onServiceDisconnected."); - } } /** @@ -488,8 +432,6 @@ */ @Override public void onEntriesAdded(List addresses) throws RemoteException { - Log.v(TAG, "BEGIN onEntriesAdded."); - Log.v(TAG, "END onEntriesAdded."); } /** @@ -497,8 +439,6 @@ */ @Override public void onEntriesDeleted(List addresses) throws RemoteException { - Log.v(TAG, "BEGIN onEntriesDeleted."); - Log.v(TAG, "END onEntriesDeleted."); } /** @@ -506,8 +446,6 @@ */ @Override public void onEntriesUpdated(List addresses) throws RemoteException { - Log.v(TAG, "BEGIN onEntriesUpdated."); - Log.v(TAG, "END onEntriesUpdated."); } /** @@ -515,8 +453,6 @@ */ @Override public void onEntryDeleteFromGroup(String group, String jid) throws RemoteException { - Log.v(TAG, "BEGIN onEntryDeleteFromGroup."); - Log.v(TAG, "END onEntryDeleteFromGroup."); } /** @@ -524,20 +460,17 @@ */ @Override public void onPresenceChanged(final PresenceAdapter presence) throws RemoteException { - Log.v(TAG, "BEGIN onPresenceChanged."); if (mContact.getJID().equals(StringUtils.parseBareAddress(presence.getFrom()))) { mHandler.post(new Runnable() { @Override public void run() { mContact.setStatus(presence.getStatus()); mContact.setMsgState(presence.getStatusText()); - updateContactInformations(); updateContactStatusIcon(); } }); } - Log.v(TAG, "END onPresenceChanged."); } } @@ -551,16 +484,11 @@ */ @Override public void processMessage(IChat chat, final Message msg) throws RemoteException { - Log.v(TAG, "BEGIN processMessage."); - final String fromBareJid = StringUtils.parseBareAddress(msg.getFrom()); if (mContact.getJID().equals(fromBareJid)) { mHandler.post(new Runnable() { - /** - * {@inheritDoc}. - */ @Override public void run() { if (msg.getBody() != null && msg.getType() != Message.MSG_TYPE_ERROR) { @@ -570,14 +498,13 @@ if (lastMessage != null && lastMessage.getBareJid().equals(fromBareJid)) { lastMessage.setMessage(lastMessage.getMessage().concat("\n" + msg.getBody())); mListMessages.set(mListMessages.size() - 1, lastMessage); - } else + } else if (msg.getBody() != null) mListMessages.add(new MessageText(fromBareJid, mContact.getName(), msg.getBody())); mMessagesListAdapter.notifyDataSetChanged(); } } }); } - Log.v(TAG, "END processMessage."); } /** @@ -585,38 +512,7 @@ */ @Override public void stateChanged(IChat chat) throws RemoteException { - Log.v(TAG, "BEGIN stateChanged."); - mHandler.post(new Runnable() { - - /** - * {@inheritDoc}. - */ - @Override - public void run() { - } - }); - Log.v(TAG, "END stateChanged."); - } - } - - /** - * This class serve to listen on ChatManager events. - * @author Jean-Manuel Da Silva - */ - private class OnChatManagerListener extends IChatManagerListener.Stub { - /** - * Constructor. - */ - public OnChatManagerListener() { - Log.v(TAG, "OnChatManagerListener constructor."); - } - - /** - * {@inheritDoc}. - */ - @Override - public void chatCreated(IChat chat, boolean locally) throws RemoteException { - Log.i(TAG, "Chat has been created."); + //TODO } } @@ -624,7 +520,6 @@ * Update the contact informations. */ private void updateContactInformations() { - Log.v(TAG, "BEGIN updateContactInformations."); // Check for a contact name update if (!(mContactNameTextView.getText().toString().equals(mContact.getName()))) mContactNameTextView.setText(mContact.getName()); @@ -635,16 +530,13 @@ mContactStatusMsgTextView.setText(mContact.getMsgState()); Linkify.addLinks(mContactStatusMsgTextView, Linkify.WEB_URLS); } - Log.v(TAG, "END updateContactInformations."); } /** * Update the contact status icon. */ private void updateContactStatusIcon() { - Log.v(TAG, "BEGIN updateContactStatusIcon."); mContactStatusIcon.setImageBitmap(mStatusIconsMap.get(mContact.getStatus())); - Log.v(TAG, "END updateContactStatusIcon."); } /** @@ -670,14 +562,11 @@ */ private class MessagesListAdapter extends BaseAdapter { - private final Context mContext; - /** * Constructor. * @param context The MessagesListAdapter context. */ - public MessagesListAdapter(final Context context) { - mContext = context; + public MessagesListAdapter() { } /** @@ -716,7 +605,7 @@ public View getView(int position, View convertView, ViewGroup parent) { MessageView sv; if (convertView == null) { - sv = new MessageView(mContext, mListMessages.get(position).getName(), mListMessages.get(position) + sv = new MessageView(Chat.this, mListMessages.get(position).getName(), mListMessages.get(position) .getMessage()); } else { sv = (MessageView) convertView; @@ -724,6 +613,7 @@ sv.setMessage(mListMessages.get(position).getMessage()); } + //TODO Put this un the xml layout sv.setPadding(2, 2, 2, 4); sv.mName.setTextSize(16); @@ -859,7 +749,6 @@ */ @Override public boolean onKey(View v, int keyCode, KeyEvent event) { - Log.d(TAG, "KeyEvent = " + event.getAction()); if (event.getAction() == KeyEvent.ACTION_DOWN) { switch (keyCode) { case KeyEvent.KEYCODE_ENTER: @@ -878,7 +767,6 @@ private void sendMessage() { final String inputContent = mInputField.getText().toString(); - Log.v(TAG, "BEGIN sendMessage."); if (!"".equals(inputContent)) { Message msgToSend = new Message(mContact.getJID(), Message.MSG_TYPE_CHAT); msgToSend.setBody(inputContent); @@ -900,6 +788,9 @@ mMessagesListAdapter.notifyDataSetChanged(); mInputField.setText(null); } - Log.v(TAG, "END sendMessage."); + } + + protected void finalize() { + Log.e("CHATFIN", "FINALIZE"); } } diff -r ca7bec1b5754 -r 72d9d76900af src/com/beem/project/beem/ui/ContactList.java --- a/src/com/beem/project/beem/ui/ContactList.java Thu Dec 17 16:15:02 2009 +0100 +++ b/src/com/beem/project/beem/ui/ContactList.java Fri Dec 18 20:32:43 2009 +0100 @@ -120,7 +120,7 @@ private IXmppFacade mXmppFacade; private SharedPreferences mSettings; private final ServiceConnection mServConn = new BeemServiceConnection(); - private BeemBroadcastReceiver mReceiver; + private final BeemBroadcastReceiver mReceiver = new BeemBroadcastReceiver(); private final Map mIconsMap = new HashMap(); private LayoutInflater mInflater; private ComparatorContactListByStatusAndName mComparator = new ComparatorContactListByStatusAndName(); @@ -145,8 +145,6 @@ mAdapterBanner = new BeemBanner(this); mHandler = new Handler(); - bindService(SERVICE_INTENT, mServConn, BIND_AUTO_CREATE); - mReceiver = new BeemBroadcastReceiver(mServConn); this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED)); mInflater = getLayoutInflater(); @@ -275,6 +273,8 @@ @Override protected void onStart() { super.onStart(); + if (mXmppFacade == null) + bindService(SERVICE_INTENT, mServConn, BIND_AUTO_CREATE); } /** @@ -283,9 +283,8 @@ @Override protected void onStop() { super.onStop(); - if (mReceiver.isBinded()) { - mReceiver.setBinded(false); - } + unbindService(mServConn); + mXmppFacade = null; } /* @@ -302,12 +301,7 @@ Log.d("ContactList", "Remode exception", e); } this.unregisterReceiver(mReceiver); - unbindService(mServConn); mRoster = null; - /* - for (BitmapDrawable d : mIconsMap.values()) { - d.setCallback(null); - }*/ Log.e("CONTACTLIST", "onDestroy activity"); } @@ -770,7 +764,6 @@ @Override public void onServiceConnected(ComponentName name, IBinder service) { mXmppFacade = IXmppFacade.Stub.asInterface(service); - mReceiver.setBinded(true); try { mRoster = mXmppFacade.getRoster(); if (mRoster != null) { @@ -822,7 +815,6 @@ mListContact.clear(); mListGroup.clear(); mContactOnGroup.clear(); - mReceiver.setBinded(false); } } } diff -r ca7bec1b5754 -r 72d9d76900af src/com/beem/project/beem/ui/GroupList.java --- a/src/com/beem/project/beem/ui/GroupList.java Thu Dec 17 16:15:02 2009 +0100 +++ b/src/com/beem/project/beem/ui/GroupList.java Fri Dec 18 20:32:43 2009 +0100 @@ -81,7 +81,7 @@ private static final Intent SERVICE_INTENT = new Intent(); private final ServiceConnection mServConn = new BeemServiceConnection(); - private BeemBroadcastReceiver mReceiver; + private final BeemBroadcastReceiver mReceiver = new BeemBroadcastReceiver(); private IXmppFacade mXmppFacade; private IRoster mRoster; private String mJID; @@ -107,7 +107,6 @@ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.group_list); - mReceiver = new BeemBroadcastReceiver(mServConn); mContact = getIntent().getParcelableExtra("contact"); mJID = mContact.getJID(); final ListView listView = getListView(); @@ -128,7 +127,6 @@ protected void onResume() { super.onResume(); bindService(new Intent(this, BeemService.class), mServConn, BIND_AUTO_CREATE); - mReceiver.setBinded(true); } /** @@ -137,10 +135,7 @@ @Override protected void onPause() { super.onPause(); - if (mReceiver.isBinded()) { - unbindService(mServConn); - mReceiver.setBinded(false); - } + unbindService(mServConn); } /* (non-Javadoc) @@ -251,7 +246,6 @@ @Override public void onServiceConnected(ComponentName name, IBinder service) { mXmppFacade = IXmppFacade.Stub.asInterface(service); - mReceiver.setBinded(true); try { mRoster = mXmppFacade.getRoster(); setAdapter(); diff -r ca7bec1b5754 -r 72d9d76900af src/com/beem/project/beem/ui/PrivacyList.java --- a/src/com/beem/project/beem/ui/PrivacyList.java Thu Dec 17 16:15:02 2009 +0100 +++ b/src/com/beem/project/beem/ui/PrivacyList.java Fri Dec 18 20:32:43 2009 +0100 @@ -102,7 +102,7 @@ private String mCurrPrivacyListName; private final ServiceConnection mConn = new BeemServiceConnection(); - private BeemBroadcastReceiver mBroadcastReceiver; + private final BeemBroadcastReceiver mBroadcastReceiver = new BeemBroadcastReceiver(); private IPrivacyListManager mPrivacyListManager; private IPrivacyListListener mPrivacyListListener; @@ -148,7 +148,6 @@ bindService(SERVICE_INTENT, mConn, BIND_AUTO_CREATE); mPrivacyListListener = new PrivacyListListener(); - mBroadcastReceiver = new BeemBroadcastReceiver(mConn); this.registerReceiver(mBroadcastReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED)); Log.d(TAG, "END onCreate."); @@ -297,7 +296,6 @@ public void onServiceConnected(ComponentName name, IBinder service) { Log.v(TAG, "BEGIN onServiceConnected."); mXmppFacade = IXmppFacade.Stub.asInterface(service); - mBroadcastReceiver.setBinded(true); try { mPrivacyListManager = mXmppFacade.getPrivacyListManager(); mPrivacyListManager.addPrivacyListListener(mPrivacyListListener); @@ -314,7 +312,6 @@ public void onServiceDisconnected(ComponentName name) { Log.v(TAG, "BEGIN onServiceDisconnected."); mXmppFacade = null; - mBroadcastReceiver.setBinded(false); try { mPrivacyListManager.removePrivacyListListener(mPrivacyListListener); } catch (RemoteException e) { diff -r ca7bec1b5754 -r 72d9d76900af src/com/beem/project/beem/ui/Subscription.java --- a/src/com/beem/project/beem/ui/Subscription.java Thu Dec 17 16:15:02 2009 +0100 +++ b/src/com/beem/project/beem/ui/Subscription.java Fri Dec 18 20:32:43 2009 +0100 @@ -76,7 +76,7 @@ private IXmppFacade mService; private String mContact; private ServiceConnection mServConn = new BeemServiceConnection(); - private BeemBroadcastReceiver mReceiver; + private final BeemBroadcastReceiver mReceiver= new BeemBroadcastReceiver(); private MyOnClickListener mClickListener = new MyOnClickListener(); static { @@ -96,7 +96,6 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.subscription); - mReceiver = new BeemBroadcastReceiver(mServConn); findViewById(R.id.SubscriptionAccept).setOnClickListener(mClickListener); findViewById(R.id.SubscriptionRefuse).setOnClickListener(mClickListener); mContact = getIntent().getStringExtra("from"); @@ -113,7 +112,6 @@ protected void onResume() { super.onResume(); bindService(new Intent(this, BeemService.class), mServConn, BIND_AUTO_CREATE); - mReceiver.setBinded(true); } /* (non-Javadoc) @@ -122,10 +120,7 @@ @Override protected void onPause() { super.onPause(); - if (mReceiver.isBinded()) { - unbindService(mServConn); - mReceiver.setBinded(false); - } + unbindService(mServConn); } /* (non-Javadoc) @@ -190,7 +185,6 @@ @Override public void onServiceConnected(ComponentName name, IBinder service) { mService = IXmppFacade.Stub.asInterface(service); - mReceiver.setBinded(true); } @Override diff -r ca7bec1b5754 -r 72d9d76900af src/com/beem/project/beem/utils/BeemBroadcastReceiver.java --- a/src/com/beem/project/beem/utils/BeemBroadcastReceiver.java Thu Dec 17 16:15:02 2009 +0100 +++ b/src/com/beem/project/beem/utils/BeemBroadcastReceiver.java Fri Dec 18 20:32:43 2009 +0100 @@ -60,16 +60,12 @@ /** Broadcast intent type. */ public static final String BEEM_CONNECTION_CLOSED = "BeemConnectionClosed"; - private ServiceConnection mService; - private boolean mIsBinded; /** * constructor. * @param service service observed */ - public BeemBroadcastReceiver(final ServiceConnection service) { - mService = service; - mIsBinded = false; + public BeemBroadcastReceiver() { } /** @@ -78,9 +74,6 @@ @Override public void onReceive(Context context, Intent intent) { Log.d("Broadcast", "onReceive"); - if (mIsBinded) - context.unbindService(mService); - setBinded(false); // TODO ce code est comment car il empeche de gerer un cancel sur une connexion // start activity if unexpected disconnection // if (!intent.getBooleanExtra("normally", false)) @@ -90,22 +83,7 @@ if (context instanceof Activity) { Activity act = (Activity) context; act.finish(); + // The service will be unbinded in the destroy of the activity. } } - - /** - * service is binded. - * @param binded the state of the bind. - */ - public void setBinded(boolean binded) { - mIsBinded = binded; - } - - /** - * return service bind status. - * @return service bind status. - */ - public boolean isBinded() { - return mIsBinded; - } }