From ff6e0d9fbfa1331f034c6e768b1a5fe653682e51 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Thu, 20 Nov 2025 22:33:14 +0100 Subject: [PATCH] improve webxdc link handling add geo: support and support for i.delta.chat links --- .../org/thoughtcrime/securesms/WebViewActivity.java | 1 + .../org/thoughtcrime/securesms/WebxdcActivity.java | 13 +++++++++++-- .../java/org/thoughtcrime/securesms/util/Util.java | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/WebViewActivity.java b/src/main/java/org/thoughtcrime/securesms/WebViewActivity.java index 7cc852310..8c2e5b3ce 100644 --- a/src/main/java/org/thoughtcrime/securesms/WebViewActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/WebViewActivity.java @@ -79,6 +79,7 @@ public class WebViewActivity extends PassphraseRequiredActionBarActivity case "https": case "mailto": case "openpgp4fpr": + case "geo": return openOnlineUrl(url); } } diff --git a/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java b/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java index 585fc279a..b9a76ef79 100644 --- a/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java @@ -43,6 +43,7 @@ import org.json.JSONObject; import org.thoughtcrime.securesms.connect.AccountManager; import org.thoughtcrime.securesms.connect.DcEventCenter; import org.thoughtcrime.securesms.connect.DcHelper; +import org.thoughtcrime.securesms.qr.QrCodeHandler; import org.thoughtcrime.securesms.util.IntentUtils; import org.thoughtcrime.securesms.util.JsonUtils; import org.thoughtcrime.securesms.util.MediaUtil; @@ -345,8 +346,16 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE @Override protected boolean openOnlineUrl(String url) { Log.i(TAG, "openOnlineUrl: " + url); - if (url.startsWith("mailto:") || url.startsWith("openpgp4fpr:")) { - return super.openOnlineUrl(url); + String schema = url.split(":")[0].toLowerCase(); + switch (schema) { + case "mailto": + case "openpgp4fpr": + case "geo": + return super.openOnlineUrl(url); + } + if (url.startsWith("https://" + Util.INVITE_DOMAIN + "/")) { + QrCodeHandler qrCodeHandler = new QrCodeHandler(this); + qrCodeHandler.handleQrData(url); } return !internetAccess; // returning `false` continues loading in WebView; returning `true` let WebView abort loading } diff --git a/src/main/java/org/thoughtcrime/securesms/util/Util.java b/src/main/java/org/thoughtcrime/securesms/util/Util.java index 2db9e40aa..fd3a0aadd 100644 --- a/src/main/java/org/thoughtcrime/securesms/util/Util.java +++ b/src/main/java/org/thoughtcrime/securesms/util/Util.java @@ -60,7 +60,7 @@ import java.util.concurrent.CountDownLatch; public class Util { private static final String TAG = Util.class.getSimpleName(); - private static final String INVITE_DOMAIN = "i.delta.chat"; + public static final String INVITE_DOMAIN = "i.delta.chat"; public static final Handler handler = new Handler(Looper.getMainLooper());