handle app links for conferences

This commit is contained in:
Daniel Gultsch 2016-05-30 21:12:04 +02:00
parent 8eb1640a26
commit 9321ccc775
4 changed files with 28 additions and 7 deletions

View File

@ -83,6 +83,7 @@
<data android:scheme="https" /> <data android:scheme="https" />
<data android:host="conversations.im" /> <data android:host="conversations.im" />
<data android:pathPrefix="/i/" /> <data android:pathPrefix="/i/" />
<data android:pathPrefix="/j/" />
</intent-filter> </intent-filter>
</activity> </activity>

View File

@ -3124,6 +3124,16 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
return contacts; 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() { public NotificationService getNotificationService() {
return this.mNotificationService; return this.mNotificationService;
} }

View File

@ -846,7 +846,16 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
private boolean handleJid(Invite invite) { private boolean handleJid(Invite invite) {
List<Contact> contacts = xmppConnectionService.findContacts(invite.getJid()); List<Contact> 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()); showCreateContactDialog(invite.getJid().toString(),invite.getFingerprint());
return false; return false;
} else if (contacts.size() == 1) { } else if (contacts.size() == 1) {
@ -1020,13 +1029,13 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
boolean invite() { boolean invite() {
if (jid != null) { if (jid != null) {
if (muc) {
showJoinConferenceDialog(jid);
} else {
return handleJid(this); return handleJid(this);
} }
}
return false; return false;
} }
public boolean isMuc() {
return muc;
}
} }
} }

View File

@ -47,6 +47,7 @@ public class XmppUri {
// sample : https://conversations.im/i/foo/bar.com // sample : https://conversations.im/i/foo/bar.com
jid = segments.get(1) + "@" + segments.get(2); jid = segments.get(1) + "@" + segments.get(2);
} }
muc = segments.size() > 1 && "j".equalsIgnoreCase(segments.get(0));
} else if ("xmpp".equalsIgnoreCase(scheme)) { } else if ("xmpp".equalsIgnoreCase(scheme)) {
// sample: xmpp:foo@bar.com // sample: xmpp:foo@bar.com
muc = "join".equalsIgnoreCase(uri.getQuery()); muc = "join".equalsIgnoreCase(uri.getQuery());