Improved handling of broken addresses in settings

This commit is contained in:
Corewala 2022-06-30 18:54:06 -04:00
parent a47d003f59
commit 09fc2a480a
4 changed files with 68 additions and 20 deletions

View File

@ -85,7 +85,9 @@ class GemActivity : AppCompatActivity() {
lateinit var adapter: AbstractGemtextAdapter 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 -> private val onLink: (link: URI, longTap: Boolean, adapterPosition: Int) -> Unit = { uri, longTap, _: Int ->
if(longTap){ if(longTap){
@ -171,6 +173,20 @@ class GemActivity : AppCompatActivity() {
home = "" 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()){ if(getInternetStatus()){
initialise() initialise()
}else{ }else{
@ -189,11 +205,7 @@ class GemActivity : AppCompatActivity() {
binding.addressEdit.setOnEditorActionListener { _, actionId, _ -> binding.addressEdit.setOnEditorActionListener { _, actionId, _ ->
when (actionId) { when (actionId) {
EditorInfo.IME_ACTION_GO -> { EditorInfo.IME_ACTION_GO -> {
val searchbase = prefs.getString( omniTerm.input(binding.addressEdit.text.toString().trim(), searchBase)
"search_base",
Buran.DEFAULT_SEARCH_BASE
)
omniTerm.input(binding.addressEdit.text.toString().trim(), searchbase)
binding.addressEdit.clearFocus() binding.addressEdit.clearFocus()
return@setOnEditorActionListener true return@setOnEditorActionListener true
} }
@ -340,6 +352,20 @@ class GemActivity : AppCompatActivity() {
home = "" 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 { when {
prefs.contains("background_colour") -> { prefs.contains("background_colour") -> {
when (val backgroundColor = prefs.getString("background_colour", "#XXXXXX")) { when (val backgroundColor = prefs.getString("background_colour", "#XXXXXX")) {
@ -513,17 +539,13 @@ class GemActivity : AppCompatActivity() {
is GemState.ResponseUnknownHost -> { is GemState.ResponseUnknownHost -> {
omniTerm.reset() omniTerm.reset()
runOnUiThread { runOnUiThread {
val searchbase = prefs.getString(
"search_base",
Buran.DEFAULT_SEARCH_BASE
)
loadingView(false) loadingView(false)
AlertDialog.Builder(this, R.style.AppDialogTheme) AlertDialog.Builder(this, R.style.AppDialogTheme)
.setTitle(getString(R.string.unknown_host)) .setTitle(getString(R.string.unknown_host))
.setMessage("${getString(R.string.unknown_host)}: ${state.uri}\n\n${getString(R.string.search_instead)}") .setMessage("${getString(R.string.unknown_host)}: ${state.uri}\n\n${getString(R.string.search_instead)}")
.setPositiveButton(getString(R.string.search).toUpperCase()) { _, _ -> .setPositiveButton(getString(R.string.search).toUpperCase()) { _, _ ->
loadingView(true) loadingView(true)
omniTerm.search(state.uri.toString(), searchbase) omniTerm.search(state.uri.toString(), searchBase)
} }
.setNegativeButton(getString(R.string.cancel).toUpperCase()) { _, _ -> } .setNegativeButton(getString(R.string.cancel).toUpperCase()) { _, _ -> }
.show() .show()

View File

@ -67,19 +67,18 @@ class SettingsFragment: PreferenceFragmentCompat(), Preference.OnPreferenceChang
homePreference.positiveButtonText = getString(R.string.update) homePreference.positiveButtonText = getString(R.string.update)
homePreference.negativeButtonText = getString(R.string.cancel) homePreference.negativeButtonText = getString(R.string.cancel)
homePreference.title = getString(R.string.home_capsule)
homePreference.setOnPreferenceChangeListener { _, newValue -> homePreference.setOnPreferenceChangeListener { _, newValue ->
val newHomecapsule = newValue.toString().trim() val newHomecapsule = newValue.toString().trim()
if(newHomecapsule.isNullOrEmpty()){ homePreference.summary = if(newHomecapsule.isNullOrEmpty()){
homePreference.summary = context.getString(R.string.no_home_capsule_set) context.getString(R.string.no_home_capsule_set)
}else if( }else if(
!newHomecapsule.startsWith("gemini://") !newHomecapsule.startsWith("gemini://")
or newHomecapsule.contains(" ") or newHomecapsule.contains(" ")
or !newHomecapsule.contains(".") or !newHomecapsule.contains(".")
){ ){
homePreference.summary = context.getString(R.string.not_valid_address) context.getString(R.string.not_valid_address)
}else{ }else{
homePreference.summary = newHomecapsule newHomecapsule
} }
true true
} }
@ -98,14 +97,39 @@ class SettingsFragment: PreferenceFragmentCompat(), Preference.OnPreferenceChang
val searchengine = preferenceManager.sharedPreferences.getString( val searchengine = preferenceManager.sharedPreferences.getString(
"search_base", "search_base",
Buran.DEFAULT_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.positiveButtonText = getString(R.string.update)
searchPreference.negativeButtonText = getString(R.string.cancel) searchPreference.negativeButtonText = getString(R.string.cancel)
searchPreference.title = getString(R.string.search_engine)
searchPreference.setOnPreferenceChangeListener { _, newValue -> 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 true
} }
searchPreference.setOnBindEditTextListener{ editText -> searchPreference.setOnBindEditTextListener{ editText ->

View File

@ -50,6 +50,7 @@
<string name="file_saved_to_device">Fichier sauvegardé dans l\'appareil</string> <string name="file_saved_to_device">Fichier sauvegardé dans l\'appareil</string>
<string name="configure_buran">Configurer Buran</string> <string name="configure_buran">Configurer Buran</string>
<string name="home_capsule">Capsule d\'accueil</string> <string name="home_capsule">Capsule d\'accueil</string>
<string name="not_valid_search_string">Ceci n\'est pas une base de recherche valide</string>
<string name="not_valid_address">Ceci n\'est pas une adresse valide</string> <string name="not_valid_address">Ceci n\'est pas une adresse valide</string>
<string name="no_home_capsule_set">Pas de capsule d\'accueil</string> <string name="no_home_capsule_set">Pas de capsule d\'accueil</string>
<string name="search_engine">Moteur de recherche</string> <string name="search_engine">Moteur de recherche</string>

View File

@ -50,6 +50,7 @@
<string name="file_saved_to_device">File saved to device</string> <string name="file_saved_to_device">File saved to device</string>
<string name="configure_buran">Configure Buran</string> <string name="configure_buran">Configure Buran</string>
<string name="home_capsule">Home Capsule</string> <string name="home_capsule">Home Capsule</string>
<string name="not_valid_search_string">This is not a valid search base</string>
<string name="not_valid_address">This is not a valid address</string> <string name="not_valid_address">This is not a valid address</string>
<string name="no_home_capsule_set">No home capsule set</string> <string name="no_home_capsule_set">No home capsule set</string>
<string name="search_engine">Search Engine</string> <string name="search_engine">Search Engine</string>