rebranding

Daniel Gultsch created

Change summary

AndroidManifest.xml                                                  |  20 
gen/eu/siacs/conversations/BuildConfig.java                          |   2 
gen/eu/siacs/conversations/R.java                                    |  68 
res/drawable-hdpi/ic_action_group.png                                |   0 
res/drawable-hdpi/ic_action_person.png                               |   0 
res/drawable-mdpi/ic_action_group.png                                |   0 
res/drawable-mdpi/ic_action_person.png                               |   0 
res/drawable-xhdpi/ic_action_group.png                               |   0 
res/drawable-xhdpi/ic_action_person.png                              |   0 
res/drawable-xxhdpi/ic_action_group.png                              |   0 
res/drawable-xxhdpi/ic_action_person.png                             |   0 
res/menu/conversations.xml                                           |  13 
res/values/strings.xml                                               |   5 
src/eu/siacs/conversations/crypto/OtrEngine.java                     |  10 
src/eu/siacs/conversations/crypto/PgpEngine.java                     |   2 
src/eu/siacs/conversations/entities/AbstractEntity.java              |   2 
src/eu/siacs/conversations/entities/Account.java                     |   6 
src/eu/siacs/conversations/entities/Contact.java                     |   4 
src/eu/siacs/conversations/entities/Conversation.java                |  19 
src/eu/siacs/conversations/entities/Message.java                     |   2 
src/eu/siacs/conversations/entities/MucOptions.java                  |   5 
src/eu/siacs/conversations/entities/Presences.java                   |   2 
src/eu/siacs/conversations/persistance/DatabaseBackend.java          |  12 
src/eu/siacs/conversations/persistance/OnPhoneContactsMerged.java    |   2 
src/eu/siacs/conversations/services/XmppConnectionService.java       | 168 
src/eu/siacs/conversations/ui/ConversationActivity.java              |  43 
src/eu/siacs/conversations/ui/ConversationFragment.java              |  20 
src/eu/siacs/conversations/ui/DialogContactDetails.java              |  11 
src/eu/siacs/conversations/ui/EditAccount.java                       |  11 
src/eu/siacs/conversations/ui/ManageAccountActivity.java             |  12 
src/eu/siacs/conversations/ui/NewConversationActivity.java           |  20 
src/eu/siacs/conversations/ui/OnAccountListChangedListener.java      |   2 
src/eu/siacs/conversations/ui/OnConversationListChangedListener.java |   2 
src/eu/siacs/conversations/ui/OnRosterFetchedListener.java           |   5 
src/eu/siacs/conversations/ui/SettingsActivity.java                  |   2 
src/eu/siacs/conversations/ui/SettingsFragment.java                  |   4 
src/eu/siacs/conversations/ui/XmppActivity.java                      |   6 
src/eu/siacs/conversations/utils/DNSHelper.java                      |   2 
src/eu/siacs/conversations/utils/MessageParser.java                  |  14 
src/eu/siacs/conversations/utils/OnPhoneContactsLoadedListener.java  |   2 
src/eu/siacs/conversations/utils/PhoneHelper.java                    |   2 
src/eu/siacs/conversations/utils/SASL.java                           |   2 
src/eu/siacs/conversations/utils/UIHelper.java                       |  17 
src/eu/siacs/conversations/utils/Validator.java                      |   2 
src/eu/siacs/conversations/xml/Element.java                          |   2 
src/eu/siacs/conversations/xml/Tag.java                              |   2 
src/eu/siacs/conversations/xml/TagWriter.java                        |   2 
src/eu/siacs/conversations/xml/XmlReader.java                        |   2 
src/eu/siacs/conversations/xmpp/IqPacket.java                        |   4 
src/eu/siacs/conversations/xmpp/MessagePacket.java                   |   4 
src/eu/siacs/conversations/xmpp/OnIqPacketReceived.java              |   4 
src/eu/siacs/conversations/xmpp/OnMessagePacketReceived.java         |   4 
src/eu/siacs/conversations/xmpp/OnPresencePacketReceived.java        |   4 
src/eu/siacs/conversations/xmpp/OnStatusChanged.java                 |   4 
src/eu/siacs/conversations/xmpp/PresencePacket.java                  |   4 
src/eu/siacs/conversations/xmpp/XmppConnection.java                  |  16 
56 files changed, 295 insertions(+), 278 deletions(-)

Detailed changes

AndroidManifest.xml 🔗

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="de.gultsch.chat"
+    package="eu.siacs.conversations"
     android:versionCode="1"
     android:versionName="1.0" >
 
@@ -18,10 +18,10 @@
         android:icon="@drawable/ic_launcher"
         android:label="@string/app_name"
         android:theme="@android:style/Theme.Holo.Light" >
-        <service android:name="de.gultsch.chat.services.XmppConnectionService"/>
+        <service android:name="eu.siacs.conversations.services.XmppConnectionService"/>
         <activity
-            android:name="de.gultsch.chat.ui.ConversationActivity"
-            android:label="Secure Conversations"
+            android:name="eu.siacs.conversations.ui.ConversationActivity"
+            android:label="Conversations"
             android:windowSoftInputMode="stateHidden"
             android:configChanges="orientation|screenSize">
             <intent-filter>
@@ -36,19 +36,19 @@
             </intent-filter>
         </activity>
         <activity
-            android:name="de.gultsch.chat.ui.SettingsActivity"
+            android:name="eu.siacs.conversations.ui.SettingsActivity"
             android:label="Settings"
-            android:parentActivityName="de.gultsch.chat.ui.ConversationActivity" >
+            android:parentActivityName="eu.siacs.conversations.ui.ConversationActivity" >
         </activity>
         <activity
-            android:name="de.gultsch.chat.ui.ManageAccountActivity"
+            android:name="eu.siacs.conversations.ui.ManageAccountActivity"
             android:label="Manage Accounts"
-            android:parentActivityName="de.gultsch.chat.ui.ConversationActivity" >
+            android:parentActivityName="eu.siacs.conversations.ui.ConversationActivity" >
         </activity>
         <activity
-            android:name="de.gultsch.chat.ui.NewConversationActivity"
+            android:name="eu.siacs.conversations.ui.NewConversationActivity"
             android:label="@string/title_activity_new_conversation"
-            android:parentActivityName="de.gultsch.chat.ui.ConversationActivity"
+            android:parentActivityName="eu.siacs.conversations.ui.ConversationActivity"
             android:windowSoftInputMode="stateHidden">
             <meta-data
                 android:name="android.support.PARENT_ACTIVITY"

gen/de/gultsch/chat/BuildConfig.java → gen/eu/siacs/conversations/BuildConfig.java 🔗

@@ -1,5 +1,5 @@
 /** Automatically generated file. DO NOT MODIFY */
-package de.gultsch.chat;
+package eu.siacs.conversations;
 
 public final class BuildConfig {
     public final static boolean DEBUG = true;

gen/de/gultsch/chat/R.java → gen/eu/siacs/conversations/R.java 🔗

@@ -5,7 +5,7 @@
  * should not be modified by hand.
  */
 
-package de.gultsch.chat;
+package eu.siacs.conversations;
 
 public final class R {
     public static final class array {
@@ -31,37 +31,40 @@ public final class R {
         public static final int ic_action_add_person=0x7f020002;
         public static final int ic_action_cancel_launchersize=0x7f020003;
         public static final int ic_action_delete=0x7f020004;
-        public static final int ic_action_refresh=0x7f020005;
-        public static final int ic_action_secure=0x7f020006;
-        public static final int ic_action_send=0x7f020007;
-        public static final int ic_action_send_now=0x7f020008;
-        public static final int ic_action_unsecure=0x7f020009;
-        public static final int ic_launcher=0x7f02000a;
-        public static final int ic_profile=0x7f02000b;
-        public static final int message_border=0x7f02000c;
-        public static final int notification=0x7f02000d;
-        public static final int section_header=0x7f02000e;
+        public static final int ic_action_group=0x7f020005;
+        public static final int ic_action_person=0x7f020006;
+        public static final int ic_action_refresh=0x7f020007;
+        public static final int ic_action_secure=0x7f020008;
+        public static final int ic_action_send=0x7f020009;
+        public static final int ic_action_send_now=0x7f02000a;
+        public static final int ic_action_unsecure=0x7f02000b;
+        public static final int ic_launcher=0x7f02000c;
+        public static final int ic_profile=0x7f02000d;
+        public static final int message_border=0x7f02000e;
+        public static final int notification=0x7f02000f;
+        public static final int section_header=0x7f020010;
     }
     public static final class id {
         public static final int account_confirm_password_desc=0x7f0a001c;
-        public static final int account_delete=0x7f0a0037;
-        public static final int account_disable=0x7f0a0038;
-        public static final int account_enable=0x7f0a0039;
+        public static final int account_delete=0x7f0a0038;
+        public static final int account_disable=0x7f0a0039;
+        public static final int account_enable=0x7f0a003a;
         public static final int account_jid=0x7f0a0000;
         public static final int account_list=0x7f0a0029;
         public static final int account_password=0x7f0a0019;
         public static final int account_password_confirm2=0x7f0a001d;
         public static final int account_status=0x7f0a0002;
         public static final int account_usetls=0x7f0a001a;
-        public static final int action_accounts=0x7f0a0031;
+        public static final int action_accounts=0x7f0a0032;
         public static final int action_add=0x7f0a002d;
-        public static final int action_add_account=0x7f0a0036;
-        public static final int action_archive=0x7f0a0030;
-        public static final int action_details=0x7f0a002f;
-        public static final int action_refresh_contacts=0x7f0a003b;
+        public static final int action_add_account=0x7f0a0037;
+        public static final int action_archive=0x7f0a0031;
+        public static final int action_contact_details=0x7f0a002f;
+        public static final int action_muc_details=0x7f0a0030;
+        public static final int action_refresh_contacts=0x7f0a003c;
         public static final int action_security=0x7f0a002e;
-        public static final int action_settings=0x7f0a0032;
-        public static final int announce_pgp=0x7f0a003a;
+        public static final int action_settings=0x7f0a0033;
+        public static final int announce_pgp=0x7f0a003b;
         public static final int contactList=0x7f0a0006;
         public static final int contact_display_name=0x7f0a0008;
         public static final int contact_jid=0x7f0a0009;
@@ -79,9 +82,9 @@ public final class R {
         public static final int details_receive_presence=0x7f0a0014;
         public static final int details_send_presence=0x7f0a0013;
         public static final int edit_account_register_new=0x7f0a001b;
-        public static final int encryption_choice_none=0x7f0a0033;
-        public static final int encryption_choice_otr=0x7f0a0034;
-        public static final int encryption_choice_pgp=0x7f0a0035;
+        public static final int encryption_choice_none=0x7f0a0034;
+        public static final int encryption_choice_otr=0x7f0a0035;
+        public static final int encryption_choice_pgp=0x7f0a0036;
         public static final int info_box=0x7f0a0022;
         public static final int list=0x7f0a0027;
         public static final int message_body=0x7f0a002b;
@@ -129,19 +132,20 @@ public final class R {
     public static final class string {
         public static final int action_accounts=0x7f050005;
         public static final int action_add=0x7f050004;
-        public static final int action_add_account=0x7f050009;
+        public static final int action_add_account=0x7f05000a;
         public static final int action_archive=0x7f050006;
-        public static final int action_details=0x7f050007;
-        public static final int action_secure=0x7f050008;
+        public static final int action_contact_details=0x7f050007;
+        public static final int action_muc_details=0x7f050008;
+        public static final int action_secure=0x7f050009;
         public static final int action_settings=0x7f050003;
-        public static final int announce_pgp=0x7f05000d;
+        public static final int announce_pgp=0x7f05000e;
         public static final int app_name=0x7f050002;
-        public static final int encrypted_message=0x7f05000e;
-        public static final int just_now=0x7f05000b;
+        public static final int encrypted_message=0x7f05000f;
+        public static final int just_now=0x7f05000c;
         public static final int openpgp_install_openkeychain_via=0x7f050001;
         public static final int openpgp_list_preference_none=0x7f050000;
-        public static final int sending=0x7f05000c;
-        public static final int title_activity_new_conversation=0x7f05000a;
+        public static final int sending=0x7f05000d;
+        public static final int title_activity_new_conversation=0x7f05000b;
     }
     public static final class style {
         /** 

res/menu/conversations.xml 🔗

@@ -15,10 +15,17 @@
         android:title="@string/action_secure" />
     
     <item
-        android:id="@+id/action_details"
+        android:id="@+id/action_contact_details"
         android:orderInCategory="40"
-        android:showAsAction="never"
-        android:title="@string/action_details" />
+        android:showAsAction="ifRoom"
+        android:icon="@drawable/ic_action_person"
+        android:title="@string/action_contact_details" />
+      <item
+        android:id="@+id/action_muc_details"
+        android:orderInCategory="40"
+        android:showAsAction="ifRoom"
+        android:icon="@drawable/ic_action_group"
+        android:title="@string/action_muc_details" />
     
     <item
         android:id="@+id/action_archive"

res/values/strings.xml 🔗

@@ -1,12 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 
-    <string name="app_name">Secure Conversations</string>
+    <string name="app_name">Conversations</string>
     <string name="action_settings">Settings</string>
     <string name="action_add">New conversation</string>
     <string name="action_accounts">Manage accounts</string>
     <string name="action_archive">Archive conversation</string>
-    <string name="action_details">Contact details</string>
+    <string name="action_contact_details">Contact details</string>
+    <string name="action_muc_details">Conferenece details</string>
     <string name="action_secure">Secure conversation</string>
     <string name="action_add_account">Add account</string>
     <string name="title_activity_new_conversation">New Conversation</string>

src/de/gultsch/chat/crypto/OtrEngine.java → src/eu/siacs/conversations/crypto/OtrEngine.java 🔗

@@ -1,4 +1,4 @@
-package de.gultsch.chat.crypto;
+package eu.siacs.conversations.crypto;
 
 import java.math.BigInteger;
 import java.security.KeyFactory;
@@ -17,10 +17,10 @@ import org.json.JSONObject;
 import android.content.Context;
 import android.util.Log;
 
-import de.gultsch.chat.entities.Account;
-import de.gultsch.chat.persistance.DatabaseBackend;
-import de.gultsch.chat.xml.Element;
-import de.gultsch.chat.xmpp.MessagePacket;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.persistance.DatabaseBackend;
+import eu.siacs.conversations.xml.Element;
+import eu.siacs.conversations.xmpp.MessagePacket;
 
 import net.java.otr4j.OtrEngineHost;
 import net.java.otr4j.OtrException;

src/de/gultsch/chat/crypto/PgpEngine.java → src/eu/siacs/conversations/crypto/PgpEngine.java 🔗

@@ -1,4 +1,4 @@
-package de.gultsch.chat.crypto;
+package eu.siacs.conversations.crypto;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;

src/de/gultsch/chat/entities/Account.java → src/eu/siacs/conversations/entities/Account.java 🔗

@@ -1,4 +1,4 @@
-package de.gultsch.chat.entities;
+package eu.siacs.conversations.entities;
 
 import java.security.interfaces.DSAPublicKey;
 
@@ -8,8 +8,8 @@ import net.java.otr4j.crypto.OtrCryptoException;
 import org.json.JSONException;
 import org.json.JSONObject;
 
-import de.gultsch.chat.crypto.OtrEngine;
-import de.gultsch.chat.xmpp.XmppConnection;
+import eu.siacs.conversations.crypto.OtrEngine;
+import eu.siacs.conversations.xmpp.XmppConnection;
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;

src/de/gultsch/chat/entities/Contact.java → src/eu/siacs/conversations/entities/Contact.java 🔗

@@ -1,4 +1,4 @@
-package de.gultsch.chat.entities;
+package eu.siacs.conversations.entities;
 
 import java.io.Serializable;
 import java.util.HashSet;
@@ -9,7 +9,7 @@ import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 
-import de.gultsch.chat.xml.Element;
+import eu.siacs.conversations.xml.Element;
 
 import android.content.ContentValues;
 import android.database.Cursor;

src/de/gultsch/chat/entities/Conversation.java → src/eu/siacs/conversations/entities/Conversation.java 🔗

@@ -1,11 +1,11 @@
-package de.gultsch.chat.entities;
+package eu.siacs.conversations.entities;
 
 import java.security.interfaces.DSAPublicKey;
 import java.util.ArrayList;
 import java.util.List;
 
-import de.gultsch.chat.crypto.OtrEngine;
-import de.gultsch.chat.xmpp.XmppConnection;
+import eu.siacs.conversations.crypto.OtrEngine;
+import eu.siacs.conversations.xmpp.XmppConnection;
 
 import net.java.otr4j.OtrException;
 import net.java.otr4j.crypto.OtrCryptoEngineImpl;
@@ -59,6 +59,8 @@ public class Conversation extends AbstractEntity {
 	
 	public int nextMessageEncryption = Message.ENCRYPTION_NONE;
 
+	private transient MucOptions mucOptions = null;
+
 	public Conversation(String name, Account account,
 			String contactJid, int mode) {
 		this(java.util.UUID.randomUUID().toString(), name, null, account.getUuid(), contactJid, System
@@ -268,4 +270,15 @@ public class Conversation extends AbstractEntity {
 		}
 		return this.otrFingerprint;
 	}
+	
+	public MucOptions getMucOptions() {
+		if (this.mucOptions == null) {
+			this.mucOptions = new MucOptions();
+		}
+		return this.mucOptions ;
+	}
+	
+	public void resetMucOptions() {
+		this.mucOptions = null;
+	}
 }

src/de/gultsch/chat/entities/Message.java → src/eu/siacs/conversations/entities/Message.java 🔗

@@ -1,4 +1,4 @@
-package de.gultsch.chat.entities;
+package eu.siacs.conversations.entities;
 
 import android.content.ContentValues;
 import android.database.Cursor;

src/de/gultsch/chat/persistance/DatabaseBackend.java → src/eu/siacs/conversations/persistance/DatabaseBackend.java 🔗

@@ -1,14 +1,14 @@
-package de.gultsch.chat.persistance;
+package eu.siacs.conversations.persistance;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 
-import de.gultsch.chat.entities.Account;
-import de.gultsch.chat.entities.Contact;
-import de.gultsch.chat.entities.Conversation;
-import de.gultsch.chat.entities.Message;
-import de.gultsch.chat.entities.Presences;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.entities.Contact;
+import eu.siacs.conversations.entities.Conversation;
+import eu.siacs.conversations.entities.Message;
+import eu.siacs.conversations.entities.Presences;
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;

src/de/gultsch/chat/services/XmppConnectionService.java → src/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -1,4 +1,4 @@
-package de.gultsch.chat.services;
+package eu.siacs.conversations.services;
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -14,31 +14,31 @@ import net.java.otr4j.OtrException;
 import net.java.otr4j.session.Session;
 import net.java.otr4j.session.SessionStatus;
 
-import de.gultsch.chat.crypto.PgpEngine;
-import de.gultsch.chat.crypto.PgpEngine.OpenPgpException;
-import de.gultsch.chat.entities.Account;
-import de.gultsch.chat.entities.Contact;
-import de.gultsch.chat.entities.Conversation;
-import de.gultsch.chat.entities.Message;
-import de.gultsch.chat.entities.Presences;
-import de.gultsch.chat.persistance.DatabaseBackend;
-import de.gultsch.chat.persistance.OnPhoneContactsMerged;
-import de.gultsch.chat.ui.OnAccountListChangedListener;
-import de.gultsch.chat.ui.OnConversationListChangedListener;
-import de.gultsch.chat.ui.OnRosterFetchedListener;
-import de.gultsch.chat.utils.MessageParser;
-import de.gultsch.chat.utils.OnPhoneContactsLoadedListener;
-import de.gultsch.chat.utils.PhoneHelper;
-import de.gultsch.chat.utils.UIHelper;
-import de.gultsch.chat.xml.Element;
-import de.gultsch.chat.xmpp.IqPacket;
-import de.gultsch.chat.xmpp.MessagePacket;
-import de.gultsch.chat.xmpp.OnIqPacketReceived;
-import de.gultsch.chat.xmpp.OnMessagePacketReceived;
-import de.gultsch.chat.xmpp.OnPresencePacketReceived;
-import de.gultsch.chat.xmpp.OnStatusChanged;
-import de.gultsch.chat.xmpp.PresencePacket;
-import de.gultsch.chat.xmpp.XmppConnection;
+import eu.siacs.conversations.crypto.PgpEngine;
+import eu.siacs.conversations.crypto.PgpEngine.OpenPgpException;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.entities.Contact;
+import eu.siacs.conversations.entities.Conversation;
+import eu.siacs.conversations.entities.Message;
+import eu.siacs.conversations.entities.Presences;
+import eu.siacs.conversations.persistance.DatabaseBackend;
+import eu.siacs.conversations.persistance.OnPhoneContactsMerged;
+import eu.siacs.conversations.ui.OnAccountListChangedListener;
+import eu.siacs.conversations.ui.OnConversationListChangedListener;
+import eu.siacs.conversations.ui.OnRosterFetchedListener;
+import eu.siacs.conversations.utils.MessageParser;
+import eu.siacs.conversations.utils.OnPhoneContactsLoadedListener;
+import eu.siacs.conversations.utils.PhoneHelper;
+import eu.siacs.conversations.utils.UIHelper;
+import eu.siacs.conversations.xml.Element;
+import eu.siacs.conversations.xmpp.IqPacket;
+import eu.siacs.conversations.xmpp.MessagePacket;
+import eu.siacs.conversations.xmpp.OnIqPacketReceived;
+import eu.siacs.conversations.xmpp.OnMessagePacketReceived;
+import eu.siacs.conversations.xmpp.OnPresencePacketReceived;
+import eu.siacs.conversations.xmpp.OnStatusChanged;
+import eu.siacs.conversations.xmpp.PresencePacket;
+import eu.siacs.conversations.xmpp.XmppConnection;
 import android.app.NotificationManager;
 import android.app.Service;
 import android.content.Context;
@@ -188,71 +188,73 @@ public class XmppConnectionService extends Service {
 		@Override
 		public void onPresencePacketReceived(Account account,
 				PresencePacket packet) {
-			String[] fromParts = packet.getAttribute("from").split("/");
-			Contact contact = findContact(account, fromParts[0]);
-			if (contact == null) {
-				// most likely muc, self or roster not synced
-				Log.d(LOGTAG,
-						"got presence for non contact " + packet.toString());
-				return;
-			}
-			String type = packet.getAttribute("type");
-			if (type == null) {
-				Element show = packet.findChild("show");
-				if (show == null) {
-					contact.updatePresence(fromParts[1], Presences.ONLINE);
-				} else if (show.getContent().equals("away")) {
-					contact.updatePresence(fromParts[1], Presences.AWAY);
-				} else if (show.getContent().equals("xa")) {
-					contact.updatePresence(fromParts[1], Presences.XA);
-				} else if (show.getContent().equals("chat")) {
-					contact.updatePresence(fromParts[1], Presences.CHAT);
-				} else if (show.getContent().equals("dnd")) {
-					contact.updatePresence(fromParts[1], Presences.DND);
+			if (packet.hasChild("x")&&(packet.findChild("x").getAttribute("xmlns").startsWith("http://jabber.org/protocol/muc"))) {
+				Log.d(LOGTAG,"got muc presence "+packet.toString());
+			} else {
+				String[] fromParts = packet.getAttribute("from").split("/");
+				Contact contact = findContact(account, fromParts[0]);
+				if (contact == null) {
+					// most likely self or roster not synced
+					return;
 				}
-				PgpEngine pgp = getPgpEngine();
-				if (pgp!=null) {
-					Element x = packet.findChild("x");
-					if ((x != null)
-							&& (x.getAttribute("xmlns").equals("jabber:x:signed"))) {
-						try {
-							Log.d(LOGTAG,"pgp signature for contact" +packet.getAttribute("from"));
-							contact.setPgpKeyId(pgp.fetchKeyId(packet.findChild("status")
-									.getContent(), x.getContent()));
-						} catch (OpenPgpException e) {
-							Log.d(LOGTAG,"faulty pgp. just ignore");
+				String type = packet.getAttribute("type");
+				if (type == null) {
+					Element show = packet.findChild("show");
+					if (show == null) {
+						contact.updatePresence(fromParts[1], Presences.ONLINE);
+					} else if (show.getContent().equals("away")) {
+						contact.updatePresence(fromParts[1], Presences.AWAY);
+					} else if (show.getContent().equals("xa")) {
+						contact.updatePresence(fromParts[1], Presences.XA);
+					} else if (show.getContent().equals("chat")) {
+						contact.updatePresence(fromParts[1], Presences.CHAT);
+					} else if (show.getContent().equals("dnd")) {
+						contact.updatePresence(fromParts[1], Presences.DND);
+					}
+					PgpEngine pgp = getPgpEngine();
+					if (pgp!=null) {
+						Element x = packet.findChild("x");
+						if ((x != null)
+								&& (x.getAttribute("xmlns").equals("jabber:x:signed"))) {
+							try {
+								Log.d(LOGTAG,"pgp signature for contact" +packet.getAttribute("from"));
+								contact.setPgpKeyId(pgp.fetchKeyId(packet.findChild("status")
+										.getContent(), x.getContent()));
+							} catch (OpenPgpException e) {
+								Log.d(LOGTAG,"faulty pgp. just ignore");
+							}
 						}
 					}
-				}
-				databaseBackend.updateContact(contact);
-			} else if (type.equals("unavailable")) {
-				if (fromParts.length != 2) {
-					// Log.d(LOGTAG,"received presence with no resource "+packet.toString());
-				} else {
-					contact.removePresence(fromParts[1]);
 					databaseBackend.updateContact(contact);
-				}
-			} else if (type.equals("subscribe")) {
-				if (contact
-						.getSubscriptionOption(Contact.Subscription.PREEMPTIVE_GRANT)) {
-					sendPresenceUpdatesTo(contact);
-					contact.setSubscriptionOption(Contact.Subscription.FROM);
-					contact.resetSubscriptionOption(Contact.Subscription.PREEMPTIVE_GRANT);
-					replaceContactInConversation(contact.getJid(), contact);
-					databaseBackend.updateContact(contact);
-					if ((contact
-							.getSubscriptionOption(Contact.Subscription.ASKING))
-							&& (!contact
-									.getSubscriptionOption(Contact.Subscription.TO))) {
-						requestPresenceUpdatesFrom(contact);
+				} else if (type.equals("unavailable")) {
+					if (fromParts.length != 2) {
+						// Log.d(LOGTAG,"received presence with no resource "+packet.toString());
+					} else {
+						contact.removePresence(fromParts[1]);
+						databaseBackend.updateContact(contact);
+					}
+				} else if (type.equals("subscribe")) {
+					if (contact
+							.getSubscriptionOption(Contact.Subscription.PREEMPTIVE_GRANT)) {
+						sendPresenceUpdatesTo(contact);
+						contact.setSubscriptionOption(Contact.Subscription.FROM);
+						contact.resetSubscriptionOption(Contact.Subscription.PREEMPTIVE_GRANT);
+						replaceContactInConversation(contact.getJid(), contact);
+						databaseBackend.updateContact(contact);
+						if ((contact
+								.getSubscriptionOption(Contact.Subscription.ASKING))
+								&& (!contact
+										.getSubscriptionOption(Contact.Subscription.TO))) {
+							requestPresenceUpdatesFrom(contact);
+						}
+					} else {
+						// TODO: ask user to handle it maybe
 					}
 				} else {
-					// TODO: ask user to handle it maybe
+					//Log.d(LOGTAG, packet.toString());
 				}
-			} else {
-				Log.d(LOGTAG, packet.toString());
+				replaceContactInConversation(contact.getJid(), contact);
 			}
-			replaceContactInConversation(contact.getJid(), contact);
 		}
 	};
 

src/de/gultsch/chat/ui/ConversationActivity.java → src/eu/siacs/conversations/ui/ConversationActivity.java 🔗

@@ -1,22 +1,16 @@
-package de.gultsch.chat.ui;
+package eu.siacs.conversations.ui;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 
-import org.openintents.openpgp.OpenPgpSignatureResult;
-import org.openintents.openpgp.util.OpenPgpConstants;
-
-import de.gultsch.chat.R;
-import de.gultsch.chat.R.id;
-import de.gultsch.chat.crypto.PgpEngine;
-import de.gultsch.chat.crypto.PgpEngine.UserInputRequiredException;
-import de.gultsch.chat.entities.Account;
-import de.gultsch.chat.entities.Contact;
-import de.gultsch.chat.entities.Conversation;
-import de.gultsch.chat.entities.Message;
-import de.gultsch.chat.utils.UIHelper;
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.entities.Contact;
+import eu.siacs.conversations.entities.Conversation;
+import eu.siacs.conversations.entities.Message;
+import eu.siacs.conversations.utils.UIHelper;
 import android.net.Uri;
 import android.os.Bundle;
 import android.app.AlertDialog;
@@ -25,7 +19,6 @@ import android.app.NotificationManager;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.content.IntentSender.SendIntentException;
 import android.graphics.Typeface;
 import android.support.v4.widget.SlidingPaneLayout;
 import android.support.v4.widget.SlidingPaneLayout.PanelSlideListener;
@@ -67,7 +60,6 @@ public class ConversationActivity extends XmppActivity {
 		
 		@Override
 		public void onConversationListChanged() {
-			final Conversation currentConv = getSelectedConversation();
 			conversationList.clear();
 			conversationList.addAll(xmppConnectionService
 					.getConversations());
@@ -104,8 +96,6 @@ public class ConversationActivity extends XmppActivity {
 			xmppConnectionService.createContact(contact);
 		}
 	};
-	private boolean contactInserted = false;
-	
 	
 	public List<Conversation> getConversationList() {
 		return this.conversationList;
@@ -206,7 +196,7 @@ public class ConversationActivity extends XmppActivity {
 				}
 			}
 		});
-		spl = (SlidingPaneLayout) findViewById(id.slidingpanelayout);
+		spl = (SlidingPaneLayout) findViewById(R.id.slidingpanelayout);
 		spl.setParallaxDistance(150);
 		spl.setShadowResource(R.drawable.es_slidingpane_shadow);
 		spl.setSliderFadeColor(0);
@@ -257,19 +247,26 @@ public class ConversationActivity extends XmppActivity {
 	public boolean onCreateOptionsMenu(Menu menu) {
 		getMenuInflater().inflate(R.menu.conversations, menu);
 		MenuItem menuSecure = (MenuItem) menu.findItem(R.id.action_security);
+		MenuItem menuArchive = (MenuItem) menu.findItem(R.id.action_archive);
+		MenuItem menuMucDetails = (MenuItem) menu.findItem(R.id.action_muc_details);
+		MenuItem menuContactDetails = (MenuItem) menu.findItem(R.id.action_contact_details);
 		
 		if (spl.isOpen()) {
-			((MenuItem) menu.findItem(R.id.action_archive)).setVisible(false);
-			((MenuItem) menu.findItem(R.id.action_details)).setVisible(false);
+			menuArchive.setVisible(false);
+			menuMucDetails.setVisible(false);
+			menuContactDetails.setVisible(false);
 			menuSecure.setVisible(false);
 		} else {
 			((MenuItem) menu.findItem(R.id.action_add)).setVisible(false);
 			if (this.getSelectedConversation()!=null) {
 				if (this.getSelectedConversation().getMode() == Conversation.MODE_MULTI) {
-					((MenuItem) menu.findItem(R.id.action_security)).setVisible(false);
+					menuMucDetails.setVisible(true);
+					menuContactDetails.setVisible(false);
 					menuSecure.setVisible(false);
-					((MenuItem) menu.findItem(R.id.action_archive)).setTitle("Leave conference");
+					menuArchive.setTitle("Leave conference");
 				} else {
+					menuContactDetails.setVisible(true);
+					menuMucDetails.setVisible(false);
 					if (this.getSelectedConversation().getLatestMessage().getEncryption() != Message.ENCRYPTION_NONE) {
 						menuSecure.setIcon(R.drawable.ic_action_secure);
 					}
@@ -302,7 +299,7 @@ public class ConversationActivity extends XmppActivity {
 			xmppConnectionService.archiveConversation(conv);
 			selectedConversation = conversationList.get(0);
 			break;
-		case R.id.action_details:
+		case R.id.action_contact_details:
 			DialogContactDetails details = new DialogContactDetails();
 			Contact contact = this.getSelectedConversation().getContact();
 			if (contact != null) {

src/de/gultsch/chat/ui/ConversationFragment.java → src/eu/siacs/conversations/ui/ConversationFragment.java 🔗

@@ -1,4 +1,4 @@
-package de.gultsch.chat.ui;
+package eu.siacs.conversations.ui;
 
 import java.io.FileNotFoundException;
 import java.util.ArrayList;
@@ -10,15 +10,15 @@ import java.util.Set;
 
 import net.java.otr4j.session.SessionStatus;
 
-import de.gultsch.chat.R;
-import de.gultsch.chat.crypto.PgpEngine.OpenPgpException;
-import de.gultsch.chat.crypto.PgpEngine.UserInputRequiredException;
-import de.gultsch.chat.entities.Contact;
-import de.gultsch.chat.entities.Conversation;
-import de.gultsch.chat.entities.Message;
-import de.gultsch.chat.services.XmppConnectionService;
-import de.gultsch.chat.utils.PhoneHelper;
-import de.gultsch.chat.utils.UIHelper;
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.crypto.PgpEngine.OpenPgpException;
+import eu.siacs.conversations.crypto.PgpEngine.UserInputRequiredException;
+import eu.siacs.conversations.entities.Contact;
+import eu.siacs.conversations.entities.Conversation;
+import eu.siacs.conversations.entities.Message;
+import eu.siacs.conversations.services.XmppConnectionService;
+import eu.siacs.conversations.utils.PhoneHelper;
+import eu.siacs.conversations.utils.UIHelper;
 import android.app.AlertDialog;
 import android.app.Fragment;
 import android.content.DialogInterface;

src/de/gultsch/chat/ui/DialogContactDetails.java → src/eu/siacs/conversations/ui/DialogContactDetails.java 🔗

@@ -1,9 +1,9 @@
-package de.gultsch.chat.ui;
+package eu.siacs.conversations.ui;
 
-import de.gultsch.chat.R;
-import de.gultsch.chat.entities.Contact;
-import de.gultsch.chat.entities.Presences;
-import de.gultsch.chat.utils.UIHelper;
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.entities.Contact;
+import eu.siacs.conversations.entities.Presences;
+import eu.siacs.conversations.utils.UIHelper;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.DialogFragment;
@@ -13,7 +13,6 @@ import android.os.Bundle;
 import android.provider.ContactsContract.CommonDataKinds;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Intents;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;

src/de/gultsch/chat/ui/EditAccount.java → src/eu/siacs/conversations/ui/EditAccount.java 🔗

@@ -1,13 +1,11 @@
-package de.gultsch.chat.ui;
+package eu.siacs.conversations.ui;
 
-import de.gultsch.chat.R;
-import de.gultsch.chat.entities.Account;
-import de.gultsch.chat.utils.Validator;
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.utils.Validator;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.DialogFragment;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -16,7 +14,6 @@ import android.widget.CheckBox;
 import android.widget.CompoundButton;
 import android.widget.CompoundButton.OnCheckedChangeListener;
 import android.widget.EditText;
-import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 public class EditAccount extends DialogFragment {

src/de/gultsch/chat/ui/ManageAccountActivity.java → src/eu/siacs/conversations/ui/ManageAccountActivity.java 🔗

@@ -1,13 +1,13 @@
-package de.gultsch.chat.ui;
+package eu.siacs.conversations.ui;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import de.gultsch.chat.R;
-import de.gultsch.chat.crypto.PgpEngine;
-import de.gultsch.chat.crypto.PgpEngine.UserInputRequiredException;
-import de.gultsch.chat.entities.Account;
-import de.gultsch.chat.ui.EditAccount.EditAccountListener;
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.crypto.PgpEngine;
+import eu.siacs.conversations.crypto.PgpEngine.UserInputRequiredException;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.ui.EditAccount.EditAccountListener;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.Context;

src/de/gultsch/chat/ui/NewConversationActivity.java → src/eu/siacs/conversations/ui/NewConversationActivity.java 🔗

@@ -1,22 +1,20 @@
-package de.gultsch.chat.ui;
+package eu.siacs.conversations.ui;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 
-import de.gultsch.chat.R;
-import de.gultsch.chat.entities.Account;
-import de.gultsch.chat.entities.Contact;
-import de.gultsch.chat.entities.Conversation;
-import de.gultsch.chat.utils.UIHelper;
-import de.gultsch.chat.utils.Validator;
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.entities.Contact;
+import eu.siacs.conversations.entities.Conversation;
+import eu.siacs.conversations.utils.UIHelper;
+import eu.siacs.conversations.utils.Validator;
 import android.net.Uri;
 import android.os.Bundle;
-import android.provider.ContactsContract;
 import android.text.Editable;
 import android.text.TextWatcher;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -35,13 +33,9 @@ import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.Context;
-import android.content.CursorLoader;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnClickListener;
 import android.content.Intent;
-import android.content.Loader;
-import android.content.Loader.OnLoadCompleteListener;
-import android.database.Cursor;
 
 public class NewConversationActivity extends XmppActivity {
 

src/de/gultsch/chat/ui/OnRosterFetchedListener.java → src/eu/siacs/conversations/ui/OnRosterFetchedListener.java 🔗

@@ -1,7 +1,8 @@
-package de.gultsch.chat.ui;
+package eu.siacs.conversations.ui;
 
 import java.util.List;
-import de.gultsch.chat.entities.Contact;
+
+import eu.siacs.conversations.entities.Contact;
 
 public interface OnRosterFetchedListener {
 	public void onRosterFetched(List<Contact> roster);

src/de/gultsch/chat/ui/SettingsFragment.java → src/eu/siacs/conversations/ui/SettingsFragment.java 🔗

@@ -1,6 +1,6 @@
-package de.gultsch.chat.ui;
+package eu.siacs.conversations.ui;
 
-import de.gultsch.chat.R;
+import eu.siacs.conversations.R;
 import android.os.Bundle;
 import android.preference.PreferenceFragment;
 

src/de/gultsch/chat/ui/XmppActivity.java → src/eu/siacs/conversations/ui/XmppActivity.java 🔗

@@ -1,7 +1,7 @@
-package de.gultsch.chat.ui;
+package eu.siacs.conversations.ui;
 
-import de.gultsch.chat.services.XmppConnectionService;
-import de.gultsch.chat.services.XmppConnectionService.XmppConnectionBinder;
+import eu.siacs.conversations.services.XmppConnectionService;
+import eu.siacs.conversations.services.XmppConnectionService.XmppConnectionBinder;
 import android.app.Activity;
 import android.content.ComponentName;
 import android.content.Context;

src/de/gultsch/chat/utils/MessageParser.java → src/eu/siacs/conversations/utils/MessageParser.java 🔗

@@ -1,16 +1,16 @@
-package de.gultsch.chat.utils;
+package eu.siacs.conversations.utils;
 
 import java.util.List;
 
 import net.java.otr4j.session.Session;
 import net.java.otr4j.session.SessionStatus;
 import android.util.Log;
-import de.gultsch.chat.entities.Account;
-import de.gultsch.chat.entities.Conversation;
-import de.gultsch.chat.entities.Message;
-import de.gultsch.chat.services.XmppConnectionService;
-import de.gultsch.chat.xml.Element;
-import de.gultsch.chat.xmpp.MessagePacket;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.entities.Conversation;
+import eu.siacs.conversations.entities.Message;
+import eu.siacs.conversations.services.XmppConnectionService;
+import eu.siacs.conversations.xml.Element;
+import eu.siacs.conversations.xmpp.MessagePacket;
 
 public class MessageParser {
 	

src/de/gultsch/chat/utils/UIHelper.java → src/eu/siacs/conversations/utils/UIHelper.java 🔗

@@ -1,17 +1,15 @@
-package de.gultsch.chat.utils;
+package eu.siacs.conversations.utils;
 
-import java.io.FileDescriptor;
-import java.io.FileNotFoundException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 
-import de.gultsch.chat.R;
-import de.gultsch.chat.entities.Account;
-import de.gultsch.chat.entities.Contact;
-import de.gultsch.chat.entities.Conversation;
-import de.gultsch.chat.entities.Message;
-import de.gultsch.chat.ui.ConversationActivity;
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.entities.Contact;
+import eu.siacs.conversations.entities.Conversation;
+import eu.siacs.conversations.entities.Message;
+import eu.siacs.conversations.ui.ConversationActivity;
 
 import android.app.Activity;
 import android.app.AlertDialog;
@@ -32,7 +30,6 @@ import android.preference.PreferenceManager;
 import android.provider.ContactsContract.Contacts;
 import android.support.v4.app.NotificationCompat;
 import android.support.v4.app.TaskStackBuilder;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.LinearLayout;

src/de/gultsch/chat/xml/Tag.java → src/eu/siacs/conversations/xml/Tag.java 🔗

@@ -1,4 +1,4 @@
-package de.gultsch.chat.xml;
+package eu.siacs.conversations.xml;
 
 import java.util.Hashtable;
 import java.util.Iterator;

src/de/gultsch/chat/xmpp/IqPacket.java → src/eu/siacs/conversations/xmpp/IqPacket.java 🔗

@@ -1,6 +1,6 @@
-package de.gultsch.chat.xmpp;
+package eu.siacs.conversations.xmpp;
 
-import de.gultsch.chat.xml.Element;
+import eu.siacs.conversations.xml.Element;
 
 public class IqPacket extends Element {
 	

src/de/gultsch/chat/xmpp/MessagePacket.java → src/eu/siacs/conversations/xmpp/MessagePacket.java 🔗

@@ -1,6 +1,6 @@
-package de.gultsch.chat.xmpp;
+package eu.siacs.conversations.xmpp;
 
-import de.gultsch.chat.xml.Element;
+import eu.siacs.conversations.xml.Element;
 
 public class MessagePacket extends Element {
 	public static final int TYPE_CHAT = 0;

src/de/gultsch/chat/xmpp/OnIqPacketReceived.java → src/eu/siacs/conversations/xmpp/OnIqPacketReceived.java 🔗

@@ -1,6 +1,6 @@
-package de.gultsch.chat.xmpp;
+package eu.siacs.conversations.xmpp;
 
-import de.gultsch.chat.entities.Account;
+import eu.siacs.conversations.entities.Account;
 
 public interface OnIqPacketReceived {
 	public void onIqPacketReceived(Account account, IqPacket packet);

src/de/gultsch/chat/xmpp/OnMessagePacketReceived.java → src/eu/siacs/conversations/xmpp/OnMessagePacketReceived.java 🔗

@@ -1,6 +1,6 @@
-package de.gultsch.chat.xmpp;
+package eu.siacs.conversations.xmpp;
 
-import de.gultsch.chat.entities.Account;
+import eu.siacs.conversations.entities.Account;
 
 public interface OnMessagePacketReceived {
 	public void onMessagePacketReceived(Account account, MessagePacket packet);

src/de/gultsch/chat/xmpp/OnPresencePacketReceived.java → src/eu/siacs/conversations/xmpp/OnPresencePacketReceived.java 🔗

@@ -1,6 +1,6 @@
-package de.gultsch.chat.xmpp;
+package eu.siacs.conversations.xmpp;
 
-import de.gultsch.chat.entities.Account;
+import eu.siacs.conversations.entities.Account;
 
 public interface OnPresencePacketReceived {
 	public void onPresencePacketReceived(Account account, PresencePacket packet);

src/de/gultsch/chat/xmpp/OnStatusChanged.java → src/eu/siacs/conversations/xmpp/OnStatusChanged.java 🔗

@@ -1,6 +1,6 @@
-package de.gultsch.chat.xmpp;
+package eu.siacs.conversations.xmpp;
 
-import de.gultsch.chat.entities.Account;
+import eu.siacs.conversations.entities.Account;
 
 public interface OnStatusChanged {
 	public void onStatusChanged(Account account);

src/de/gultsch/chat/xmpp/PresencePacket.java → src/eu/siacs/conversations/xmpp/PresencePacket.java 🔗

@@ -1,6 +1,6 @@
-package de.gultsch.chat.xmpp;
+package eu.siacs.conversations.xmpp;
 
-import de.gultsch.chat.xml.Element;
+import eu.siacs.conversations.xml.Element;
 
 public class PresencePacket extends Element {
 	private PresencePacket(String name) {

src/de/gultsch/chat/xmpp/XmppConnection.java → src/eu/siacs/conversations/xmpp/XmppConnection.java 🔗

@@ -1,4 +1,4 @@
-package de.gultsch.chat.xmpp;
+package eu.siacs.conversations.xmpp;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -19,13 +19,13 @@ import org.xmlpull.v1.XmlPullParserException;
 import android.os.Bundle;
 import android.os.PowerManager;
 import android.util.Log;
-import de.gultsch.chat.entities.Account;
-import de.gultsch.chat.utils.DNSHelper;
-import de.gultsch.chat.utils.SASL;
-import de.gultsch.chat.xml.Element;
-import de.gultsch.chat.xml.Tag;
-import de.gultsch.chat.xml.XmlReader;
-import de.gultsch.chat.xml.TagWriter;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.utils.DNSHelper;
+import eu.siacs.conversations.utils.SASL;
+import eu.siacs.conversations.xml.Element;
+import eu.siacs.conversations.xml.Tag;
+import eu.siacs.conversations.xml.TagWriter;
+import eu.siacs.conversations.xml.XmlReader;
 
 public class XmppConnection implements Runnable {