diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt index bc5e9ca9..7e610d88 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt @@ -10,6 +10,7 @@ import com.v2ray.ang.AppConfig.ANG_PACKAGE import com.v2ray.ang.AppConfig.GEOIP_PRIVATE import com.v2ray.ang.AppConfig.GEOSITE_PRIVATE import com.v2ray.ang.AppConfig.TAG_DIRECT +import com.v2ray.ang.AppConfig.VPN import com.v2ray.ang.dto.EConfigType import com.v2ray.ang.dto.Language import com.v2ray.ang.dto.ProfileItem @@ -386,6 +387,15 @@ object SettingsManager { 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. */ diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2RayServiceManager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2RayServiceManager.kt index 60d99f74..e7641349 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2RayServiceManager.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2RayServiceManager.kt @@ -108,7 +108,7 @@ object V2RayServiceManager { } else { 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) } else { Intent(context.applicationContext, V2RayProxyOnlyService::class.java) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt index a2902a64..12eab95f 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt @@ -91,7 +91,7 @@ object V2rayConfigManager { private fun getV2rayCustomConfig(context: Context, guid: String, config: ProfileItem): ConfigResult { val raw = MmkvManager.decodeServerRaw(guid) ?: return ConfigResult(false) val result = ConfigResult(true, guid, raw) - if (SettingsManager.isUsingHevTun()) { + if (!needTun()) { return result } @@ -334,18 +334,18 @@ object V2rayConfigManager { */ private fun initV2rayConfig(context: Context): V2rayConfig? { var assets = "" - if (SettingsManager.isUsingHevTun()) { - assets = initConfigCache ?: Utils.readTextFromAssets(context, "v2ray_config.json") - if (TextUtils.isEmpty(assets)) { - return null - } - initConfigCache = assets - } else { + if (needTun()) { assets = initConfigCacheWithTun ?: Utils.readTextFromAssets(context, "v2ray_config_with_tun.json") if (TextUtils.isEmpty(assets)) { return null } 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) return config @@ -357,6 +357,10 @@ object V2rayConfigManager { //region some sub function + private fun needTun(): Boolean { + return SettingsManager.isVpnMode() && !SettingsManager.isUsingHevTun() + } + /** * Configures the inbound settings for V2ray. * @@ -395,7 +399,7 @@ object V2rayConfigManager { v2rayConfig.inbounds.add(inbound2) } - if (!SettingsManager.isUsingHevTun()) { + if (needTun()) { val inboundTun = v2rayConfig.inbounds.firstOrNull { e -> e.tag == "tun" } inboundTun?.settings?.mtu = SettingsManager.getVpnMtu() inboundTun?.sniffing = inbound1.sniffing @@ -520,23 +524,25 @@ object V2rayConfigManager { ) } - if (SettingsManager.isUsingHevTun()) { - //hev-socks5-tunnel dns routing - v2rayConfig.routing.rules.add( - 0, RulesBean( - inboundTag = arrayListOf("socks"), - outboundTag = "dns-out", - port = "53", + if(SettingsManager.isVpnMode()) { + if (SettingsManager.isUsingHevTun()) { + //hev-socks5-tunnel dns routing + v2rayConfig.routing.rules.add( + 0, RulesBean( + inboundTag = arrayListOf("socks"), + outboundTag = "dns-out", + port = "53", + ) ) - ) - } else { - v2rayConfig.routing.rules.add( - 0, RulesBean( - inboundTag = arrayListOf("tun"), - outboundTag = "dns-out", - port = "53", + } else { + v2rayConfig.routing.rules.add( + 0, RulesBean( + inboundTag = arrayListOf("tun"), + outboundTag = "dns-out", + port = "53", + ) ) - ) + } } // DNS outbound diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainActivity.kt index b4679fef..4d769069 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainActivity.kt @@ -34,6 +34,7 @@ import com.v2ray.ang.extension.toastError import com.v2ray.ang.handler.AngConfigManager import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.handler.SettingsChangeManager +import com.v2ray.ang.handler.SettingsManager import com.v2ray.ang.handler.V2RayServiceManager import com.v2ray.ang.util.Utils import com.v2ray.ang.viewmodel.MainViewModel @@ -188,7 +189,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList if (mainViewModel.isRunning.value == true) { V2RayServiceManager.stopVService(this) - } else if ((MmkvManager.decodeSettingsString(AppConfig.PREF_MODE) ?: VPN) == VPN) { + } else if (SettingsManager.isVpnMode()) { val intent = VpnService.prepare(this) if (intent == null) { startV2Ray()