diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt index 01d42506..aeb1ed63 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt @@ -168,6 +168,13 @@ object AppConfig { const val WIREGUARD_LOCAL_MTU = "1420" const val LOOPBACK = "127.0.0.1" + /** Shared defaults for settings shown in the UI and consumed by config generation. */ + const val DEFAULT_SOCKS_ENABLE_UDP = true + const val DEFAULT_OUTBOUND_DOMAIN_RESOLVE_METHOD = "1" + const val DEFAULT_VPN_BYPASS_LAN = "1" + const val DEFAULT_HEV_TUNNEL_LOGLEVEL = "warn" + const val DEFAULT_MUX_XUDP_CONCURRENCY = "8" + /** Message constants for communication. */ const val MSG_REGISTER_CLIENT = 1 const val MSG_STATE_RUNNING = 11 diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreConfigManager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreConfigManager.kt index 864a3ab8..b2e08d31 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreConfigManager.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreConfigManager.kt @@ -517,7 +517,7 @@ object CoreConfigManager { inbound1.listen = AppConfig.LOOPBACK } inbound1.port = socksPort - inbound1.settings?.udp = MmkvManager.decodeSettingsBool(AppConfig.PREF_SOCKS_ENABLE_UDP, true) + inbound1.settings?.udp = MmkvManager.decodeSettingsBool(AppConfig.PREF_SOCKS_ENABLE_UDP, AppConfig.DEFAULT_SOCKS_ENABLE_UDP) if (socksUsername != null && socksPassword != null) { inbound1.settings?.auth = "password" inbound1.settings?.accounts = listOf( @@ -1058,7 +1058,7 @@ object CoreConfigManager { * Resolve outbound domains to IPs and write resolved hosts to DNS map. */ private fun resolveOutboundDomainsToHosts(v2rayConfig: V2rayConfig) { - if (MmkvManager.decodeSettingsString(AppConfig.PREF_OUTBOUND_DOMAIN_RESOLVE_METHOD, "1") != "1") { + if (MmkvManager.decodeSettingsString(AppConfig.PREF_OUTBOUND_DOMAIN_RESOLVE_METHOD, AppConfig.DEFAULT_OUTBOUND_DOMAIN_RESOLVE_METHOD) != "1") { return } diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreOutboundBuilder.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreOutboundBuilder.kt index 1b03eb4e..aa951ff7 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreOutboundBuilder.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreOutboundBuilder.kt @@ -62,7 +62,7 @@ object CoreOutboundBuilder { if (muxEnabled) { outbound.mux?.enabled = true outbound.mux?.concurrency = MmkvManager.decodeSettingsString(AppConfig.PREF_MUX_CONCURRENCY, "8").orEmpty().toInt() - outbound.mux?.xudpConcurrency = MmkvManager.decodeSettingsString(AppConfig.PREF_MUX_XUDP_CONCURRENCY, "16").orEmpty().toInt() + outbound.mux?.xudpConcurrency = MmkvManager.decodeSettingsString(AppConfig.PREF_MUX_XUDP_CONCURRENCY, AppConfig.DEFAULT_MUX_XUDP_CONCURRENCY).orEmpty().toInt() outbound.mux?.xudpProxyUDP443 = MmkvManager.decodeSettingsString(AppConfig.PREF_MUX_XUDP_QUIC, "reject") if (protocol.equals(EConfigType.VLESS.name, true) && outbound.settings?.flow?.isNotEmpty() == true) { outbound.mux?.concurrency = -1 @@ -667,7 +667,7 @@ object CoreOutboundBuilder { } val domain = HttpUtil.toIdnDomain(profileItem.server.orEmpty()) - if (MmkvManager.decodeSettingsString(AppConfig.PREF_OUTBOUND_DOMAIN_RESOLVE_METHOD, "1") != "2") { + if (MmkvManager.decodeSettingsString(AppConfig.PREF_OUTBOUND_DOMAIN_RESOLVE_METHOD, AppConfig.DEFAULT_OUTBOUND_DOMAIN_RESOLVE_METHOD) != "2") { return domain } //Resolve and replace domain 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 f4cd34a6..af125146 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 @@ -176,7 +176,7 @@ object SettingsManager { * @return True if bypassing LAN, false otherwise. */ fun routingRulesetsBypassLan(): Boolean { - val vpnBypassLan = MmkvManager.decodeSettingsString(AppConfig.PREF_VPN_BYPASS_LAN) ?: "1" + val vpnBypassLan = MmkvManager.decodeSettingsString(AppConfig.PREF_VPN_BYPASS_LAN, AppConfig.DEFAULT_VPN_BYPASS_LAN) if (vpnBypassLan == "1") { return true } else if (vpnBypassLan == "2") { @@ -467,7 +467,7 @@ object SettingsManager { ensureDefaultValue(AppConfig.PREF_IP_API_URL, AppConfig.IP_API_URL) ensureDefaultValue(AppConfig.PREF_HEV_TUNNEL_RW_TIMEOUT, AppConfig.HEVTUN_RW_TIMEOUT) ensureDefaultValue(AppConfig.PREF_MUX_CONCURRENCY, "8") - ensureDefaultValue(AppConfig.PREF_MUX_XUDP_CONCURRENCY, "8") + ensureDefaultValue(AppConfig.PREF_MUX_XUDP_CONCURRENCY, AppConfig.DEFAULT_MUX_XUDP_CONCURRENCY) ensureDefaultValue(AppConfig.PREF_FRAGMENT_LENGTH, "50-100") ensureDefaultValue(AppConfig.PREF_FRAGMENT_INTERVAL, "10-20") ensureDefaultValue(AppConfig.PREF_FRAGMENT_MAXSPLIT, "10") diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/service/TProxyService.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/service/TProxyService.kt index 2505859a..a8b2da85 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/service/TProxyService.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/service/TProxyService.kt @@ -97,7 +97,7 @@ class TProxyService( appendLine("misc:") appendLine(" tcp-read-write-timeout: ${tcpTimeout * 1000}") appendLine(" udp-read-write-timeout: ${udpTimeout * 1000}") - appendLine(" log-level: ${MmkvManager.decodeSettingsString(AppConfig.PREF_HEV_TUNNEL_LOGLEVEL) ?: "warn"}") + appendLine(" log-level: ${MmkvManager.decodeSettingsString(AppConfig.PREF_HEV_TUNNEL_LOGLEVEL, AppConfig.DEFAULT_HEV_TUNNEL_LOGLEVEL)}") } } diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/settings/SettingsActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/settings/SettingsActivity.kt index b31a19fb..a65d2fa7 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/settings/SettingsActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/settings/SettingsActivity.kt @@ -118,13 +118,13 @@ fun SettingsScreen( var fakeDns by rememberMmkvBool(AppConfig.PREF_FAKE_DNS_ENABLED, false) var appendHttpProxy by rememberMmkvBool(AppConfig.PREF_APPEND_HTTP_PROXY, false) var vpnDns by rememberMmkvString(AppConfig.PREF_VPN_DNS, "") - var vpnBypassLan by rememberMmkvString(AppConfig.PREF_VPN_BYPASS_LAN, "0") + var vpnBypassLan by rememberMmkvString(AppConfig.PREF_VPN_BYPASS_LAN, AppConfig.DEFAULT_VPN_BYPASS_LAN) var vpnInterfaceAddress by rememberMmkvString(AppConfig.PREF_VPN_INTERFACE_ADDRESS_CONFIG_INDEX, "0") var vpnMtu by rememberMmkvString(AppConfig.PREF_VPN_MTU, "") var mux by rememberMmkvBool(AppConfig.PREF_MUX_ENABLED, false) var muxConcurrency by rememberMmkvString(AppConfig.PREF_MUX_CONCURRENCY, "8") - var muxXudpConcurrency by rememberMmkvString(AppConfig.PREF_MUX_XUDP_CONCURRENCY, "8") + var muxXudpConcurrency by rememberMmkvString(AppConfig.PREF_MUX_XUDP_CONCURRENCY, AppConfig.DEFAULT_MUX_XUDP_CONCURRENCY) var muxXudpQuic by rememberMmkvString(AppConfig.PREF_MUX_XUDP_QUIC, "reject") var fragment by rememberMmkvBool(AppConfig.PREF_FRAGMENT_ENABLED, false) @@ -142,7 +142,7 @@ fun SettingsScreen( var enableRootMode by rememberMmkvBool(AppConfig.PREF_ROOT_MODE_ENABLE, false) var lanSharing by rememberMmkvBool(AppConfig.PREF_ROOT_LAN_SHARING, false) - var hevTunLogLevel by rememberMmkvString(AppConfig.PREF_HEV_TUNNEL_LOGLEVEL, "warning") + var hevTunLogLevel by rememberMmkvString(AppConfig.PREF_HEV_TUNNEL_LOGLEVEL, AppConfig.DEFAULT_HEV_TUNNEL_LOGLEVEL) var hevTunRwTimeout by rememberMmkvString(AppConfig.PREF_HEV_TUNNEL_RW_TIMEOUT, "") var useHevTun by rememberMmkvBool(AppConfig.PREF_USE_HEV_TUNNEL, true) @@ -151,7 +151,7 @@ fun SettingsScreen( var dynamicSocksPort by rememberMmkvBool(AppConfig.PREF_DYNAMIC_SOCKS_PORT, false) var socksUsername by rememberMmkvString(AppConfig.PREF_SOCKS_USERNAME, "") var socksPassword by rememberMmkvString(AppConfig.PREF_SOCKS_PASSWORD, "") - var socksEnableUdp by rememberMmkvBool(AppConfig.PREF_SOCKS_ENABLE_UDP, false) + var socksEnableUdp by rememberMmkvBool(AppConfig.PREF_SOCKS_ENABLE_UDP, AppConfig.DEFAULT_SOCKS_ENABLE_UDP) var proxySharing by rememberMmkvBool(AppConfig.PREF_PROXY_SHARING, false) var speedEnabled by rememberMmkvBool(AppConfig.PREF_SPEED_ENABLED, false) @@ -174,7 +174,7 @@ fun SettingsScreen( var domesticDns by rememberMmkvString(AppConfig.PREF_DOMESTIC_DNS, "") var dnsHosts by rememberMmkvString(AppConfig.PREF_DNS_HOSTS, "") var coreLogLevel by rememberMmkvString(AppConfig.PREF_LOGLEVEL, "warning") - var outboundResolveMethod by rememberMmkvString(AppConfig.PREF_OUTBOUND_DOMAIN_RESOLVE_METHOD, "0") + var outboundResolveMethod by rememberMmkvString(AppConfig.PREF_OUTBOUND_DOMAIN_RESOLVE_METHOD, AppConfig.DEFAULT_OUTBOUND_DOMAIN_RESOLVE_METHOD) var isBooted by rememberMmkvBool(AppConfig.PREF_IS_BOOTED, false) var delayTestUrl by rememberMmkvString(AppConfig.PREF_DELAY_TEST_URL, "") @@ -185,7 +185,7 @@ fun SettingsScreen( val hevTunEnabled = isVpn && useHevTun val localProxyForced = hevTunEnabled val effectiveLocalProxy = enableLocalProxy || localProxyForced - val muxXudpConcurrencyInt = muxXudpConcurrency.toIntOrNull() ?: 8 + val muxXudpConcurrencyInt = muxXudpConcurrency.toIntOrNull() ?: AppConfig.DEFAULT_MUX_XUDP_CONCURRENCY.toInt() val dynamicColorSupported = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S LaunchedEffect(dynamicColorSupported) { diff --git a/V2rayNG/app/src/main/res/values-ar/strings.xml b/V2rayNG/app/src/main/res/values-ar/strings.xml index f4ea53c2..0582cfd0 100644 --- a/V2rayNG/app/src/main/res/values-ar/strings.xml +++ b/V2rayNG/app/src/main/res/values-ar/strings.xml @@ -100,8 +100,8 @@ Reserved (اختياري، مفصول بفواصل) العنوان المحلي (اختياري IPv4/IPv6، مفصولة بفواصل) MTU (اختياري، الافتراضي 1420) - mKCP MTU (اختياري، الافتراضي في النواة 1350) - mKCP TTI (اختياري، الافتراضي في النواة 50) + mKCP MTU (اختياري، الافتراضي 1350) + mKCP TTI (اختياري، الافتراضي 50 مللي ثانية) نجاح فشل لا يوجد شيء diff --git a/V2rayNG/app/src/main/res/values-bn/strings.xml b/V2rayNG/app/src/main/res/values-bn/strings.xml index 425e5a50..b2dd61d4 100644 --- a/V2rayNG/app/src/main/res/values-bn/strings.xml +++ b/V2rayNG/app/src/main/res/values-bn/strings.xml @@ -100,8 +100,8 @@ Reserved (ঐচ্ছিক, কমা দিয়ে পৃথক) স্থানীয় ঠিকানা (ঐচ্ছিক IPv4/IPv6, কমা দ্বারা পৃথক করা) MTU (ঐচ্ছিক, ডিফল্ট 1420) - mKCP MTU (ঐচ্ছিক, কোর ডিফল্ট 1350) - mKCP TTI (ঐচ্ছিক, কোর ডিফল্ট 50) + mKCP MTU (ঐচ্ছিক, ডিফল্ট 1350) + mKCP TTI (ঐচ্ছিক, ডিফল্ট 50 মিলিসেকেন্ড) সফল ব্যর্থ কোনও তথ্য নেই diff --git a/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml b/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml index 6c8ebc8d..d1deb211 100644 --- a/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml +++ b/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml @@ -100,8 +100,8 @@ Reserved(اختیاری، وا کاما (,) ز یک جوڌا ابۊن) نشۊوی محلی (اختیاری IPv4/IPv6، وا کاما (,) ز یک جوڌا ابۊن) MTU(اختیاری، پؽش فرض 1420) - mKCP MTU (اختیاری، پؽش فرض هسته 1350) - mKCP TTI (اختیاری، پؽش فرض هسته 50) + mKCP MTU (اختیاری، پؽش فرض 1350) + mKCP TTI (اختیاری، پؽش فرض 50 میلی‌ثانیه) وا مووفقیت ٱنجوم وابی شکست خرد هیچ داڌه ای وۊجۊڌ نڌاره diff --git a/V2rayNG/app/src/main/res/values-fa/strings.xml b/V2rayNG/app/src/main/res/values-fa/strings.xml index a9e3773a..f5db2f9c 100644 --- a/V2rayNG/app/src/main/res/values-fa/strings.xml +++ b/V2rayNG/app/src/main/res/values-fa/strings.xml @@ -100,8 +100,8 @@ Reserved (اختیاری، جدا شده با کاما) آدرس محلی (IPv4/IPv6 اختیاری، جدا شده با کاما) MTU (اختیاری، پیش‌فرض 1420) - mKCP MTU (اختیاری، پیش‌فرض هسته 1350) - mKCP TTI (اختیاری، پیش‌فرض هسته 50) + mKCP MTU (اختیاری، پیش‌فرض 1350) + mKCP TTI (اختیاری، پیش‌فرض 50 میلی‌ثانیه) موفقیت‌آمیز شکست! داده‌ای یافت نشد diff --git a/V2rayNG/app/src/main/res/values-ru/strings.xml b/V2rayNG/app/src/main/res/values-ru/strings.xml index a0ab82c8..3f3d9007 100644 --- a/V2rayNG/app/src/main/res/values-ru/strings.xml +++ b/V2rayNG/app/src/main/res/values-ru/strings.xml @@ -101,7 +101,7 @@ Локальный адрес (необязательно, IPv4/IPv6 через запятую) MTU (необязательно, по умолчанию 1420) mKCP MTU (необязательно, по умолчанию 1350) - mKCP TTI (необязательно, по умолчанию 50) + mKCP TTI (необязательно, по умолчанию 50 мс) Успешно Ошибка Ничего нет diff --git a/V2rayNG/app/src/main/res/values-vi/strings.xml b/V2rayNG/app/src/main/res/values-vi/strings.xml index 9019a31c..4e7f3d4f 100644 --- a/V2rayNG/app/src/main/res/values-vi/strings.xml +++ b/V2rayNG/app/src/main/res/values-vi/strings.xml @@ -100,8 +100,8 @@ Reserved (không bắt buộc, phân cách bằng dấu phẩy) Địa chỉ cục bộ (IPv4/IPv6 không bắt buộc, phân cách bằng dấu phẩy) MTU (không bắt buộc, mặc định 1420) - mKCP MTU (không bắt buộc, mặc định của core là 1350) - mKCP TTI (không bắt buộc, mặc định của core là 50) + mKCP MTU (không bắt buộc, mặc định 1350) + mKCP TTI (không bắt buộc, mặc định 50 ms) Thành công! Đã xảy ra lỗi, vui lòng thử lại! Không có gì ở đây! diff --git a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml index db7a47d8..3e375eff 100644 --- a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml @@ -100,8 +100,8 @@ Reserved (可选,逗号隔开) 本地地址 (可选 IPv4/IPv6,逗号隔开) MTU(可选,默认 1420) - mKCP MTU(可选,核心默认 1350) - mKCP TTI(可选,核心默认 50) + mKCP MTU(可选,默认 1350) + mKCP TTI(可选,默认 50 毫秒) 成功 失败 没有数据 diff --git a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml index 8dc868d8..28d861f3 100644 --- a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml @@ -100,8 +100,8 @@ Reserved (可選,逗號隔開) 本機位址 (可選 IPv4/IPv6,逗號隔開) MTU(可選,預設 1420) - mKCP MTU(可選,核心預設 1350) - mKCP TTI(可選,核心預設 50) + mKCP MTU(可選,預設 1350) + mKCP TTI(可選,預設 50 毫秒) 成功 失敗 無資料 diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml index fe3da122..0abb4e03 100644 --- a/V2rayNG/app/src/main/res/values/strings.xml +++ b/V2rayNG/app/src/main/res/values/strings.xml @@ -100,8 +100,8 @@ Reserved (optional, separated by commas) Local address (optional IPv4/IPv6, separated by commas) MTU (optional, default 1420) - mKCP MTU (optional, core default 1350) - mKCP TTI (optional, core default 50) + mKCP MTU (optional, default 1350) + mKCP TTI (optional, default 50 ms) Success Failure No data available