tryed to fix more otr bugs. new resource setting

Daniel Gultsch created

Change summary

res/values/arrays.xml                                          | 19 
res/xml/preferences.xml                                        | 16 
src/eu/siacs/conversations/entities/Account.java               |  6 
src/eu/siacs/conversations/services/XmppConnectionService.java |  6 
src/eu/siacs/conversations/ui/ConversationFragment.java        | 84 ++-
src/eu/siacs/conversations/utils/MessageParser.java            |  7 
src/eu/siacs/conversations/xmpp/XmppConnection.java            |  2 
src/eu/siacs/conversations/xmpp/stanzas/IqPacket.java          |  1 
8 files changed, 69 insertions(+), 72 deletions(-)

Detailed changes

res/values/arrays.xml 🔗

@@ -1,17 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <array name="conversation_encryption_type_entries">
-        <item>None</item>
-        <item>OpenPGP</item>
-        <item>Off the record</item>
-    </array>
-    <array name="conversation_encryption_type_values">
-        <item>none</item>
-        <item>pgp</item>
-        <item>otr</item>
-    </array>
-    <array name="manage_account_options">
-        <item>Delete</item>
-        <item>Disable</item>
+    <array name="resources">
+        <item>Mobile</item>
+        <item>Phone</item>
+        <item>Tablet</item>
+        <item>Conversations</item>
+        <item>Android</item>
     </array>
 </resources>

res/xml/preferences.xml 🔗

@@ -1,20 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
     <PreferenceCategory 
-        android:title="Security and Privacy Options">
-        <ListPreference
-            android:key="default_conversation_encryption_type"
-            android:title="Default conversation encryption"
-            android:dialogTitle="Default conversation encryption"
-            android:entries="@array/conversation_encryption_type_entries"
-            android:entryValues="@array/conversation_encryption_type_values"
-            android:defaultValue="none"/>
+        android:title="General">
         <CheckBoxPreference 
             android:key="grant_new_contacts"
             android:title="Grant presence updates"
             android:summary="Preemptivly grant and ask for presence subscription for contacts you created"
             android:defaultValue="true"
             />
+        <ListPreference 
+            android:key="resource"
+            android:title="XMPP Resource"
+            android:summary="The name this client identifies itself"
+            android:entries="@array/resources"
+            android:entryValues="@array/resources"
+            android:defaultValue="Mobile"/>
     </PreferenceCategory>
     <PreferenceCategory 
         android:title="Notification Settings">

src/eu/siacs/conversations/entities/Account.java 🔗

@@ -52,7 +52,7 @@ public class Account  extends AbstractEntity{
 	protected String password;
 	protected int options = 0;
 	protected String rosterVersion;
-	protected String resource;
+	protected String resource = "mobile";
 	protected int status = -1;
 	protected JSONObject keys = new JSONObject();
 	
@@ -137,6 +137,10 @@ public class Account  extends AbstractEntity{
 		this.resource = resource;
 	}
 	
+	public String getResource() {
+		return this.resource;
+	}
+	
 	public String getJid() {
 		return username+"@"+server;
 	}

src/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -7,6 +7,7 @@ import java.util.Comparator;
 import java.util.Date;
 import java.util.Hashtable;
 import java.util.List;
+import java.util.Locale;
 import java.util.Random;
 
 import org.openintents.openpgp.util.OpenPgpApi;
@@ -550,6 +551,9 @@ public class XmppConnectionService extends Service {
 	}
 
 	public XmppConnection createConnection(Account account) {
+		SharedPreferences sharedPref = PreferenceManager
+				.getDefaultSharedPreferences(getApplicationContext());
+		account.setResource(sharedPref.getString("resource", "mobile").toLowerCase(Locale.getDefault()));
 		PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
 		XmppConnection connection = new XmppConnection(account, pm);
 		connection.setOnMessagePacketReceivedListener(this.messageListener);
@@ -588,7 +592,7 @@ public class XmppConnectionService extends Service {
 		return connection;
 	}
 
-	public void sendMessage(Message message, String presence) {
+	synchronized public void sendMessage(Message message, String presence) {
 		Account account = message.getConversation().getAccount();
 		Conversation conv = message.getConversation();
 		boolean saveInDb = false;

src/eu/siacs/conversations/ui/ConversationFragment.java 🔗

@@ -388,52 +388,54 @@ public class ConversationFragment extends Fragment {
 
 	public void updateMessages() {
 		ConversationActivity activity = (ConversationActivity) getActivity();
-		List<Message> encryptedMessages = new LinkedList<Message>();
-		for (Message message : this.conversation.getMessages()) {
-			if (message.getEncryption() == Message.ENCRYPTION_PGP) {
-				encryptedMessages.add(message);
-			}
-		}
-		if (encryptedMessages.size() > 0) {
-			DecryptMessage task = new DecryptMessage();
-			Message[] msgs = new Message[encryptedMessages.size()];
-			task.execute(encryptedMessages.toArray(msgs));
-		}
-		this.messageList.clear();
-		this.messageList.addAll(this.conversation.getMessages());
-		this.messageListAdapter.notifyDataSetChanged();
-		if (conversation.getMode() == Conversation.MODE_SINGLE) {
-			if (messageList.size() >= 1) {
-				int latestEncryption = this.conversation.getLatestMessage()
-						.getEncryption();
-				if (latestEncryption == Message.ENCRYPTION_DECRYPTED) {
-					conversation.nextMessageEncryption = Message.ENCRYPTION_PGP;
-				} else {
-					conversation.nextMessageEncryption = latestEncryption;
+		if (this.conversation != null) {
+			List<Message> encryptedMessages = new LinkedList<Message>();
+			for (Message message : this.conversation.getMessages()) {
+				if (message.getEncryption() == Message.ENCRYPTION_PGP) {
+					encryptedMessages.add(message);
 				}
-				makeFingerprintWarning(latestEncryption);
 			}
-		} else {
-			if (conversation.getMucOptions().getError() != 0) {
-				mucError.setVisibility(View.VISIBLE);
-				if (conversation.getMucOptions().getError() == MucOptions.ERROR_NICK_IN_USE) {
-					mucErrorText.setText(getString(R.string.nick_in_use));
+			if (encryptedMessages.size() > 0) {
+				DecryptMessage task = new DecryptMessage();
+				Message[] msgs = new Message[encryptedMessages.size()];
+				task.execute(encryptedMessages.toArray(msgs));
+			}
+			this.messageList.clear();
+			this.messageList.addAll(this.conversation.getMessages());
+			this.messageListAdapter.notifyDataSetChanged();
+			if (conversation.getMode() == Conversation.MODE_SINGLE) {
+				if (messageList.size() >= 1) {
+					int latestEncryption = this.conversation.getLatestMessage()
+							.getEncryption();
+					if (latestEncryption == Message.ENCRYPTION_DECRYPTED) {
+						conversation.nextMessageEncryption = Message.ENCRYPTION_PGP;
+					} else {
+						conversation.nextMessageEncryption = latestEncryption;
+					}
+					makeFingerprintWarning(latestEncryption);
 				}
 			} else {
-				mucError.setVisibility(View.GONE);
+				if (conversation.getMucOptions().getError() != 0) {
+					mucError.setVisibility(View.VISIBLE);
+					if (conversation.getMucOptions().getError() == MucOptions.ERROR_NICK_IN_USE) {
+						mucErrorText.setText(getString(R.string.nick_in_use));
+					}
+				} else {
+					mucError.setVisibility(View.GONE);
+				}
+			}
+			getActivity().invalidateOptionsMenu();
+			updateChatMsgHint();
+			int size = this.messageList.size();
+			if (size >= 1)
+				messagesView.setSelection(size - 1);
+			if (!activity.shouldPaneBeOpen()) {
+				conversation.markRead();
+				// TODO update notifications
+				UIHelper.updateNotification(getActivity(),
+						activity.getConversationList(), null, false);
+				activity.updateConversationList();
 			}
-		}
-		getActivity().invalidateOptionsMenu();
-		updateChatMsgHint();
-		int size = this.messageList.size();
-		if (size >= 1)
-			messagesView.setSelection(size - 1);
-		if (!activity.shouldPaneBeOpen()) {
-			conversation.markRead();
-			// TODO update notifications
-			UIHelper.updateNotification(getActivity(),
-					activity.getConversationList(), null, false);
-			activity.updateConversationList();
 		}
 	}
 

src/eu/siacs/conversations/utils/MessageParser.java 🔗

@@ -2,7 +2,6 @@ package eu.siacs.conversations.utils;
 
 import java.util.List;
 
-import net.java.otr4j.OtrException;
 import net.java.otr4j.session.Session;
 import net.java.otr4j.session.SessionStatus;
 import android.util.Log;
@@ -89,11 +88,7 @@ public class MessageParser {
 				Log.d(LOGTAG,"otr session stoped");
 			}
 		} catch (Exception e) {
-			Log.d(LOGTAG,"otr execption");
-			if (justStarted) {
-				Log.d(LOGTAG,"ran into safeguard");
-			} else {
-				Log.d(LOGTAG,"resett otr session");
+			if (!justStarted) {
 				conversation.resetOtrSession();
 			}
 			return null;

src/eu/siacs/conversations/xmpp/XmppConnection.java 🔗

@@ -524,7 +524,7 @@ public class XmppConnection implements Runnable {
 
 	private void sendBindRequest() throws IOException {
 		IqPacket iq = new IqPacket(IqPacket.TYPE_SET);
-		iq.addChild("bind", "urn:ietf:params:xml:ns:xmpp-bind").addChild("resource").setContent("Conversations");
+		iq.addChild("bind", "urn:ietf:params:xml:ns:xmpp-bind").addChild("resource").setContent(account.getResource());
 		this.sendIqPacket(iq, new OnIqPacketReceived() {
 			@Override
 			public void onIqPacketReceived(Account account, IqPacket packet) {