From 75f42173c914c562b5bc72ad965153e9dbf6f7c9 Mon Sep 17 00:00:00 2001 From: Corewala Date: Tue, 10 May 2022 12:14:17 -0400 Subject: [PATCH] External non-http URLs are handled correctly --- app/src/main/java/corewala/buran/OmniTerm.kt | 4 +-- .../java/corewala/buran/ui/GemActivity.kt | 25 ++++++++++++++----- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/corewala/buran/OmniTerm.kt b/app/src/main/java/corewala/buran/OmniTerm.kt index e2679bb..7728fa3 100644 --- a/app/src/main/java/corewala/buran/OmniTerm.kt +++ b/app/src/main/java/corewala/buran/OmniTerm.kt @@ -50,9 +50,9 @@ class OmniTerm(private val listener: Listener) { */ private fun navigation(link: String, invokeListener: Boolean) { when { - link.startsWith("http") -> listener.openBrowser(link) link.startsWith(GEM_SCHEME) -> uri.set(link) link.startsWith("//") -> uri.set("gemini:$link") + link.contains(":") -> listener.openExternal(link) else -> uri.resolve(link) } @@ -89,6 +89,6 @@ class OmniTerm(private val listener: Listener) { interface Listener{ fun request(address: String) - fun openBrowser(address: String) + fun openExternal(address: String) } } \ No newline at end of file diff --git a/app/src/main/java/corewala/buran/ui/GemActivity.kt b/app/src/main/java/corewala/buran/ui/GemActivity.kt index 96534e0..5598ab0 100644 --- a/app/src/main/java/corewala/buran/ui/GemActivity.kt +++ b/app/src/main/java/corewala/buran/ui/GemActivity.kt @@ -75,7 +75,7 @@ class GemActivity : AppCompatActivity() { model.request(address, false) } - override fun openBrowser(address: String) = openWebLink(address) + override fun openExternal(address: String) = openExternalLink(address) }) private var internetStatus: Boolean = false @@ -85,13 +85,15 @@ class GemActivity : AppCompatActivity() { lateinit var adapter: AbstractGemtextAdapter private val onLink: (link: URI, longTap: Boolean, adapterPosition: Int) -> Unit = { uri, longTap, position: Int -> + println(uri.toString() + "COPE") if(longTap){ var globalURI: String - if(!uri.toString().contains("//")){ + if(!uri.toString().contains("//") and !uri.toString().contains(":")){ globalURI = (omniTerm.getCurrent() + uri.toString()).replace("//", "/").replace("gemini:/", "gemini://") } else { globalURI = uri.toString() } + println(globalURI + "COPE") Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, globalURI) @@ -533,7 +535,7 @@ class GemActivity : AppCompatActivity() { val uri = state.uri.toString() when { - (uri.startsWith("http://") || uri.startsWith("https://")) -> openWebLink(uri) + (uri.startsWith("http://") || uri.startsWith("https://")) -> openExternalLink(uri) else -> { val viewIntent = Intent(Intent.ACTION_VIEW) viewIntent.data = Uri.parse(state.uri.toString()) @@ -552,17 +554,28 @@ class GemActivity : AppCompatActivity() { } } - private fun openWebLink(address: String){ + private fun openExternalLink(address: String){ if(PreferenceManager.getDefaultSharedPreferences(this).getBoolean( Buran.PREF_KEY_USE_CUSTOM_TAB, true - )) { + )or !address.startsWith("http")) { val builder = CustomTabsIntent.Builder() val intent = builder.build() - intent.launchUrl(this, Uri.parse(address)) + + try { + intent.launchUrl(this, Uri.parse(address)) + }catch (e: ActivityNotFoundException){ + showAlert( + String.format( + getString(R.string.no_app_installed_that_can_open), + address + ) + ) + } }else{ val viewIntent = Intent(Intent.ACTION_VIEW) viewIntent.data = Uri.parse(address) + startActivity(viewIntent) } }