# HG changeset patch # User Nikita Kozlov # Date 1291593982 -3600 # Node ID bcafceecd837bacd2de9e6df460e29480282c3d3 # Parent 0ff0059f2ec3f0e3d17edf35ce2ae604717b5572 adding otr status listener diff -r 0ff0059f2ec3 -r bcafceecd837 res/values/strings.xml --- a/res/values/strings.xml Sun Dec 05 18:43:51 2010 +0100 +++ b/res/values/strings.xml Mon Dec 06 01:06:22 2010 +0100 @@ -258,6 +258,9 @@ has left the conversation pays attention to the conversation is doing another thing + PLAINTEXT + ENCRYPTED + FINISHED Available Available to chat diff -r 0ff0059f2ec3 -r bcafceecd837 src/com/beem/project/beem/service/BeemChatManager.java --- a/src/com/beem/project/beem/service/BeemChatManager.java Sun Dec 05 18:43:51 2010 +0100 +++ b/src/com/beem/project/beem/service/BeemChatManager.java Mon Dec 06 01:06:22 2010 +0100 @@ -309,6 +309,8 @@ @Override public void otrStateChanged(String otrState) throws RemoteException { + // TODO Auto-generated method stub + } } } diff -r 0ff0059f2ec3 -r bcafceecd837 src/com/beem/project/beem/service/ChatAdapter.java --- a/src/com/beem/project/beem/service/ChatAdapter.java Sun Dec 05 18:43:51 2010 +0100 +++ b/src/com/beem/project/beem/service/ChatAdapter.java Mon Dec 06 01:06:22 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(); 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 diff -r 0ff0059f2ec3 -r bcafceecd837 src/com/beem/project/beem/service/aidl/IMessageListener.aidl --- a/src/com/beem/project/beem/service/aidl/IMessageListener.aidl Sun Dec 05 18:43:51 2010 +0100 +++ b/src/com/beem/project/beem/service/aidl/IMessageListener.aidl Mon Dec 06 01:06:22 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); - } diff -r 0ff0059f2ec3 -r bcafceecd837 src/com/beem/project/beem/ui/Chat.java --- a/src/com/beem/project/beem/ui/Chat.java Sun Dec 05 18:43:51 2010 +0100 +++ b/src/com/beem/project/beem/ui/Chat.java Mon Dec 06 01:06:22 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); } diff -r 0ff0059f2ec3 -r bcafceecd837 src/com/zadov/beem/BeemOtrManager.java --- a/src/com/zadov/beem/BeemOtrManager.java Sun Dec 05 18:43:51 2010 +0100 +++ b/src/com/zadov/beem/BeemOtrManager.java Mon Dec 06 01:06:22 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);