--- 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<Contact> 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<Message> 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<String> addresses) throws RemoteException {
- Log.v(TAG, "BEGIN onEntriesAdded.");
- Log.v(TAG, "END onEntriesAdded.");
}
/**
@@ -497,8 +439,6 @@
*/
@Override
public void onEntriesDeleted(List<String> addresses) throws RemoteException {
- Log.v(TAG, "BEGIN onEntriesDeleted.");
- Log.v(TAG, "END onEntriesDeleted.");
}
/**
@@ -506,8 +446,6 @@
*/
@Override
public void onEntriesUpdated(List<String> 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 <dasilvj at beem-project dot com>
- */
- 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");
}
}