From d0276a232e55a054bfe9d11abb6905a53ed823af Mon Sep 17 00:00:00 2001 From: koalasat Date: Thu, 24 Jul 2025 16:12:26 +0200 Subject: [PATCH] Fix external links --- .../main/java/com/robosats/MainActivity.kt | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/android/app/src/main/java/com/robosats/MainActivity.kt b/android/app/src/main/java/com/robosats/MainActivity.kt index 41e02b56..3fdc0cfd 100644 --- a/android/app/src/main/java/com/robosats/MainActivity.kt +++ b/android/app/src/main/java/com/robosats/MainActivity.kt @@ -19,6 +19,8 @@ import android.webkit.WebSettings import android.webkit.WebStorage import android.webkit.WebView import android.webkit.WebViewClient +import android.content.Intent +import android.net.Uri import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.constraintlayout.widget.ConstraintLayout @@ -186,6 +188,38 @@ class MainActivity : AppCompatActivity() { runOnUiThread { updateStatus("Secure connection established. Loading app...") + // Set up WebViewClient that allows external links and deep links to be opened + webView.webViewClient = object : WebViewClient() { + override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean { + val url = request.url.toString() + val uri = request.url + + if (url.startsWith("file:///android_asset/")) return false + + try { + Log.d("ExternalLink", "Attempting to open: $url") + + val intent = Intent(Intent.ACTION_VIEW, uri) + if (intent.resolveActivity(packageManager) != null) { + startActivity(intent) + Log.d("ExternalLink", "Successfully opened link in external app") + } else { + Log.w("ExternalLink", "No app found to handle: $url") + if (url.startsWith("http://") || url.startsWith("https://")) { + val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) + startActivity(browserIntent) + Log.d("ExternalLink", "Opened http/https link in browser") + } + } + + return true + } catch (e: Exception) { + Log.e("ExternalLink", "Failed to open external link: ${e.message}", e) + return true + } + } + } + // Set up WebChromeClient with restricted permissions webView.webChromeClient = object : WebChromeClient() { override fun onGeolocationPermissionsShowPrompt(