diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt index 7832aa2c72b1..7d591b6af47c 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt @@ -1465,7 +1465,12 @@ class BrowserTabFragment : Intent(Intent.ACTION_VIEW).apply { data = Uri.parse(url) } - startActivity(intent) + + if (requireActivity().packageManager.resolveActivity(intent, 0) != null) { + startActivity(intent) + } else { + showToast(R.string.unableToOpenLink) + } } private fun launchPopupMenu( diff --git a/app/src/main/java/com/duckduckgo/app/browser/SpecialUrlDetector.kt b/app/src/main/java/com/duckduckgo/app/browser/SpecialUrlDetector.kt index d778f0c81bc4..0ad813755928 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/SpecialUrlDetector.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/SpecialUrlDetector.kt @@ -61,6 +61,7 @@ class SpecialUrlDetectorImpl( ): UrlType { val uriString = uri.toString() + logcat(tag = "RadoiuC") { "Uri: $uri scheme: ${uri.scheme}" } return when (val scheme = uri.scheme) { TEL_SCHEME -> buildTelephone(uriString) TELPROMPT_SCHEME -> buildTelephonePrompt(uriString) @@ -91,7 +92,9 @@ class SpecialUrlDetectorImpl( } // if there's no redirects (initiatingUrl = null) then it's user initiated val userInitiated = initiatingUrl == null - checkForIntent(scheme, uriString, intentFlags, userInitiated) + checkForIntent(scheme, uriString, intentFlags, userInitiated).also { + logcat(tag = "RadoiuC") { "Check for intent result: $it" } + } } } } @@ -206,7 +209,7 @@ class SpecialUrlDetectorImpl( return try { val intent = Intent.parseUri(uriString, intentFlags) // only proceed if something can handle it - if (userInitiated && (intent == null || packageManager.resolveActivity(intent, 0) == null) && + if (userInitiated && invalidIntentWithNoPackage(intent) && androidBrowserConfigFeature.validateIntentResolution().isEnabled() ) { return UrlType.Unknown(uriString) @@ -234,6 +237,9 @@ class SpecialUrlDetectorImpl( return UrlType.SearchQuery(uriString) } + private fun invalidIntentWithNoPackage(intent: Intent?) = intent == null || + (packageManager.resolveActivity(intent, 0) == null && intent.`package` == null) + private fun buildFallbackIntent(fallbackUrl: String?): Intent? { if (determineType(fallbackUrl) is UrlType.NonHttpAppLink) { return Intent.parseUri(fallbackUrl, URI_ANDROID_APP_SCHEME)