handle app links

invites in the form of https://conversations/i/localpart/domainpart
This commit is contained in:
Daniel Gultsch 2016-05-29 20:44:58 +02:00
parent 9afafe387a
commit 49cefd1c0c
2 changed files with 18 additions and 3 deletions

View File

@ -76,6 +76,15 @@
<data android:scheme="xmpp"/> <data android:scheme="xmpp"/>
</intent-filter> </intent-filter>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
<data android:host="conversations.im" />
<data android:pathPrefix="/i/"/>
</intent-filter>
</activity> </activity>
<activity <activity
android:name=".ui.WelcomeActivity" android:name=".ui.WelcomeActivity"

View File

@ -4,6 +4,7 @@ import android.net.Uri;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.util.List;
import eu.siacs.conversations.xmpp.jid.InvalidJidException; import eu.siacs.conversations.xmpp.jid.InvalidJidException;
import eu.siacs.conversations.xmpp.jid.Jid; import eu.siacs.conversations.xmpp.jid.Jid;
@ -32,8 +33,13 @@ public class XmppUri {
protected void parse(Uri uri) { protected void parse(Uri uri) {
String scheme = uri.getScheme(); String scheme = uri.getScheme();
if ("xmpp".equalsIgnoreCase(scheme)) { String host = uri.getHost();
// sample: xmpp:jid@foo.com List<String> segments = uri.getPathSegments();
if ("https".equalsIgnoreCase(scheme) && "conversations.im".equalsIgnoreCase(host) && segments.size() >= 3) {
// sample : https://conversations.im/i/foo/bar.com
jid = segments.get(1)+"@"+segments.get(2);
} else if ("xmpp".equalsIgnoreCase(scheme)) {
// sample: xmpp:foo@bar.com
muc = "join".equalsIgnoreCase(uri.getQuery()); muc = "join".equalsIgnoreCase(uri.getQuery());
if (uri.getAuthority() != null) { if (uri.getAuthority() != null) {
jid = uri.getAuthority(); jid = uri.getAuthority();
@ -42,7 +48,7 @@ public class XmppUri {
} }
fingerprint = parseFingerprint(uri.getQuery()); fingerprint = parseFingerprint(uri.getQuery());
} else if ("imto".equalsIgnoreCase(scheme)) { } else if ("imto".equalsIgnoreCase(scheme)) {
// sample: imto://xmpp/jid@foo.com // sample: imto://xmpp/foo@bar.com
try { try {
jid = URLDecoder.decode(uri.getEncodedPath(), "UTF-8").split("/")[1]; jid = URLDecoder.decode(uri.getEncodedPath(), "UTF-8").split("/")[1];
} catch (final UnsupportedEncodingException ignored) { } catch (final UnsupportedEncodingException ignored) {