Skip to content
Snippets Groups Projects
Verified Commit 3363d08c authored by Torsten Grote's avatar Torsten Grote
Browse files

Don't allow unchecking all bridge types

parent e8b589a3
No related branches found
No related tags found
1 merge request!174Handle unchecking all bridges
Pipeline #14656 passed
...@@ -3,10 +3,12 @@ package org.briarproject.mailbox.android.ui.settings ...@@ -3,10 +3,12 @@ package org.briarproject.mailbox.android.ui.settings
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference import androidx.preference.Preference.OnPreferenceChangeListener
import androidx.preference.PreferenceCategory import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreferenceCompat import androidx.preference.SwitchPreferenceCompat
import com.google.android.material.snackbar.Snackbar
import com.google.android.material.snackbar.Snackbar.LENGTH_SHORT
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
...@@ -44,7 +46,7 @@ class SettingsFragment : PreferenceFragmentCompat() { ...@@ -44,7 +46,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
private lateinit var obfs4Pref: SwitchPreferenceCompat private lateinit var obfs4Pref: SwitchPreferenceCompat
private lateinit var obfs4DefaultPref: SwitchPreferenceCompat private lateinit var obfs4DefaultPref: SwitchPreferenceCompat
private lateinit var vanillaPref: SwitchPreferenceCompat private lateinit var vanillaPref: SwitchPreferenceCompat
private lateinit var brideTypePrefs: List<Preference> private lateinit var brideTypePrefs: List<SwitchPreferenceCompat>
private lateinit var bridgeTypesCategory: PreferenceCategory private lateinit var bridgeTypesCategory: PreferenceCategory
@Inject @Inject
...@@ -84,6 +86,17 @@ class SettingsFragment : PreferenceFragmentCompat() { ...@@ -84,6 +86,17 @@ class SettingsFragment : PreferenceFragmentCompat() {
brideTypePrefs = listOf( brideTypePrefs = listOf(
snowflakePref, meekPref, obfs4Pref, obfs4DefaultPref, vanillaPref snowflakePref, meekPref, obfs4Pref, obfs4DefaultPref, vanillaPref
) )
val typePrefChangedListener = OnPreferenceChangeListener { _, newValue ->
if (!(newValue as Boolean)) {
// allow change only if more than one bridge type is still checked
val allowChange = brideTypePrefs.count { it.isChecked } > 1
if (!allowChange) showBridgeTypeSnackbar()
allowChange
} else true
}
brideTypePrefs.forEach { preference ->
preference.onPreferenceChangeListener = typePrefChangedListener
}
bridgeTypesCategory = findPreference("bridgeTypesCategory")!! bridgeTypesCategory = findPreference("bridgeTypesCategory")!!
autoPref.setOnPreferenceChangeListener { _, newValue -> autoPref.setOnPreferenceChangeListener { _, newValue ->
onAutoChanged(newValue as Boolean) onAutoChanged(newValue as Boolean)
...@@ -95,6 +108,11 @@ class SettingsFragment : PreferenceFragmentCompat() { ...@@ -95,6 +108,11 @@ class SettingsFragment : PreferenceFragmentCompat() {
} }
} }
private fun showBridgeTypeSnackbar() {
val v = view ?: return
Snackbar.make(v, R.string.prefs_bridges_at_least_one, LENGTH_SHORT).show()
}
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
// apply settings only when user is leaving settings to prevent Tor changes on each toggle // apply settings only when user is leaving settings to prevent Tor changes on each toggle
......
...@@ -91,5 +91,6 @@ ...@@ -91,5 +91,6 @@
<string name="prefs_bridges_obfs4_title" translatable="false">Obfs4</string> <string name="prefs_bridges_obfs4_title" translatable="false">Obfs4</string>
<string name="prefs_bridges_obfs_builtin_title">Obfs4 from Tor Browser</string> <string name="prefs_bridges_obfs_builtin_title">Obfs4 from Tor Browser</string>
<string name="prefs_bridges_meek_title" translatable="false">Meek</string> <string name="prefs_bridges_meek_title" translatable="false">Meek</string>
<string name="prefs_bridges_at_least_one">At least one bridge type must be enabled, or disable \"Use bridges\".</string>
</resources> </resources>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment