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() {
// handle data restored/crash
if (Build.VERSION.SDK_INT >= 24 && DataStore.directBootAware &&
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) {
val assetManager = assets
for (dir in arrayOf("acl", "overture"))
......
......@@ -50,11 +50,13 @@ class GlobalSettingsPreferenceFragment : PreferenceFragmentCompat() {
} else canToggleLocked.parent!!.removePreference(canToggleLocked)
val tfo = findPreference(Key.tfo) as SwitchPreference
tfo.isChecked = TcpFastOpen.sendEnabled
tfo.isChecked = DataStore.tcpFastOpen
tfo.setOnPreferenceChangeListener { _, value ->
val result = TcpFastOpen.enabled(value as Boolean)
if (result != null && result != "Success.") (activity as MainActivity).snackbar(result).show()
value == TcpFastOpen.sendEnabled
if (value as Boolean) {
val result = TcpFastOpen.enabled(true)
if (result != null && result != "Success.") (activity as MainActivity).snackbar(result).show()
TcpFastOpen.sendEnabled
} else true
}
if (!TcpFastOpen.supported) {
tfo.isEnabled = false
......
......@@ -189,7 +189,7 @@ object BaseService {
val pluginPath = pluginPath
if (pluginPath != null) {
val pluginCmd = arrayListOf(pluginPath)
if (TcpFastOpen.sendEnabled) pluginCmd.add("--fast-open")
if (DataStore.tcpFastOpen) pluginCmd.add("--fast-open")
config
.put("plugin", Commandline.toString(service.buildAdditionalArguments(pluginCmd)))
.put("plugin_opts", plugin.toString())
......@@ -268,7 +268,7 @@ object BaseService {
if (profile.udpdns) cmd += "-D"
if (TcpFastOpen.sendEnabled) cmd += "--fast-open"
if (DataStore.tcpFastOpen) cmd += "--fast-open"
data.processes.start(cmd)
}
......
......@@ -27,6 +27,7 @@ import com.github.shadowsocks.database.PrivateDatabase
import com.github.shadowsocks.database.PublicDatabase
import com.github.shadowsocks.utils.DirectBoot
import com.github.shadowsocks.utils.Key
import com.github.shadowsocks.utils.TcpFastOpen
import com.github.shadowsocks.utils.parsePort
object DataStore {
......@@ -52,6 +53,7 @@ object DataStore {
}
val canToggleLocked: Boolean get() = publicStore.getBoolean(Key.directBootAware) == true
val directBootAware: Boolean get() = app.directBootSupported && canToggleLocked
val tcpFastOpen: Boolean get() = TcpFastOpen.sendEnabled && DataStore.publicStore.getBoolean(Key.tfo, true)
@AppCompatDelegate.NightMode
val nightMode get() = when (publicStore.getString(Key.nightMode)) {
Key.nightModeAuto -> AppCompatDelegate.MODE_NIGHT_AUTO
......
......@@ -53,7 +53,7 @@
instead</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="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="udp_dns">DNS Forwarding</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