From bfb6813dc73f7ee9eda5c3a42cfda5d69b830a65 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Mon, 19 Jan 2026 19:18:15 +0800 Subject: [PATCH] Fix HevTun settings to preferences UI --- .../java/com/v2ray/ang/ui/SettingsActivity.kt | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt index 03dbf2d6..4a299a8e 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt @@ -52,6 +52,10 @@ class SettingsActivity : BaseActivity() { private val autoUpdateInterval by lazy { findPreference(AppConfig.SUBSCRIPTION_AUTO_UPDATE_INTERVAL) } private val mode by lazy { findPreference(AppConfig.PREF_MODE) } + private val hevTunLogLevel by lazy { findPreference(AppConfig.PREF_HEV_TUNNEL_LOGLEVEL) } + private val hevTunRwTimeout by lazy { findPreference(AppConfig.PREF_HEV_TUNNEL_RW_TIMEOUT) } + private val useHevTun by lazy { findPreference(AppConfig.PREF_USE_HEV_TUNNEL) } + override fun onCreatePreferences(bundle: Bundle?, s: String?) { // Use MMKV as the storage backend for all Preferences // This prevents inconsistencies between SharedPreferences and MMKV @@ -93,12 +97,21 @@ class SettingsActivity : BaseActivity() { } true } - mode?.setOnPreferenceChangeListener { _, newValue -> - updateMode(newValue.toString()) + mode?.setOnPreferenceChangeListener { pref, newValue -> + val valueStr = newValue.toString() + (pref as? ListPreference)?.let { lp -> + val idx = lp.findIndexOfValue(valueStr) + lp.summary = if (idx >= 0) lp.entries[idx] else valueStr + } + updateMode(valueStr) true } mode?.dialogLayoutResource = R.layout.preference_with_help_link + useHevTun?.setOnPreferenceChangeListener { _, newValue -> + updateHevTunSettings(newValue as Boolean) + true + } } private fun initPreferenceSummaries() { @@ -141,6 +154,8 @@ class SettingsActivity : BaseActivity() { override fun onStart() { super.onStart() + updateHevTunSettings(MmkvManager.decodeSettingsBool(AppConfig.PREF_USE_HEV_TUNNEL, true)) + // Initialize mode-dependent UI states updateMode(MmkvManager.decodeSettingsString(AppConfig.PREF_MODE, VPN)) @@ -152,11 +167,10 @@ class SettingsActivity : BaseActivity() { // Initialize auto-update interval state autoUpdateInterval?.isEnabled = MmkvManager.decodeSettingsBool(AppConfig.SUBSCRIPTION_AUTO_UPDATE, false) - } - private fun updateMode(mode: String?) { - val vpn = mode == VPN + private fun updateMode(value: String?) { + val vpn = value == VPN localDns?.isEnabled = vpn fakeDns?.isEnabled = vpn appendHttpProxy?.isEnabled = vpn @@ -165,6 +179,8 @@ class SettingsActivity : BaseActivity() { vpnBypassLan?.isEnabled = vpn vpnInterfaceAddress?.isEnabled = vpn vpnMtu?.isEnabled = vpn + useHevTun?.isEnabled = vpn + updateHevTunSettings(false) if (vpn) { updateLocalDns( MmkvManager.decodeSettingsBool( @@ -172,6 +188,12 @@ class SettingsActivity : BaseActivity() { false ) ) + updateHevTunSettings( + MmkvManager.decodeSettingsBool( + AppConfig.PREF_USE_HEV_TUNNEL, + false + ) + ) } } @@ -235,6 +257,11 @@ class SettingsActivity : BaseActivity() { fragmentLength?.isEnabled = enabled fragmentInterval?.isEnabled = enabled } + + private fun updateHevTunSettings(enabled: Boolean) { + hevTunLogLevel?.isEnabled = enabled + hevTunRwTimeout?.isEnabled = enabled + } } fun onModeHelpClicked(view: View) {