bug fixes with leaving muc on connection loss.

Daniel Gultsch created

Change summary

AndroidManifest.xml                                            |  4 
src/eu/siacs/conversations/services/XmppConnectionService.java | 18 ++-
src/eu/siacs/conversations/xml/Element.java                    | 13 ++
src/eu/siacs/conversations/xmpp/XmppConnection.java            |  2 
4 files changed, 22 insertions(+), 15 deletions(-)

Detailed changes

AndroidManifest.xml 🔗

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="eu.siacs.conversations"
-    android:versionCode="1"
-    android:versionName="0.1-rc1" >
+    android:versionCode="2"
+    android:versionName="0.1-rc2" >
 
     <uses-sdk
         android:minSdkVersion="14"

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

@@ -1082,14 +1082,16 @@ public class XmppConnectionService extends Service {
 
 	public void disconnect(Account account, boolean force) {
 		if ((account.getStatus() == Account.STATUS_ONLINE)||(account.getStatus() == Account.STATUS_DISABLED)) {
-			List<Conversation> conversations = getConversations();
-			for (int i = 0; i < conversations.size(); i++) {
-				Conversation conversation = conversations.get(i);
-				if (conversation.getAccount() == account) {
-					if (conversation.getMode() == Conversation.MODE_MULTI) {
-						leaveMuc(conversation);
-					} else {
-						conversation.endOtrIfNeeded();
+			if (!force) {
+				List<Conversation> conversations = getConversations();
+				for (int i = 0; i < conversations.size(); i++) {
+					Conversation conversation = conversations.get(i);
+					if (conversation.getAccount() == account) {
+						if (conversation.getMode() == Conversation.MODE_MULTI) {
+							leaveMuc(conversation);
+						} else {
+							conversation.endOtrIfNeeded();
+						}
 					}
 				}
 			}

src/eu/siacs/conversations/xml/Element.java 🔗

@@ -4,8 +4,6 @@ import java.util.ArrayList;
 import java.util.Hashtable;
 import java.util.List;
 
-import android.util.Log;
-
 public class Element {
 	protected String name;
 	protected Hashtable<String, String> attributes = new Hashtable<String, String>();
@@ -83,7 +81,7 @@ public class Element {
 			startTag.setAtttributes(this.attributes);
 			elementOutput.append(startTag);
 			if (content!=null) {
-				elementOutput.append(content);
+				elementOutput.append(encodeEntities(content));
 			} else {
 				for(Element child : children) {
 					elementOutput.append(child.toString());
@@ -98,4 +96,13 @@ public class Element {
 	public String getName() {
 		return name;
 	}
+	
+	private String encodeEntities(String content) {
+		content = content.replace("&","&amp;");
+		content = content.replace("<","&lt;");
+		content = content.replace(">","&gt;");
+		content = content.replace("\"","&quot;");
+		content = content.replace("'","&apos;");
+		return content;
+	}
 }

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

@@ -676,10 +676,8 @@ public class XmppConnection implements Runnable {
 	
 	public void sendPing() {
 		if (streamFeatures.hasChild("sm")) {
-			Log.d(LOGTAG,account.getJid()+": sending r as ping");
 			tagWriter.writeStanzaAsync(new RequestPacket());
 		} else {
-			Log.d(LOGTAG,account.getJid()+": sending iq as ping");
 			IqPacket iq = new IqPacket(IqPacket.TYPE_GET);
 			Element ping = new Element("ping");
 			iq.setAttribute("from",account.getFullJid());