transmit display name (nick) in subscription requests and display them on Quicksy

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/entities/Contact.java            |  3 
src/main/java/eu/siacs/conversations/entities/Conversation.java       |  3 
src/main/java/eu/siacs/conversations/generator/PresenceGenerator.java | 10 
src/main/java/eu/siacs/conversations/parser/PresenceParser.java       |  6 
4 files changed, 16 insertions(+), 6 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/entities/Contact.java 🔗

@@ -21,6 +21,7 @@ import eu.siacs.conversations.Config;
 import eu.siacs.conversations.R;
 import eu.siacs.conversations.android.AbstractPhoneContact;
 import eu.siacs.conversations.android.JabberIdContact;
+import eu.siacs.conversations.services.QuickConversationsService;
 import eu.siacs.conversations.utils.JidHelper;
 import eu.siacs.conversations.utils.UIHelper;
 import eu.siacs.conversations.xml.Element;
@@ -133,7 +134,7 @@ public class Contact implements ListItem, Blockable {
 			return this.systemName;
 		} else if (!TextUtils.isEmpty(this.serverName)) {
 			return this.serverName;
-		} else if (!TextUtils.isEmpty(this.presenceName) && mutualPresenceSubscription()) {
+		} else if (!TextUtils.isEmpty(this.presenceName) && ((QuickConversationsService.isQuicksy() && Config.QUICKSY_DOMAIN.equals(jid.getDomain())) ||mutualPresenceSubscription())) {
 			return this.presenceName;
 		} else if (jid.getLocal() != null) {
 			return JidHelper.localPartOrFallback(jid);

src/main/java/eu/siacs/conversations/entities/Conversation.java 🔗

@@ -23,6 +23,7 @@ import eu.siacs.conversations.Config;
 import eu.siacs.conversations.crypto.OmemoSetting;
 import eu.siacs.conversations.crypto.PgpDecryptionService;
 import eu.siacs.conversations.crypto.axolotl.AxolotlService;
+import eu.siacs.conversations.services.QuickConversationsService;
 import eu.siacs.conversations.utils.JidHelper;
 import eu.siacs.conversations.xmpp.InvalidJid;
 import eu.siacs.conversations.xmpp.chatstate.ChatState;
@@ -498,7 +499,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
 					return contactJid.getLocal() != null ? contactJid.getLocal() : contactJid;
 				}
 			}
-		} else if (isWithStranger()) {
+		} else if ((QuickConversationsService.isConversations() || !Config.QUICKSY_DOMAIN.equals(contactJid.getDomain())) && isWithStranger()) {
 			return contactJid;
 		} else {
 			return this.getContact().getDisplayName();

src/main/java/eu/siacs/conversations/generator/PresenceGenerator.java 🔗

@@ -1,11 +1,14 @@
 package eu.siacs.conversations.generator;
 
+import android.text.TextUtils;
+
 import eu.siacs.conversations.entities.Account;
 import eu.siacs.conversations.entities.Contact;
 import eu.siacs.conversations.entities.MucOptions;
 import eu.siacs.conversations.entities.Presence;
 import eu.siacs.conversations.services.XmppConnectionService;
 import eu.siacs.conversations.xml.Element;
+import eu.siacs.conversations.xml.Namespace;
 import eu.siacs.conversations.xmpp.stanzas.PresencePacket;
 
 public class PresenceGenerator extends AbstractGenerator {
@@ -23,7 +26,12 @@ public class PresenceGenerator extends AbstractGenerator {
 	}
 
 	public PresencePacket requestPresenceUpdatesFrom(Contact contact) {
-		return subscription("subscribe", contact);
+		PresencePacket packet = subscription("subscribe", contact);
+		String displayName = contact.getAccount().getDisplayName();
+		if (!TextUtils.isEmpty(displayName)) {
+			packet.addChild("nick",Namespace.NICK).setContent(displayName);
+		}
+		return packet;
 	}
 
 	public PresencePacket stopPresenceUpdatesFrom(Contact contact) {

src/main/java/eu/siacs/conversations/parser/PresenceParser.java 🔗

@@ -260,9 +260,6 @@ public class PresenceParser extends AbstractParser implements
 		final Contact contact = account.getRoster().getContact(from);
 		if (type == null) {
 			final String resource = from.isBareJid() ? "" : from.getResource();
-			if (contact.setPresenceName(packet.findChildContent("nick", Namespace.NICK))) {
-				mXmppConnectionService.getAvatarService().clear(contact);
-			}
 			Avatar avatar = Avatar.parsePresence(packet.findChild("x", "vcard-temp:x:update"));
 			if (avatar != null && (!contact.isSelf() || account.getAvatar() == null)) {
 				avatar.owner = from.asBareJid();
@@ -341,6 +338,9 @@ public class PresenceParser extends AbstractParser implements
 			}
 			mXmppConnectionService.onContactStatusChanged.onContactStatusChanged(contact, false);
 		} else if (type.equals("subscribe")) {
+			if (contact.setPresenceName(packet.findChildContent("nick", Namespace.NICK))) {
+				mXmppConnectionService.getAvatarService().clear(contact);
+			}
 			if (contact.getOption(Contact.Options.PREEMPTIVE_GRANT)) {
 				mXmppConnectionService.sendPresencePacket(account,
 						mPresenceGenerator.sendPresenceUpdatesTo(contact));