--- a/res/layout/chat.xml Sat Mar 13 19:32:08 2010 +0100
+++ b/res/layout/chat.xml Sat Mar 13 19:32:31 2010 +0100
@@ -20,6 +20,9 @@
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:autoLink="all" android:textSize="12sp" android:textColor="#FFFFFF"
android:textColorLink="#FFFFFF" />
+ <TextView android:id="@+id/chat_contact_chat_state"
+ android:layout_width="fill_parent" android:layout_height="wrap_content"
+ android:textStyle="italic" android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
<View android:layout_width="fill_parent" android:layout_height="2dp"
--- a/res/values-fr/strings.xml Sat Mar 13 19:32:08 2010 +0100
+++ b/res/values-fr/strings.xml Sat Mar 13 19:32:31 2010 +0100
@@ -55,20 +55,6 @@
<string name="AddCBadForm">Mauvais formulaire</string>
<string name="AddCContactAlready">Contact déjà ajouté</string>
- <!-- SendIM class -->
- <string name="SendIMActTitle">Beem - Chat</string>
-
- <string name="SendIMSays"> %s dit :\n%s\n</string>
- <string name="SendIMYouSay">Vous dites :\n%s\n</string>
- <string name="SendIMSameSpeaker">%s\n</string>
- <string name="SendIMToSendHint">Tapez votre texte ici</string>
- <string name="SendIMState">Est : </string>
- <string name="SendIMErrorMsg">Erreur : %s\n</string>
- <string name="SendIMFrom">et est en train de parler depuis : </string>
- <string name="SendIMSmiley">Insérer un sourire</string>
- <string name="SendIMLoginHint">Nom d\'utilisateur</string>
- <string name="SendIMNoStatusSet">Aucun statut défini</string>
-
<!-- ChangeStatus class -->
<string name="ChangeStatusActTitle">Beem - Changer mon statut</string>
<string name="ChangeStatusType">Mon statut</string>
@@ -291,6 +277,10 @@
<string name="chat_dialog_change_chat_title">Conversations en cours</string>
<string name="chat_menu_close_chat">Fermer cette conversation</string>
<string name="chat_no_more_chats">Aucune conversation en cours</string>
+ <string name="chat_state_composing">est en train d\'écrire un message</string>
+ <string name="chat_state_gone">a quitté la conversation</string>
+ <string name="chat_state_active">prête attention à la conversation</string>
+ <string name="chat_state_inactive">fait quelque chose d\'autre</string>
<string name="contact_status_msg_available">Disponible</string>
<string name="contact_status_msg_available_chat">Disponible pour discuter</string>
--- a/res/values/strings.xml Sat Mar 13 19:32:08 2010 +0100
+++ b/res/values/strings.xml Sat Mar 13 19:32:31 2010 +0100
@@ -55,20 +55,6 @@
<string name="AddCBadForm">Bad form</string>
<string name="AddCContactAlready">Contact already exist</string>
- <!-- SendIM class -->
- <string name="SendIMActTitle">Beem - Chat</string>
-
- <string name="SendIMSays"> %s says :\n%s\n</string>
- <string name="SendIMYouSay">You say :\n%s\n</string>
- <string name="SendIMSameSpeaker">%s\n</string>
- <string name="SendIMToSendHint">Tip text here</string>
- <string name="SendIMState">Is : </string>
- <string name="SendIMErrorMsg">Error : %s\n</string>
- <string name="SendIMFrom">and is speaking from : </string>
- <string name="SendIMSmiley">Insert a smiley</string>
- <string name="SendIMLoginHint">login</string>
- <string name="SendIMNoStatusSet">No status set</string>
-
<!-- ChangeStatus class -->
<string name="ChangeStatusActTitle">Beem - Change my status</string>
<string name="ChangeStatusType">My status</string>
@@ -277,6 +263,10 @@
<string name="chat_dialog_change_chat_title">Opened chats</string>
<string name="chat_menu_close_chat">Close this chat</string>
<string name="chat_no_more_chats">No more active chats</string>
+ <string name="chat_state_composing">is composing a message</string>
+ <string name="chat_state_gone">has left the conversation</string>
+ <string name="chat_state_active">pays attention to the conversation</string>
+ <string name="chat_state_inactive">is doing another thing</string>
<string name="contact_status_msg_available">Available</string>
<string name="contact_status_msg_available_chat">Available to chat</string>
--- a/src/com/beem/project/beem/service/ChatAdapter.java Sat Mar 13 19:32:08 2010 +0100
+++ b/src/com/beem/project/beem/service/ChatAdapter.java Sat Mar 13 19:32:31 2010 +0100
@@ -49,7 +49,6 @@
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;
@@ -197,7 +196,7 @@
/**
* Listener.
*/
- private class MsgListener implements MessageListener, ChatStateListener {
+ private class MsgListener implements ChatStateListener {
/**
* Constructor.
*/
--- a/src/com/beem/project/beem/service/XmppConnectionAdapter.java Sat Mar 13 19:32:08 2010 +0100
+++ b/src/com/beem/project/beem/service/XmppConnectionAdapter.java Sat Mar 13 19:32:31 2010 +0100
@@ -101,9 +101,11 @@
private int mPreviousMode;
private String mPreviousStatus;
private PrivacyListManagerAdapter mPrivacyListManager;
+ private ChatStateManager mChatStateManager;
private final BeemService mService;
private BeemApplication mApplication;
- private final RemoteCallbackList<IBeemConnectionListener> mRemoteConnListeners = new RemoteCallbackList<IBeemConnectionListener>();
+ private final RemoteCallbackList<IBeemConnectionListener> mRemoteConnListeners =
+ new RemoteCallbackList<IBeemConnectionListener>();
private final SubscribePacketListener mSubscribePacketListener = new SubscribePacketListener();
private final ConnexionListenerAdapter mConListener = new ConnexionListenerAdapter();
@@ -207,7 +209,6 @@
this.initFeatures(); // pour declarer les features xmpp qu'on
// supporte
- ChatStateManager.getInstance(mAdaptee);
PacketFilter filter = new PacketFilter() {
@@ -388,6 +389,7 @@
sdm = new ServiceDiscoveryManager(mAdaptee);
sdm.addFeature("http://jabber.org/protocol/disco#info");
sdm.addFeature("jabber:iq:privacy");
+ mChatStateManager = ChatStateManager.getInstance(mAdaptee);
}
/**
--- a/src/com/beem/project/beem/service/aidl/IMessageListener.aidl Sat Mar 13 19:32:08 2010 +0100
+++ b/src/com/beem/project/beem/service/aidl/IMessageListener.aidl Sat Mar 13 19:32:31 2010 +0100
@@ -48,10 +48,17 @@
interface IMessageListener {
+ /**
+ * This method is executed when a chat receive a message.
+ * @param chat the chat receiving the message.
+ * @param msg the message received in the chat.
+ */
void processMessage(in IChat chat, in Message msg);
/**
- * le chatState se trouve dans le IChat
- */
+ * This method is executed when a new ChatState is received by the chat.
+ * You can use IChat.getState() in order to get the new state.
+ * @param chat the chat changed.
+ */
void stateChanged(in IChat chat);
}
--- a/src/com/beem/project/beem/ui/Chat.java Sat Mar 13 19:32:08 2010 +0100
+++ b/src/com/beem/project/beem/ui/Chat.java Sat Mar 13 19:32:31 2010 +0100
@@ -114,6 +114,7 @@
private TextView mContactNameTextView;
private TextView mContactStatusMsgTextView;
+ private TextView mContactChatState;
private ImageView mContactStatusIcon;
private ListView mMessagesListView;
private EditText mInputField;
@@ -152,6 +153,7 @@
// UI
mContactNameTextView = (TextView) findViewById(R.id.chat_contact_name);
mContactStatusMsgTextView = (TextView) findViewById(R.id.chat_contact_status_msg);
+ mContactChatState = (TextView) findViewById(R.id.chat_contact_chat_state);
mContactStatusIcon = (ImageView) findViewById(R.id.chat_contact_status_icon);
mMessagesListView = (ListView) findViewById(R.id.chat_messages);
mMessagesListView.setAdapter(mMessagesListAdapter);
@@ -519,8 +521,9 @@
mListMessages.add(new MessageText(fromBareJid, mContact.getName(), msg.getBody(), true));
mMessagesListAdapter.notifyDataSetChanged();
} else if (msg.getBody() != null) {
- MessageText lastMessage = mListMessages.size() != 0 ? mListMessages.get(mListMessages
- .size() - 1) : null;
+ MessageText lastMessage = null;
+ if (mListMessages.size() != 0)
+ lastMessage = mListMessages.get(mListMessages.size() - 1);
if (lastMessage != null && lastMessage.getBareJid().equals(fromBareJid)) {
lastMessage.setMessage(lastMessage.getMessage().concat("\n" + msg.getBody()));
@@ -539,7 +542,26 @@
*/
@Override
public void stateChanged(IChat chat) throws RemoteException {
- //TODO
+ final String state = chat.getState();
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ String text = null;
+ if ("active".equals(state)) {
+ text = Chat.this.getString(R.string.chat_state_active);
+ } else if ("composing".equals(state)) {
+ text = Chat.this.getString(R.string.chat_state_composing);
+ } else if ("gone".equals(state)) {
+ text = Chat.this.getString(R.string.chat_state_gone);
+ } else if ("inactive".equals(state)) {
+ text = Chat.this.getString(R.string.chat_state_inactive);
+ } else if ("paused".equals(state)) {
+ text = Chat.this.getString(R.string.chat_state_active);
+ }
+ mContactChatState.setText(text);
+ }
+ });
+
}
}
@@ -789,7 +811,9 @@
}
final String self = getString(R.string.chat_self);
- MessageText lastMessage = mListMessages.size() != 0 ? mListMessages.get(mListMessages.size() - 1) : null;
+ MessageText lastMessage = null;
+ if (mListMessages.size() != 0)
+ lastMessage = mListMessages.get(mListMessages.size() - 1);
if (lastMessage != null && lastMessage.getName().equals(self)) {
lastMessage.setMessage(lastMessage.getMessage().concat("\n" + inputContent));