From 9321ccc775776abeba764371a3d3102b16ff18b8 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 30 May 2016 21:12:04 +0200 Subject: [PATCH] handle app links for conferences --- src/main/AndroidManifest.xml | 3 ++- .../services/XmppConnectionService.java | 10 +++++++++ .../ui/StartConversationActivity.java | 21 +++++++++++++------ .../eu/siacs/conversations/utils/XmppUri.java | 1 + 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 90727b8c0..963b138da 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 7eebe0696..757e29b52 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 548682dfb..17f9944fd 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 7a56d38f7..15a6c9a12 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());