diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index 90727b8c0f844d368504df7241a45e9669ea4daf..963b138daceca11de7c84fee9af88c96d81791bd 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -82,7 +82,8 @@
-
+
+
diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
index 7eebe06969d5a5b3290d03d3377998cab9fb0b8e..757e29b52bbe2929ff5b0b7227f0fd83be4e3a01 100644
--- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
+++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
@@ -3124,6 +3124,16 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
return contacts;
}
+ public Conversation findFirstMuc(Jid jid) {
+ for(Conversation conversation : getConversations()) {
+ if (conversation.getJid().toBareJid().equals(jid.toBareJid())
+ && conversation.getMode() == Conversation.MODE_MULTI) {
+ return conversation;
+ }
+ }
+ return null;
+ }
+
public NotificationService getNotificationService() {
return this.mNotificationService;
}
diff --git a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java
index 548682dfb1bb0034ba29fc65fe1076e0c0375694..17f9944fd87369c27511b5c0f5e4370f7b4004f0 100644
--- a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java
@@ -846,7 +846,16 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
private boolean handleJid(Invite invite) {
List contacts = xmppConnectionService.findContacts(invite.getJid());
- if (contacts.size() == 0) {
+ if (invite.isMuc()) {
+ Conversation muc = xmppConnectionService.findFirstMuc(invite.getJid());
+ if (muc != null) {
+ switchToConversation(muc);
+ return true;
+ } else {
+ showJoinConferenceDialog(invite.getJid().toBareJid().toString());
+ return false;
+ }
+ } else if (contacts.size() == 0) {
showCreateContactDialog(invite.getJid().toString(),invite.getFingerprint());
return false;
} else if (contacts.size() == 1) {
@@ -1020,13 +1029,13 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
boolean invite() {
if (jid != null) {
- if (muc) {
- showJoinConferenceDialog(jid);
- } else {
- return handleJid(this);
- }
+ return handleJid(this);
}
return false;
}
+
+ public boolean isMuc() {
+ return muc;
+ }
}
}
diff --git a/src/main/java/eu/siacs/conversations/utils/XmppUri.java b/src/main/java/eu/siacs/conversations/utils/XmppUri.java
index 7a56d38f7c96d82c92c5b845e828551edc6b1819..15a6c9a127ff295d016a5b8027db5cb833aab135 100644
--- a/src/main/java/eu/siacs/conversations/utils/XmppUri.java
+++ b/src/main/java/eu/siacs/conversations/utils/XmppUri.java
@@ -47,6 +47,7 @@ public class XmppUri {
// sample : https://conversations.im/i/foo/bar.com
jid = segments.get(1) + "@" + segments.get(2);
}
+ muc = segments.size() > 1 && "j".equalsIgnoreCase(segments.get(0));
} else if ("xmpp".equalsIgnoreCase(scheme)) {
// sample: xmpp:foo@bar.com
muc = "join".equalsIgnoreCase(uri.getQuery());