diff options
author | Daniel Gultsch <daniel@gultsch.de> | 2016-05-29 20:44:58 +0200 |
---|---|---|
committer | Daniel Gultsch <daniel@gultsch.de> | 2016-05-29 20:44:58 +0200 |
commit | 49cefd1c0ccbd727fe13bc0c5f0ed3dfe7ebca15 (patch) | |
tree | a23c8787ac0035634e024222167fd458bc4d4f47 | |
parent | 9afafe387aca9f8793f5a9e3d76d841ada7658b7 (diff) |
handle app links
invites in the form of https://conversations/i/localpart/domainpart
-rw-r--r-- | src/main/AndroidManifest.xml | 9 | ||||
-rw-r--r-- | src/main/java/eu/siacs/conversations/utils/XmppUri.java | 12 |
2 files changed, 18 insertions, 3 deletions
diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 182a8ee9..90727b8c 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -76,6 +76,15 @@ <data android:scheme="xmpp"/> </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 android:name=".ui.WelcomeActivity" diff --git a/src/main/java/eu/siacs/conversations/utils/XmppUri.java b/src/main/java/eu/siacs/conversations/utils/XmppUri.java index 92c0241e..3c0136ab 100644 --- a/src/main/java/eu/siacs/conversations/utils/XmppUri.java +++ b/src/main/java/eu/siacs/conversations/utils/XmppUri.java @@ -4,6 +4,7 @@ import android.net.Uri; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; +import java.util.List; import eu.siacs.conversations.xmpp.jid.InvalidJidException; import eu.siacs.conversations.xmpp.jid.Jid; @@ -32,8 +33,13 @@ public class XmppUri { protected void parse(Uri uri) { String scheme = uri.getScheme(); - if ("xmpp".equalsIgnoreCase(scheme)) { - // sample: xmpp:jid@foo.com + String host = uri.getHost(); + 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()); if (uri.getAuthority() != null) { jid = uri.getAuthority(); @@ -42,7 +48,7 @@ public class XmppUri { } fingerprint = parseFingerprint(uri.getQuery()); } else if ("imto".equalsIgnoreCase(scheme)) { - // sample: imto://xmpp/jid@foo.com + // sample: imto://xmpp/foo@bar.com try { jid = URLDecoder.decode(uri.getEncodedPath(), "UTF-8").split("/")[1]; } catch (final UnsupportedEncodingException ignored) { |