Refactor VPN mode checks and TUN config logic
Centralizes VPN mode detection in SettingsManager with a new isVpnMode() method and updates all usages to reference it. Refactors TUN configuration logic in V2rayConfigManager for clarity and correctness, ensuring proper config and routing rules are applied based on VPN and HEV TUN settings.
This commit is contained in:
1 parent
ca6e963575
commit
de1c8bcfcc
4 files changed
+43
-26
No files matched your search
@@ -10,6 +10,7 @@ import com.v2ray.ang.AppConfig.ANG_PACKAGE
|
|||||||
import com.v2ray.ang.AppConfig.GEOIP_PRIVATE
|
import com.v2ray.ang.AppConfig.GEOIP_PRIVATE
|
||||||
import com.v2ray.ang.AppConfig.GEOSITE_PRIVATE
|
import com.v2ray.ang.AppConfig.GEOSITE_PRIVATE
|
||||||
import com.v2ray.ang.AppConfig.TAG_DIRECT
|
import com.v2ray.ang.AppConfig.TAG_DIRECT
|
||||||
|
import com.v2ray.ang.AppConfig.VPN
|
||||||
import com.v2ray.ang.dto.EConfigType
|
import com.v2ray.ang.dto.EConfigType
|
||||||
import com.v2ray.ang.dto.Language
|
import com.v2ray.ang.dto.Language
|
||||||
import com.v2ray.ang.dto.ProfileItem
|
import com.v2ray.ang.dto.ProfileItem
|
||||||
@@ -386,6 +387,15 @@ object SettingsManager {
|
|||||||
return MmkvManager.decodeSettingsBool(AppConfig.PREF_USE_HEV_TUNNEL, true)
|
return MmkvManager.decodeSettingsBool(AppConfig.PREF_USE_HEV_TUNNEL, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if VPN mode is enabled.
|
||||||
|
* @return True if VPN mode is enabled, false otherwise.
|
||||||
|
*/
|
||||||
|
fun isVpnMode(): Boolean {
|
||||||
|
val mode = MmkvManager.decodeSettingsString(AppConfig.PREF_MODE)
|
||||||
|
return mode == null || mode == VPN
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensure default settings are present in MMKV.
|
* Ensure default settings are present in MMKV.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ object V2RayServiceManager {
|
|||||||
} else {
|
} else {
|
||||||
context.toast(R.string.toast_services_start)
|
context.toast(R.string.toast_services_start)
|
||||||
}
|
}
|
||||||
val intent = if ((MmkvManager.decodeSettingsString(AppConfig.PREF_MODE) ?: AppConfig.VPN) == AppConfig.VPN) {
|
val intent = if (SettingsManager.isVpnMode()) {
|
||||||
Intent(context.applicationContext, V2RayVpnService::class.java)
|
Intent(context.applicationContext, V2RayVpnService::class.java)
|
||||||
} else {
|
} else {
|
||||||
Intent(context.applicationContext, V2RayProxyOnlyService::class.java)
|
Intent(context.applicationContext, V2RayProxyOnlyService::class.java)
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ object V2rayConfigManager {
|
|||||||
private fun getV2rayCustomConfig(context: Context, guid: String, config: ProfileItem): ConfigResult {
|
private fun getV2rayCustomConfig(context: Context, guid: String, config: ProfileItem): ConfigResult {
|
||||||
val raw = MmkvManager.decodeServerRaw(guid) ?: return ConfigResult(false)
|
val raw = MmkvManager.decodeServerRaw(guid) ?: return ConfigResult(false)
|
||||||
val result = ConfigResult(true, guid, raw)
|
val result = ConfigResult(true, guid, raw)
|
||||||
if (SettingsManager.isUsingHevTun()) {
|
if (!needTun()) {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -334,18 +334,18 @@ object V2rayConfigManager {
|
|||||||
*/
|
*/
|
||||||
private fun initV2rayConfig(context: Context): V2rayConfig? {
|
private fun initV2rayConfig(context: Context): V2rayConfig? {
|
||||||
var assets = ""
|
var assets = ""
|
||||||
if (SettingsManager.isUsingHevTun()) {
|
if (needTun()) {
|
||||||
assets = initConfigCache ?: Utils.readTextFromAssets(context, "v2ray_config.json")
|
|
||||||
if (TextUtils.isEmpty(assets)) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
initConfigCache = assets
|
|
||||||
} else {
|
|
||||||
assets = initConfigCacheWithTun ?: Utils.readTextFromAssets(context, "v2ray_config_with_tun.json")
|
assets = initConfigCacheWithTun ?: Utils.readTextFromAssets(context, "v2ray_config_with_tun.json")
|
||||||
if (TextUtils.isEmpty(assets)) {
|
if (TextUtils.isEmpty(assets)) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
initConfigCacheWithTun = assets
|
initConfigCacheWithTun = assets
|
||||||
|
} else {
|
||||||
|
assets = initConfigCache ?: Utils.readTextFromAssets(context, "v2ray_config.json")
|
||||||
|
if (TextUtils.isEmpty(assets)) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
initConfigCache = assets
|
||||||
}
|
}
|
||||||
val config = JsonUtil.fromJson(assets, V2rayConfig::class.java)
|
val config = JsonUtil.fromJson(assets, V2rayConfig::class.java)
|
||||||
return config
|
return config
|
||||||
@@ -357,6 +357,10 @@ object V2rayConfigManager {
|
|||||||
|
|
||||||
//region some sub function
|
//region some sub function
|
||||||
|
|
||||||
|
private fun needTun(): Boolean {
|
||||||
|
return SettingsManager.isVpnMode() && !SettingsManager.isUsingHevTun()
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configures the inbound settings for V2ray.
|
* Configures the inbound settings for V2ray.
|
||||||
*
|
*
|
||||||
@@ -395,7 +399,7 @@ object V2rayConfigManager {
|
|||||||
v2rayConfig.inbounds.add(inbound2)
|
v2rayConfig.inbounds.add(inbound2)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!SettingsManager.isUsingHevTun()) {
|
if (needTun()) {
|
||||||
val inboundTun = v2rayConfig.inbounds.firstOrNull { e -> e.tag == "tun" }
|
val inboundTun = v2rayConfig.inbounds.firstOrNull { e -> e.tag == "tun" }
|
||||||
inboundTun?.settings?.mtu = SettingsManager.getVpnMtu()
|
inboundTun?.settings?.mtu = SettingsManager.getVpnMtu()
|
||||||
inboundTun?.sniffing = inbound1.sniffing
|
inboundTun?.sniffing = inbound1.sniffing
|
||||||
@@ -520,23 +524,25 @@ object V2rayConfigManager {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SettingsManager.isUsingHevTun()) {
|
if(SettingsManager.isVpnMode()) {
|
||||||
//hev-socks5-tunnel dns routing
|
if (SettingsManager.isUsingHevTun()) {
|
||||||
v2rayConfig.routing.rules.add(
|
//hev-socks5-tunnel dns routing
|
||||||
0, RulesBean(
|
v2rayConfig.routing.rules.add(
|
||||||
inboundTag = arrayListOf("socks"),
|
0, RulesBean(
|
||||||
outboundTag = "dns-out",
|
inboundTag = arrayListOf("socks"),
|
||||||
port = "53",
|
outboundTag = "dns-out",
|
||||||
|
port = "53",
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
} else {
|
||||||
} else {
|
v2rayConfig.routing.rules.add(
|
||||||
v2rayConfig.routing.rules.add(
|
0, RulesBean(
|
||||||
0, RulesBean(
|
inboundTag = arrayListOf("tun"),
|
||||||
inboundTag = arrayListOf("tun"),
|
outboundTag = "dns-out",
|
||||||
outboundTag = "dns-out",
|
port = "53",
|
||||||
port = "53",
|
)
|
||||||
)
|
)
|
||||||
)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// DNS outbound
|
// DNS outbound
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import com.v2ray.ang.extension.toastError
|
|||||||
import com.v2ray.ang.handler.AngConfigManager
|
import com.v2ray.ang.handler.AngConfigManager
|
||||||
import com.v2ray.ang.handler.MmkvManager
|
import com.v2ray.ang.handler.MmkvManager
|
||||||
import com.v2ray.ang.handler.SettingsChangeManager
|
import com.v2ray.ang.handler.SettingsChangeManager
|
||||||
|
import com.v2ray.ang.handler.SettingsManager
|
||||||
import com.v2ray.ang.handler.V2RayServiceManager
|
import com.v2ray.ang.handler.V2RayServiceManager
|
||||||
import com.v2ray.ang.util.Utils
|
import com.v2ray.ang.util.Utils
|
||||||
import com.v2ray.ang.viewmodel.MainViewModel
|
import com.v2ray.ang.viewmodel.MainViewModel
|
||||||
@@ -188,7 +189,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
|
|||||||
|
|
||||||
if (mainViewModel.isRunning.value == true) {
|
if (mainViewModel.isRunning.value == true) {
|
||||||
V2RayServiceManager.stopVService(this)
|
V2RayServiceManager.stopVService(this)
|
||||||
} else if ((MmkvManager.decodeSettingsString(AppConfig.PREF_MODE) ?: VPN) == VPN) {
|
} else if (SettingsManager.isVpnMode()) {
|
||||||
val intent = VpnService.prepare(this)
|
val intent = VpnService.prepare(this)
|
||||||
if (intent == null) {
|
if (intent == null) {
|
||||||
startV2Ray()
|
startV2Ray()
|
||||||
|
|||||||
Reference in new issue
Block a user