diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/RoutingManager.kt b/mobile/src/main/java/be/mygod/vpnhotspot/RoutingManager.kt index 2e20fcd2..e40c04e1 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/RoutingManager.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/RoutingManager.kt @@ -13,13 +13,12 @@ import timber.log.Timber abstract class RoutingManager(private val caller: Any, val downstream: String, private val isWifi: Boolean) { companion object { private const val KEY_MASQUERADE_MODE = "service.masqueradeMode" - private val masqueradeModeUnchecked: Routing.MasqueradeMode get() { - app.pref.getString(KEY_MASQUERADE_MODE, null)?.let { return Routing.MasqueradeMode.valueOf(it) } - return if (app.pref.getBoolean("service.masquerade", true)) // legacy settings - Routing.MasqueradeMode.Simple else Routing.MasqueradeMode.None - } var masqueradeMode: Routing.MasqueradeMode - @TargetApi(28) get() = masqueradeModeUnchecked.let { + @TargetApi(28) get() = app.pref.run { + getString(KEY_MASQUERADE_MODE, null)?.let { return@run Routing.MasqueradeMode.valueOf(it) } + if (getBoolean("service.masquerade", true)) // legacy settings + Routing.MasqueradeMode.Simple else Routing.MasqueradeMode.None + }.let { // older app version enabled netd for everyone. should check again here if (Build.VERSION.SDK_INT >= 28 || it != Routing.MasqueradeMode.Netd) it else Routing.MasqueradeMode.Simple diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt index c77a29b2..e41afb88 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt @@ -30,9 +30,10 @@ import kotlin.system.exitProcess class SettingsPreferenceFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - WifiDoubleLock.mode = WifiDoubleLock.mode // handle complicated default value and possible system upgrades + // handle complicated default value and possible system upgrades + WifiDoubleLock.mode = WifiDoubleLock.mode + RoutingManager.masqueradeMode = RoutingManager.masqueradeMode preferenceManager.preferenceDataStore = SharedPreferenceDataStore(app.pref) - RoutingManager.masqueradeMode = RoutingManager.masqueradeMode // flush default value addPreferencesFromResource(R.xml.pref_settings) findPreference("system.enableTetherOffload")!!.apply { if (Build.VERSION.SDK_INT >= 27) { diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/Routing.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/Routing.kt index 593b79df..104b2f64 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/Routing.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/Routing.kt @@ -88,13 +88,12 @@ class Routing(private val caller: Any, private val downstream: String) : IpNeigh None, Simple, /** - * Netd does not support multiple tethering upstream below Android 9, which we heavily - * depend on. + * Netd does not support multiple tethering upstream below Android 9, which we heavily depend on. * * Source: https://android.googlesource.com/platform/system/netd/+/3b47c793ff7ade843b1d85a9be8461c3b4dc693e */ @RequiresApi(28) - Netd + Netd, } class InterfaceNotFoundException(override val cause: Throwable) : SocketException() {