--- a/res/values/strings.xml Sun Dec 05 18:45:54 2010 +0100
+++ b/res/values/strings.xml Mon Dec 06 01:06:44 2010 +0100
@@ -258,6 +258,9 @@
<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="chat_otrstate_plaintext">PLAINTEXT</string>
+ <string name="chat_otrstate_encrypted">ENCRYPTED</string>
+ <string name="chat_otrstate_finished">FINISHED</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/BeemChatManager.java Sun Dec 05 18:45:54 2010 +0100
+++ b/src/com/beem/project/beem/service/BeemChatManager.java Mon Dec 06 01:06:44 2010 +0100
@@ -309,6 +309,8 @@
@Override
public void otrStateChanged(String otrState) throws RemoteException {
+ // TODO Auto-generated method stub
+
}
}
}
--- a/src/com/beem/project/beem/service/ChatAdapter.java Sun Dec 05 18:45:54 2010 +0100
+++ b/src/com/beem/project/beem/service/ChatAdapter.java Mon Dec 06 01:06:44 2010 +0100
@@ -47,6 +47,9 @@
import java.util.LinkedList;
import java.util.List;
+import net.java.otr4j.OtrEngineListener;
+import net.java.otr4j.session.SessionID;
+
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.ChatState;
@@ -87,6 +90,14 @@
mMessages = new LinkedList<Message>();
mAdaptee.addMessageListener(mMsgListener);
mOtrManager = new BeemOtrManager(this, mParticipant.getJIDWithRes(), mParticipant.getJID());
+ mOtrManager.setOtrEngineListener(new OtrEngineListener() {
+
+ @Override
+ public void sessionStatusChanged(SessionID sessionID) {
+ mMsgListener.otrStateChanged(mOtrManager.status());
+ Log.d(TAG, "OTR status changed " + mOtrManager.status());
+ }
+ });
Log.d(TAG, "new chat, with otr " + mOtrManager.status());
}
@@ -265,6 +276,24 @@
}
mRemoteListeners.finishBroadcast();
}
+
+ /**
+ * This method is executed when the otr session status change.
+ * @param otrState the new state of otr session.
+ */
+ void otrStateChanged(final String otrState) {
+ final int n = mRemoteListeners.beginBroadcast();
+
+ for (int i = 0; i < n; i++) {
+ IMessageListener listener = mRemoteListeners.getBroadcastItem(i);
+ try {
+ listener.otrStateChanged(otrState);
+ } catch (RemoteException e) {
+ Log.w(TAG, e.getMessage());
+ }
+ }
+ mRemoteListeners.finishBroadcast();
+ }
}
@Override
--- a/src/com/beem/project/beem/service/aidl/IMessageListener.aidl Sun Dec 05 18:45:54 2010 +0100
+++ b/src/com/beem/project/beem/service/aidl/IMessageListener.aidl Mon Dec 06 01:06:44 2010 +0100
@@ -61,11 +61,9 @@
* @param chat the chat changed.
*/
void stateChanged(in IChat chat);
-
/**
* This method is executed when the otr session status change.
* @param otrState the new state of otr session.
*/
void otrStateChanged(in String otrState);
-
}
--- a/src/com/beem/project/beem/ui/Chat.java Sun Dec 05 18:45:54 2010 +0100
+++ b/src/com/beem/project/beem/ui/Chat.java Mon Dec 06 01:06:44 2010 +0100
@@ -577,11 +577,11 @@
public void run() {
String text = null;
if ("PLAINTEXT".equals(otrState)) {
- text = Chat.this.getString(R.string.chat_state_active);
+ text = Chat.this.getString(R.string.chat_otrstate_plaintext);
} else if ("ENCRYPTED".equals(otrState)) {
- text = Chat.this.getString(R.string.chat_state_composing);
+ text = Chat.this.getString(R.string.chat_otrstate_encrypted);
} else if ("FINISHED".equals(otrState)) {
- text = Chat.this.getString(R.string.chat_state_active);
+ text = Chat.this.getString(R.string.chat_otrstate_finished);
}
mContactOtrState.setText(text);
}
--- a/src/com/zadov/beem/BeemOtrManager.java Sun Dec 05 18:45:54 2010 +0100
+++ b/src/com/zadov/beem/BeemOtrManager.java Mon Dec 06 01:06:44 2010 +0100
@@ -2,6 +2,7 @@
import net.java.otr4j.OtrEngineHostImpl;
import net.java.otr4j.OtrEngineImpl;
+import net.java.otr4j.OtrEngineListener;
import net.java.otr4j.OtrPolicy;
import net.java.otr4j.OtrPolicyImpl;
import net.java.otr4j.session.SessionID;
@@ -25,6 +26,10 @@
aliceSessionID = new SessionID(jidres,jid, "XMMP");
usAlice = new OtrEngineImpl(myHost);
}
+
+ public void setOtrEngineListener(OtrEngineListener listener) {
+ usAlice.addOtrEngineListener(listener);
+ }
public void startSession() {
usAlice.startSession(aliceSessionID);