Commit 494d35ee authored by Mygod's avatar Mygod

Allow TFO toggling without changing system if possible

Fix #1906.
parent 35f5f65b
...@@ -123,7 +123,7 @@ class App : Application() { ...@@ -123,7 +123,7 @@ class App : Application() {
// handle data restored/crash // handle data restored/crash
if (Build.VERSION.SDK_INT >= 24 && DataStore.directBootAware && if (Build.VERSION.SDK_INT >= 24 && DataStore.directBootAware &&
getSystemService<UserManager>()?.isUserUnlocked == true) DirectBoot.flushTrafficStats() getSystemService<UserManager>()?.isUserUnlocked == true) DirectBoot.flushTrafficStats()
TcpFastOpen.enabledAsync(DataStore.publicStore.getBoolean(Key.tfo, TcpFastOpen.sendEnabled)) if (DataStore.tcpFastOpen) TcpFastOpen.enabledAsync(true)
if (DataStore.publicStore.getLong(Key.assetUpdateTime, -1) != info.lastUpdateTime) { if (DataStore.publicStore.getLong(Key.assetUpdateTime, -1) != info.lastUpdateTime) {
val assetManager = assets val assetManager = assets
for (dir in arrayOf("acl", "overture")) for (dir in arrayOf("acl", "overture"))
......
...@@ -50,11 +50,13 @@ class GlobalSettingsPreferenceFragment : PreferenceFragmentCompat() { ...@@ -50,11 +50,13 @@ class GlobalSettingsPreferenceFragment : PreferenceFragmentCompat() {
} else canToggleLocked.parent!!.removePreference(canToggleLocked) } else canToggleLocked.parent!!.removePreference(canToggleLocked)
val tfo = findPreference(Key.tfo) as SwitchPreference val tfo = findPreference(Key.tfo) as SwitchPreference
tfo.isChecked = TcpFastOpen.sendEnabled tfo.isChecked = DataStore.tcpFastOpen
tfo.setOnPreferenceChangeListener { _, value -> tfo.setOnPreferenceChangeListener { _, value ->
val result = TcpFastOpen.enabled(value as Boolean) if (value as Boolean) {
val result = TcpFastOpen.enabled(true)
if (result != null && result != "Success.") (activity as MainActivity).snackbar(result).show() if (result != null && result != "Success.") (activity as MainActivity).snackbar(result).show()
value == TcpFastOpen.sendEnabled TcpFastOpen.sendEnabled
} else true
} }
if (!TcpFastOpen.supported) { if (!TcpFastOpen.supported) {
tfo.isEnabled = false tfo.isEnabled = false
......
...@@ -189,7 +189,7 @@ object BaseService { ...@@ -189,7 +189,7 @@ object BaseService {
val pluginPath = pluginPath val pluginPath = pluginPath
if (pluginPath != null) { if (pluginPath != null) {
val pluginCmd = arrayListOf(pluginPath) val pluginCmd = arrayListOf(pluginPath)
if (TcpFastOpen.sendEnabled) pluginCmd.add("--fast-open") if (DataStore.tcpFastOpen) pluginCmd.add("--fast-open")
config config
.put("plugin", Commandline.toString(service.buildAdditionalArguments(pluginCmd))) .put("plugin", Commandline.toString(service.buildAdditionalArguments(pluginCmd)))
.put("plugin_opts", plugin.toString()) .put("plugin_opts", plugin.toString())
...@@ -268,7 +268,7 @@ object BaseService { ...@@ -268,7 +268,7 @@ object BaseService {
if (profile.udpdns) cmd += "-D" if (profile.udpdns) cmd += "-D"
if (TcpFastOpen.sendEnabled) cmd += "--fast-open" if (DataStore.tcpFastOpen) cmd += "--fast-open"
data.processes.start(cmd) data.processes.start(cmd)
} }
......
...@@ -27,6 +27,7 @@ import com.github.shadowsocks.database.PrivateDatabase ...@@ -27,6 +27,7 @@ import com.github.shadowsocks.database.PrivateDatabase
import com.github.shadowsocks.database.PublicDatabase import com.github.shadowsocks.database.PublicDatabase
import com.github.shadowsocks.utils.DirectBoot import com.github.shadowsocks.utils.DirectBoot
import com.github.shadowsocks.utils.Key import com.github.shadowsocks.utils.Key
import com.github.shadowsocks.utils.TcpFastOpen
import com.github.shadowsocks.utils.parsePort import com.github.shadowsocks.utils.parsePort
object DataStore { object DataStore {
...@@ -52,6 +53,7 @@ object DataStore { ...@@ -52,6 +53,7 @@ object DataStore {
} }
val canToggleLocked: Boolean get() = publicStore.getBoolean(Key.directBootAware) == true val canToggleLocked: Boolean get() = publicStore.getBoolean(Key.directBootAware) == true
val directBootAware: Boolean get() = app.directBootSupported && canToggleLocked val directBootAware: Boolean get() = app.directBootSupported && canToggleLocked
val tcpFastOpen: Boolean get() = TcpFastOpen.sendEnabled && DataStore.publicStore.getBoolean(Key.tfo, true)
@AppCompatDelegate.NightMode @AppCompatDelegate.NightMode
val nightMode get() = when (publicStore.getString(Key.nightMode)) { val nightMode get() = when (publicStore.getString(Key.nightMode)) {
Key.nightModeAuto -> AppCompatDelegate.MODE_NIGHT_AUTO Key.nightModeAuto -> AppCompatDelegate.MODE_NIGHT_AUTO
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
instead</string> instead</string>
<string name="direct_boot_aware">Allow Toggling in Lock Screen</string> <string name="direct_boot_aware">Allow Toggling in Lock Screen</string>
<string name="direct_boot_aware_summary">Your selected profile information will be less protected</string> <string name="direct_boot_aware_summary">Your selected profile information will be less protected</string>
<string name="tcp_fastopen_summary">Toggling requires ROOT permission</string> <string name="tcp_fastopen_summary">Toggling might require ROOT permission</string>
<string name="tcp_fastopen_summary_unsupported">Unsupported kernel version: %s &lt; 3.7.1</string> <string name="tcp_fastopen_summary_unsupported">Unsupported kernel version: %s &lt; 3.7.1</string>
<string name="udp_dns">DNS Forwarding</string> <string name="udp_dns">DNS Forwarding</string>
<string name="udp_dns_summary">Forward all DNS requests to remote</string> <string name="udp_dns_summary">Forward all DNS requests to remote</string>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment