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
Branches
Tags
1 merge request!174Handle unchecking all bridges
Pipeline #14656 passed
......@@ -3,10 +3,12 @@ package org.briarproject.mailbox.android.ui.settings
import android.os.Bundle
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference
import androidx.preference.Preference.OnPreferenceChangeListener
import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceFragmentCompat
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 kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
......@@ -44,7 +46,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
private lateinit var obfs4Pref: SwitchPreferenceCompat
private lateinit var obfs4DefaultPref: SwitchPreferenceCompat
private lateinit var vanillaPref: SwitchPreferenceCompat
private lateinit var brideTypePrefs: List<Preference>
private lateinit var brideTypePrefs: List<SwitchPreferenceCompat>
private lateinit var bridgeTypesCategory: PreferenceCategory
@Inject
......@@ -84,6 +86,17 @@ class SettingsFragment : PreferenceFragmentCompat() {
brideTypePrefs = listOf(
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")!!
autoPref.setOnPreferenceChangeListener { _, newValue ->
onAutoChanged(newValue as Boolean)
......@@ -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() {
super.onDestroy()
// apply settings only when user is leaving settings to prevent Tor changes on each toggle
......
......@@ -91,5 +91,6 @@
<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_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>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment