# HG changeset patch # User Da Risk # Date 1314220526 -7200 # Node ID b659da60d81e4d9201a8f7669cb97aa1dbcb92cd # Parent 7552d41aebecc84de5a2dab0c8755412efbd85ed Show encryption status in the chat message list. diff -r 7552d41aebec -r b659da60d81e res/drawable/logo_encryption.png Binary file res/drawable/logo_encryption.png has changed diff -r 7552d41aebec -r b659da60d81e res/menu/chat.xml --- a/res/menu/chat.xml Tue Aug 23 14:14:22 2011 +0200 +++ b/res/menu/chat.xml Wed Aug 24 23:15:26 2011 +0200 @@ -8,7 +8,7 @@ + android:title="@string/chat_menu_otr_submenu" android:icon="@drawable/logo_encryption"> diff -r 7552d41aebec -r b659da60d81e src/com/beem/project/beem/service/ChatAdapter.java --- a/src/com/beem/project/beem/service/ChatAdapter.java Tue Aug 23 14:14:22 2011 +0200 +++ b/src/com/beem/project/beem/service/ChatAdapter.java Wed Aug 24 23:15:26 2011 +0200 @@ -113,7 +113,13 @@ */ @Override public void sendMessage(com.beem.project.beem.service.Message message) throws RemoteException { - sendMessage(message, true, true); + com.beem.project.beem.service.Message encrypted = otrEncryptMessage(message); + if (encrypted != null) { + transferMessage(encrypted); + } else { + transferMessage(message); + } + addMessage(message); } /** @@ -121,25 +127,12 @@ * @param message the message to send * @param log do we want to log (in memory and history) the message? */ - private void sendMessage(com.beem.project.beem.service.Message message, boolean log, boolean otr) { + private void transferMessage(com.beem.project.beem.service.Message message) { org.jivesoftware.smack.packet.Message send = new org.jivesoftware.smack.packet.Message(); String msgBody = message.getBody(); - String otrBody = null; send.setTo(message.getTo()); Log.w(TAG, "message to " + message.getTo()); - - if (otr && mOtrSessionId != null) { - - try { - otrBody = BeemOtrManager.getInstance().getOtrManager().transformSending(mOtrSessionId, msgBody); - send.setBody(otrBody); - } catch (OtrException e) { - e.printStackTrace(); - } - } else { - send.setBody(msgBody); - otrBody = msgBody; - } + send.setBody(msgBody); send.setThread(message.getThread()); send.setSubject(message.getSubject()); @@ -148,14 +141,9 @@ // send.set try { mAdaptee.sendMessage(send); - if (log && otrBody != null) - mMessages.add(message); } catch (XMPPException e) { e.printStackTrace(); } - String state = Environment.getExternalStorageState(); - if (log && mIsHistory && Environment.MEDIA_MOUNTED.equals(state)) - saveHistory(message, mAccountUser); } /** @@ -165,7 +153,7 @@ public void injectMessage(String msg) { Message msgToSend = new Message(mParticipant.getJIDWithRes(), Message.MSG_TYPE_CHAT); msgToSend.setBody(msg); - sendMessage(msgToSend, false, false); + transferMessage(msgToSend); } /** @@ -239,14 +227,12 @@ * Add a message in the chat history. * @param msg the message to add */ - void addMessage(Message msg) { + private void addMessage(Message msg) { if (mMessages.size() == HISTORY_MAX_SIZE) mMessages.remove(0); mMessages.add(msg); if (!"".equals(msg.getBody()) && msg.getBody() != null) { - String state = Environment.getExternalStorageState(); - if (mIsHistory && Environment.MEDIA_MOUNTED.equals(state)) - saveHistory(msg, msg.getFrom()); + logMessage(msg); } } @@ -322,6 +308,28 @@ return mHistoryPath; } + private void logMessage(com.beem.project.beem.service.Message message) { + String state = Environment.getExternalStorageState(); + if (mIsHistory && Environment.MEDIA_MOUNTED.equals(state)) + saveHistory(message, mAccountUser); + + } + + private com.beem.project.beem.service.Message otrEncryptMessage(com.beem.project.beem.service.Message unencrypted) { + + if (mOtrSessionId != null && unencrypted != null && unencrypted.getBody() != null) { + try { + String body = BeemOtrManager.getInstance().getOtrManager().transformSending(mOtrSessionId, unencrypted.getBody()); + Message result = new Message(unencrypted.getTo(), unencrypted.getType()); + result.setBody(body); + return result; + } catch (OtrException e) { + Log.e(TAG, "OTR: Unable to encrypt message", e); + } + } + return null; + } + /** * Listener. */ @@ -339,16 +347,14 @@ String body; if (mOtrSessionId != null) { - try { body = BeemOtrManager.getInstance().getOtrManager() .transformReceiving(mOtrSessionId, msg.getBody()); msg.setBody(body); } catch (OtrException e) { - e.printStackTrace(); + Log.w(TAG, "Unable to decrypt OTR message", e); } } - //TODO add que les message pas de type errors ChatAdapter.this.addMessage(msg); final int n = mRemoteListeners.beginBroadcast(); @@ -390,6 +396,9 @@ * @param otrState the new state of otr session. */ public void otrStateChanged(final String otrState) { + Message m = new Message(null, Message.MSG_TYPE_INFO); + m.setBody(otrState); + addMessage(m); final int n = mRemoteListeners.beginBroadcast(); for (int i = 0; i < n; i++) { diff -r 7552d41aebec -r b659da60d81e src/com/beem/project/beem/service/Message.java --- a/src/com/beem/project/beem/service/Message.java Tue Aug 23 14:14:22 2011 +0200 +++ b/src/com/beem/project/beem/service/Message.java Wed Aug 24 23:15:26 2011 +0200 @@ -69,6 +69,9 @@ /** Error message type. */ public static final int MSG_TYPE_ERROR = 400; + /** Informational message type. */ + public static final int MSG_TYPE_INFO = 500; + /** Parcelable.Creator needs by Android. */ public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { diff -r 7552d41aebec -r b659da60d81e src/com/beem/project/beem/ui/Chat.java --- a/src/com/beem/project/beem/ui/Chat.java Tue Aug 23 14:14:22 2011 +0200 +++ b/src/com/beem/project/beem/ui/Chat.java Wed Aug 24 23:15:26 2011 +0200 @@ -414,6 +414,10 @@ if (m.getType() == Message.MSG_TYPE_ERROR) { lastMessage = null; result.add(new MessageText(fromBareJid, name, m.getBody(), true, m.getTimestamp())); + } else if (m.getType() == Message.MSG_TYPE_INFO) { + lastMessage = new MessageText("", "", m.getBody(), false); + result.add(lastMessage); + } else if (m.getType() == Message.MSG_TYPE_CHAT) { if (fromBareJid == null) { //nofrom or from == yours name = localName; @@ -610,6 +614,8 @@ @Override public void run() { updateOtrInformations(otrState); + mListMessages.add(new MessageText("", "", otrState, false)); + mMessagesListAdapter.notifyDataSetChanged(); } }); @@ -788,8 +794,10 @@ msgText.setText(msg.getMessage()); registerForContextMenu(msgText); TextView msgDate = (TextView) sv.findViewById(R.id.chatmessagedate); - String date = df.format(msg.getTimestamp()); - msgDate.setText(date); + if (msg.getTimestamp() != null) { + String date = df.format(msg.getTimestamp()); + msgDate.setText(date); + } if (msg.isError()) { String err = getString(R.string.chat_error); msgName.setText(err);