From 09fc2a480a8e6f2a39ff796f07be0853d90cbb27 Mon Sep 17 00:00:00 2001 From: Corewala Date: Thu, 30 Jun 2022 18:54:06 -0400 Subject: [PATCH] Improved handling of broken addresses in settings --- .../java/corewala/buran/ui/GemActivity.kt | 44 ++++++++++++++----- .../buran/ui/settings/SettingsFragment.kt | 42 ++++++++++++++---- app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 4 files changed, 68 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/corewala/buran/ui/GemActivity.kt b/app/src/main/java/corewala/buran/ui/GemActivity.kt index 7e7903c..2f26b2f 100644 --- a/app/src/main/java/corewala/buran/ui/GemActivity.kt +++ b/app/src/main/java/corewala/buran/ui/GemActivity.kt @@ -85,7 +85,9 @@ class GemActivity : AppCompatActivity() { lateinit var adapter: AbstractGemtextAdapter - lateinit var home: String + private lateinit var home: String + + private lateinit var searchBase: String private val onLink: (link: URI, longTap: Boolean, adapterPosition: Int) -> Unit = { uri, longTap, _: Int -> if(longTap){ @@ -171,6 +173,20 @@ class GemActivity : AppCompatActivity() { home = "" } + searchBase = prefs.getString( + "search_base", + Buran.DEFAULT_SEARCH_BASE + ) ?: Buran.DEFAULT_SEARCH_BASE + + if( + !searchBase.startsWith("gemini://") + or searchBase.contains(" ") + or !searchBase.contains(".") + or !searchBase.endsWith("?") + ){ + searchBase = Buran.DEFAULT_SEARCH_BASE + } + if(getInternetStatus()){ initialise() }else{ @@ -189,11 +205,7 @@ class GemActivity : AppCompatActivity() { binding.addressEdit.setOnEditorActionListener { _, actionId, _ -> when (actionId) { EditorInfo.IME_ACTION_GO -> { - val searchbase = prefs.getString( - "search_base", - Buran.DEFAULT_SEARCH_BASE - ) - omniTerm.input(binding.addressEdit.text.toString().trim(), searchbase) + omniTerm.input(binding.addressEdit.text.toString().trim(), searchBase) binding.addressEdit.clearFocus() return@setOnEditorActionListener true } @@ -340,6 +352,20 @@ class GemActivity : AppCompatActivity() { home = "" } + searchBase = prefs.getString( + "search_base", + Buran.DEFAULT_SEARCH_BASE + ) ?: Buran.DEFAULT_SEARCH_BASE + + if( + !searchBase.startsWith("gemini://") + or searchBase.contains(" ") + or !searchBase.contains(".") + or !searchBase.endsWith("?") + ){ + searchBase = Buran.DEFAULT_SEARCH_BASE + } + when { prefs.contains("background_colour") -> { when (val backgroundColor = prefs.getString("background_colour", "#XXXXXX")) { @@ -513,17 +539,13 @@ class GemActivity : AppCompatActivity() { is GemState.ResponseUnknownHost -> { omniTerm.reset() runOnUiThread { - val searchbase = prefs.getString( - "search_base", - Buran.DEFAULT_SEARCH_BASE - ) loadingView(false) AlertDialog.Builder(this, R.style.AppDialogTheme) .setTitle(getString(R.string.unknown_host)) .setMessage("${getString(R.string.unknown_host)}: ${state.uri}\n\n${getString(R.string.search_instead)}") .setPositiveButton(getString(R.string.search).toUpperCase()) { _, _ -> loadingView(true) - omniTerm.search(state.uri.toString(), searchbase) + omniTerm.search(state.uri.toString(), searchBase) } .setNegativeButton(getString(R.string.cancel).toUpperCase()) { _, _ -> } .show() diff --git a/app/src/main/java/corewala/buran/ui/settings/SettingsFragment.kt b/app/src/main/java/corewala/buran/ui/settings/SettingsFragment.kt index 0fdc132..8b48bb7 100644 --- a/app/src/main/java/corewala/buran/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/corewala/buran/ui/settings/SettingsFragment.kt @@ -67,19 +67,18 @@ class SettingsFragment: PreferenceFragmentCompat(), Preference.OnPreferenceChang homePreference.positiveButtonText = getString(R.string.update) homePreference.negativeButtonText = getString(R.string.cancel) - homePreference.title = getString(R.string.home_capsule) homePreference.setOnPreferenceChangeListener { _, newValue -> val newHomecapsule = newValue.toString().trim() - if(newHomecapsule.isNullOrEmpty()){ - homePreference.summary = context.getString(R.string.no_home_capsule_set) + homePreference.summary = if(newHomecapsule.isNullOrEmpty()){ + context.getString(R.string.no_home_capsule_set) }else if( !newHomecapsule.startsWith("gemini://") or newHomecapsule.contains(" ") or !newHomecapsule.contains(".") ){ - homePreference.summary = context.getString(R.string.not_valid_address) + context.getString(R.string.not_valid_address) }else{ - homePreference.summary = newHomecapsule + newHomecapsule } true } @@ -98,14 +97,39 @@ class SettingsFragment: PreferenceFragmentCompat(), Preference.OnPreferenceChang val searchengine = preferenceManager.sharedPreferences.getString( "search_base", Buran.DEFAULT_SEARCH_BASE - ) + )?.trim() + + searchPreference.summary = if(searchengine.isNullOrEmpty()){ + Buran.DEFAULT_SEARCH_BASE + }else if( + !searchengine.startsWith("gemini://") + or searchengine.contains(" ") + or !searchengine.contains(".") + ){ + context.getString(R.string.not_valid_address) + }else if(!searchengine.endsWith("?")){ + context.getString(R.string.not_valid_search_string) + }else{ + searchengine + } - searchPreference.summary = searchengine searchPreference.positiveButtonText = getString(R.string.update) searchPreference.negativeButtonText = getString(R.string.cancel) - searchPreference.title = getString(R.string.search_engine) searchPreference.setOnPreferenceChangeListener { _, newValue -> - searchPreference.summary = newValue.toString() + val newSearchBase = newValue.toString().trim() + searchPreference.summary = if(newSearchBase.isNullOrEmpty()){ + Buran.DEFAULT_SEARCH_BASE + }else if( + !newSearchBase.startsWith("gemini://") + or newSearchBase.contains(" ") + or !newSearchBase.contains(".") + ){ + context.getString(R.string.not_valid_address) + }else if(!newSearchBase.endsWith("?")){ + context.getString(R.string.not_valid_search_string) + }else{ + newSearchBase + } true } searchPreference.setOnBindEditTextListener{ editText -> diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index ec2973b..57b597f 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -50,6 +50,7 @@ Fichier sauvegardé dans l\'appareil Configurer Buran Capsule d\'accueil + Ceci n\'est pas une base de recherche valide Ceci n\'est pas une adresse valide Pas de capsule d\'accueil Moteur de recherche diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0458cfc..2b6b161 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -50,6 +50,7 @@ File saved to device Configure Buran Home Capsule + This is not a valid search base This is not a valid address No home capsule set Search Engine