aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2016-05-29 20:44:58 +0200
committerDaniel Gultsch <daniel@gultsch.de>2016-05-29 20:44:58 +0200
commit49cefd1c0ccbd727fe13bc0c5f0ed3dfe7ebca15 (patch)
treea23c8787ac0035634e024222167fd458bc4d4f47
parent9afafe387aca9f8793f5a9e3d76d841ada7658b7 (diff)
handle app links
invites in the form of https://conversations/i/localpart/domainpart
-rw-r--r--src/main/AndroidManifest.xml9
-rw-r--r--src/main/java/eu/siacs/conversations/utils/XmppUri.java12
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) {