fix jid.withResource() for domain jids

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/entities/Contact.java               |  4 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java |  2 
src/main/java/eu/siacs/conversations/utils/UIHelper.java                 |  2 
src/main/java/eu/siacs/conversations/xmpp/WrappedJid.java                | 18 
src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java            |  4 
5 files changed, 18 insertions(+), 12 deletions(-)

Detailed changes

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

@@ -451,13 +451,13 @@ public class Contact implements ListItem, Blockable {
 
 	@Override
 	public boolean isDomainBlocked() {
-		return getAccount().isBlocked(Jid.ofDomain(this.getJid().getDomain()));
+		return getAccount().isBlocked(this.getJid().getDomain());
 	}
 
 	@Override
 	public Jid getBlockedJid() {
 		if (isDomainBlocked()) {
-			return Jid.ofDomain(getJid().getDomain());
+			return getJid().getDomain();
 		} else {
 			return getJid();
 		}

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

@@ -2821,7 +2821,7 @@ public class XmppConnectionService extends Service {
                         boolean changed = false;
                         for (ListIterator<Jid> iterator = cryptoTargets.listIterator(); iterator.hasNext(); ) {
                             Jid jid = iterator.next();
-                            if (!members.contains(jid) && !members.contains(Jid.ofDomain(jid.getDomain()))) {
+                            if (!members.contains(jid) && !members.contains(jid.getDomain())) {
                                 iterator.remove();
                                 Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": removed " + jid + " from crypto targets of " + conversation.getName());
                                 changed = true;

src/main/java/eu/siacs/conversations/utils/UIHelper.java 🔗

@@ -520,7 +520,7 @@ public class UIHelper {
 				return ((Conversation) conversation).getMucOptions().getSelf().getName();
 			} else {
 				final Jid jid = conversation.getAccount().getJid();
-				return jid.getLocal() != null ? jid.getLocal() : Jid.ofDomain(jid.getDomain()).toString();
+				return jid.getLocal() != null ? jid.getLocal() : jid.getDomain().toString();
 			}
 		}
 	}

src/main/java/eu/siacs/conversations/xmpp/WrappedJid.java 🔗

@@ -40,13 +40,19 @@ public class WrappedJid implements eu.siacs.conversations.xmpp.Jid {
 
     @Override
     public eu.siacs.conversations.xmpp.Jid withResource(CharSequence resource) {
+        final Localpart localpart = inner.getLocalpartOrNull();
         try {
-            return new WrappedJid(
-                    JidCreate.fullFrom(
-                            inner.getLocalpartOrThrow(),
-                            inner.getDomain(),
-                            Resourcepart.from(resource.toString())
-                    ));
+            final Resourcepart resourcepart = Resourcepart.from(resource.toString());
+            if (localpart == null) {
+                return new WrappedJid(JidCreate.domainFullFrom(inner.getDomain(),resourcepart));
+            } else {
+                return new WrappedJid(
+                        JidCreate.fullFrom(
+                                localpart,
+                                inner.getDomain(),
+                                resourcepart
+                        ));
+            }
         } catch (XmppStringprepException e) {
             throw new IllegalArgumentException(e);
         }

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

@@ -1276,7 +1276,7 @@ public class XmppConnection implements Runnable {
     private void sendServiceDiscoveryItems(final Jid server) {
         mPendingServiceDiscoveries.incrementAndGet();
         final IqPacket iq = new IqPacket(IqPacket.TYPE.GET);
-        iq.setTo(Jid.ofDomain(server.getDomain()));
+        iq.setTo(server.getDomain());
         iq.query("http://jabber.org/protocol/disco#items");
         this.sendIqPacket(iq, (account, packet) -> {
             if (packet.getType() == IqPacket.TYPE.RESULT) {
@@ -1641,7 +1641,7 @@ public class XmppConnection implements Runnable {
 
     public Identity getServerIdentity() {
         synchronized (this.disco) {
-            ServiceDiscoveryResult result = disco.get(Jid.ofDomain(account.getJid().getDomain()));
+            ServiceDiscoveryResult result = disco.get(account.getJid().getDomain());
             if (result == null) {
                 return Identity.UNKNOWN;
             }