From 23e9d7fde54b415a9e3212027c4dd6678adb30b3 Mon Sep 17 00:00:00 2001 From: yuhan6665 <1588741+yuhan6665@users.noreply.github.com> Date: Sun, 5 Nov 2023 14:21:35 -0500 Subject: [PATCH] Add menu options for Mux --- .../main/kotlin/com/v2ray/ang/AppConfig.kt | 3 + .../kotlin/com/v2ray/ang/dto/V2rayConfig.kt | 5 +- .../com/v2ray/ang/ui/SettingsActivity.kt | 34 ++++++++- .../com/v2ray/ang/util/V2rayConfigUtil.kt | 13 +++- .../v2ray/ang/viewmodel/SettingsViewModel.kt | 9 ++- .../app/src/main/res/values-ar/strings.xml | 9 ++- .../app/src/main/res/values-fa/strings.xml | 9 ++- .../app/src/main/res/values-ru/strings.xml | 9 ++- .../app/src/main/res/values-vi/strings.xml | 10 ++- .../src/main/res/values-zh-rCN/strings.xml | 11 ++- .../src/main/res/values-zh-rTW/strings.xml | 11 ++- V2rayNG/app/src/main/res/values/arrays.xml | 6 ++ V2rayNG/app/src/main/res/values/strings.xml | 9 ++- .../app/src/main/res/xml/pref_settings.xml | 75 +++++++++++-------- 14 files changed, 168 insertions(+), 45 deletions(-) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AppConfig.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AppConfig.kt index 1dfa3b2b..ee5d58ff 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AppConfig.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AppConfig.kt @@ -40,6 +40,9 @@ object AppConfig { const val PREF_BYPASS_APPS = "pref_bypass_apps" const val PREF_CONFIRM_REMOVE = "pref_confirm_remove" const val PREF_START_SCAN_IMMEDIATE = "pref_start_scan_immediate" + const val PREF_MUX_ENABLED = "pref_mux_enabled" + const val PREF_MUX_XUDP_CONCURRENCY = "pref_mux_xudp_concurency" + const val PREF_MUX_XUDP_QUIC = "pref_mux_xudp_quic" const val HTTP_PROTOCOL: String = "http://" const val HTTPS_PROTOCOL: String = "https://" diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt index cc46410a..a97ee012 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt @@ -292,7 +292,10 @@ data class V2rayConfig( } } - data class MuxBean(var enabled: Boolean, var concurrency: Int = 8) + data class MuxBean(var enabled: Boolean, + var concurrency: Int = 8, + var xudpConcurrency: Int = 8, + var xudpProxyUDP443: String = "",) fun getServerAddress(): String? { if (protocol.equals(EConfigType.VMESS.name, true) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt index 06569046..b07d5c7a 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt @@ -29,6 +29,10 @@ class SettingsActivity : BaseActivity() { private val fakeDns by lazy { findPreference(AppConfig.PREF_FAKE_DNS_ENABLED) } private val localDnsPort by lazy { findPreference(AppConfig.PREF_LOCAL_DNS_PORT) } private val vpnDns by lazy { findPreference(AppConfig.PREF_VPN_DNS) } + private val mux by lazy { findPreference(AppConfig.PREF_MUX_ENABLED) } + private val muxXudpConcurrency by lazy { findPreference(AppConfig.PREF_MUX_XUDP_CONCURRENCY) } + private val muxXudpQuic by lazy { findPreference(AppConfig.PREF_MUX_XUDP_QUIC) } + // val autoRestart by lazy { findPreference(PREF_AUTO_RESTART) as CheckBoxPreference } private val remoteDns by lazy { findPreference(AppConfig.PREF_REMOTE_DNS) } private val domesticDns by lazy { findPreference(AppConfig.PREF_DOMESTIC_DNS) } @@ -119,6 +123,14 @@ class SettingsActivity : BaseActivity() { } mode?.dialogLayoutResource = R.layout.preference_with_help_link //loglevel.summary = "LogLevel" + mux?.setOnPreferenceChangeListener { _, newValue -> + updateMux(newValue as Boolean) + true + } + muxXudpConcurrency?.setOnPreferenceChangeListener { _, newValue -> + updateMuxConcurrency(newValue as String) + true + } } override fun onStart() { @@ -127,10 +139,11 @@ class SettingsActivity : BaseActivity() { updateMode(defaultSharedPreferences.getString(AppConfig.PREF_MODE, "VPN")) var remoteDnsString = defaultSharedPreferences.getString(AppConfig.PREF_REMOTE_DNS, "") domesticDns?.summary = defaultSharedPreferences.getString(AppConfig.PREF_DOMESTIC_DNS, "") - localDnsPort?.summary = defaultSharedPreferences.getString(AppConfig.PREF_LOCAL_DNS_PORT, AppConfig.PORT_LOCAL_DNS) socksPort?.summary = defaultSharedPreferences.getString(AppConfig.PREF_SOCKS_PORT, AppConfig.PORT_SOCKS) httpPort?.summary = defaultSharedPreferences.getString(AppConfig.PREF_HTTP_PORT, AppConfig.PORT_HTTP) + updateMux(defaultSharedPreferences.getBoolean(AppConfig.PREF_MUX_ENABLED, false)) + muxXudpConcurrency?.summary = defaultSharedPreferences.getString(AppConfig.PREF_MUX_XUDP_CONCURRENCY, "8") if (TextUtils.isEmpty(remoteDnsString)) { remoteDnsString = AppConfig.DNS_AGENT @@ -172,6 +185,25 @@ class SettingsActivity : BaseActivity() { localDnsPort?.isEnabled = enabled vpnDns?.isEnabled = !enabled } + + private fun updateMux(enabled: Boolean) { + val defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity()) + muxXudpConcurrency?.isEnabled = enabled + muxXudpQuic?.isEnabled = enabled + if (enabled) { + updateMuxConcurrency(defaultSharedPreferences.getString(AppConfig.PREF_MUX_XUDP_CONCURRENCY, "8")) + } + } + + private fun updateMuxConcurrency(value: String?) { + if (value == null) { + muxXudpQuic?.isEnabled = true + } else { + val concurrency = value.toIntOrNull() ?: 8 + muxXudpConcurrency?.summary = concurrency.toString() + muxXudpQuic?.isEnabled = concurrency >= 0 + } + } } fun onModeHelpClicked(view: View) { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt index a16027b0..b8cf2f54 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt @@ -64,7 +64,7 @@ object V2rayConfigUtil { inbounds(v2rayConfig) - httpRequestObject(outbound) + updateOutboundWithGlobalSettings(outbound) v2rayConfig.outbounds[0] = outbound @@ -399,8 +399,17 @@ object V2rayConfigUtil { return true } - private fun httpRequestObject(outbound: V2rayConfig.OutboundBean): Boolean { + private fun updateOutboundWithGlobalSettings(outbound: V2rayConfig.OutboundBean): Boolean { try { + if (settingsStorage?.decodeBool(AppConfig.PREF_MUX_ENABLED) == true) { + outbound.mux?.enabled = true + outbound.mux?.concurrency = 8 + outbound.mux?.xudpConcurrency = settingsStorage?.decodeInt(AppConfig.PREF_MUX_XUDP_CONCURRENCY) ?: 8 + outbound.mux?.xudpProxyUDP443 = settingsStorage?.decodeString(AppConfig.PREF_MUX_XUDP_QUIC) ?: "reject" + } else { + outbound.mux?.enabled = false + } + if (outbound.streamSettings?.network == DEFAULT_NETWORK && outbound.streamSettings?.tcpSettings?.header?.type == HTTP) { val path = outbound.streamSettings?.tcpSettings?.header?.request?.path diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/SettingsViewModel.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/SettingsViewModel.kt index d2c7e913..0d34c0bb 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/SettingsViewModel.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/SettingsViewModel.kt @@ -39,7 +39,8 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application AppConfig.PREF_ROUTING_MODE, AppConfig.PREF_V2RAY_ROUTING_AGENT, AppConfig.PREF_V2RAY_ROUTING_BLOCKED, - AppConfig.PREF_V2RAY_ROUTING_DIRECT, -> { + AppConfig.PREF_V2RAY_ROUTING_DIRECT, + AppConfig.PREF_MUX_XUDP_QUIC, -> { settingsStorage?.encode(key, sharedPreferences.getString(key, "")) } AppConfig.PREF_SPEED_ENABLED, @@ -51,12 +52,16 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application AppConfig.PREF_PER_APP_PROXY, AppConfig.PREF_BYPASS_APPS, AppConfig.PREF_CONFIRM_REMOVE, - AppConfig.PREF_START_SCAN_IMMEDIATE, -> { + AppConfig.PREF_START_SCAN_IMMEDIATE, + AppConfig.PREF_MUX_ENABLED, -> { settingsStorage?.encode(key, sharedPreferences.getBoolean(key, false)) } AppConfig.PREF_SNIFFING_ENABLED -> { settingsStorage?.encode(key, sharedPreferences.getBoolean(key, true)) } + AppConfig.PREF_MUX_XUDP_CONCURRENCY -> { + settingsStorage?.encode(key, sharedPreferences.getString(key, "8")?.toIntOrNull() ?: 8) + } AppConfig.PREF_PER_APP_PROXY_SET -> { settingsStorage?.encode(key, sharedPreferences.getStringSet(key, setOf())) } diff --git a/V2rayNG/app/src/main/res/values-ar/strings.xml b/V2rayNG/app/src/main/res/values-ar/strings.xml index 77547473..e4473a13 100644 --- a/V2rayNG/app/src/main/res/values-ar/strings.xml +++ b/V2rayNG/app/src/main/res/values-ar/strings.xml @@ -97,7 +97,14 @@ وكيل لكل تطبيق عام: التطبيق المحدد هو الوكيل، الاتصال غير المحدد مباشر؛ \nوضع التجاوز: التطبيق المحدد متصل مباشرة، الوكيل غير المحدد. \nالخيار لتحديد التطبيق الوكيل تلقائيا في القائمة تمكين Mux - التمكين قد يسرع الشبكة والتبديل بين الشبكات قد يكون فلاش + حركة مرور TCP مع 8 اتصالات افتراضية، قم بتخصيص كيفية التعامل مع UDP وQUIC أدناهn\أسرع، لكنه قد يسبب اتصالاً غير مستقر + اتصالات XUDP (النطاق من -1 إلى 1024) + التعامل مع QUIC في نفق مكس + + يرفض + مسموح + يتخطى + تمكين عرض السرعة عرض السرعة الحالية في الإشعار.\nسيتغير رمز الإشعار استنادًا إلى الاستخدام. تمكين Sniffing diff --git a/V2rayNG/app/src/main/res/values-fa/strings.xml b/V2rayNG/app/src/main/res/values-fa/strings.xml index a0be571f..5b1331a8 100644 --- a/V2rayNG/app/src/main/res/values-fa/strings.xml +++ b/V2rayNG/app/src/main/res/values-fa/strings.xml @@ -98,7 +98,14 @@ عمومی: برنامه بررسی شده پروکسی است، اتصال مستقیم بدون بررسی است. \nحالت bypass: برنامه بررسی شده مستقیما متصل است، پراکسی بررسی نشده است. \nگزینه‌ای برای انتخاب خودکار پروکسی برنامه در منو است فعال کردن Mux - فعال کردن شاید سرعت بخشیدن به شبکه و تغییر شبکه شاید فلش، بهبود کند + سریعتر است، اما ممکن است باعث اتصال ناپایدار شود\nمخزن ترافیک TCP با 8 اتصال پیش‌فرض، نحوه مدیریت UDP و QUIC را در زیر سفارشی کنید + اتصالات XUDP (محدوده -1 تا 1024) + مدیریت QUIC در تونل mux + + رد کردن + مجاز + جست و خیز کردن + فعال کردن نمایش سرعت نمایش سرعت فعلی در قسمت آگاه‌سازی. \nآیکون آگاه‌سازی بر اساس استفاده تغییر می‌کند. diff --git a/V2rayNG/app/src/main/res/values-ru/strings.xml b/V2rayNG/app/src/main/res/values-ru/strings.xml index 7592c653..efc771cf 100644 --- a/V2rayNG/app/src/main/res/values-ru/strings.xml +++ b/V2rayNG/app/src/main/res/values-ru/strings.xml @@ -103,7 +103,14 @@ Основной: выделенное приложение соединяется через прокси, не выделенное — напрямую; \n\nРежим обхода: выделенное приложение соединяется напрямую, не выделенное — через прокси.\n\nЕсть возможность автоматического выбора проксируемых приложений в меню. Использовать мультиплексирование - Включение может ускорить работу и переключение сети + Быстрее, но это может привести к нестабильному соединению\nМультиплексор TCP-трафика с 8 соединениями по умолчанию, ниже можно настроить обработку UDP и QUIC. + XUDP-соединения (диапазон от -1 до 1024) + Обработка QUIC в мультиплексорном туннеле + + отклонять + допустимый + пропускать + Отображение скорости Показывать текущую скорость в уведомлении.\nЗначок будет меняться в зависимости от использования. diff --git a/V2rayNG/app/src/main/res/values-vi/strings.xml b/V2rayNG/app/src/main/res/values-vi/strings.xml index 65184899..d2399c78 100644 --- a/V2rayNG/app/src/main/res/values-vi/strings.xml +++ b/V2rayNG/app/src/main/res/values-vi/strings.xml @@ -97,7 +97,15 @@ - Chung: Ứng dụng đã chọn sẽ kết nối Proxy, chưa lựa chọn sẽ kết nối trực tiếp. \n- Bỏ qua kết nối: Ứng dụng được chọn sẽ trực tiếp kết nối, không lựa chọn sẽ kết nối qua Proxy. \n- Lựa chọn để tự động chọn ứng dụng Proxy trong Menu. Cho phép Mux - Bật lên có thể làm tăng tốc độ mạng và chuyển mạng nhanh hơn. + Nhanh hơn nhưng có thể khiến kết nối không ổn định\nMux lưu lượng TCP với 8 kết nối mặc định, tùy chỉnh cách xử lý UDP và QUIC bên dưới + Kết nối XUDP (phạm vi -1 đến 1024) + Xử lý QUIC trong đường hầm mux + + từ chối + cho phép + nhảy + + Cho phép hiển thị tốc độ mạng Hiển thị tốc độ mạng hiện tại trên thanh thông báo.\nBiểu tượng trên thanh trạng thái có thể thay đổi tùy vào mức sử dụng. 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 c86b8a7c..346ea0b6 100644 --- a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml @@ -96,8 +96,15 @@ 分应用代理 常规:勾选的App被代理,未勾选的直连;\n绕行模式:勾选的App直连,未勾选的被代理.\n不明白者在菜单中选择自动选中需代理应用 - 启用Mux多路复用 - 开启可能会加速,关闭可能会减少断流 + 启用 Mux 多路复用 + 减低延时 但可能会断流\nTCP 默认复用 8 个子链接,UDP 及 QUIC 流量处理方式下方可选 + XUDP 复用子链接数(可填 -1 至 1024) + QUIC 流量处理方式 + + 不代理 + 多路复用 + 原生 + 启用速度显示 在通知中显示当前速度\n小图标显示流量的路由情况 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 07296e20..d2ff9e90 100644 --- a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml @@ -96,8 +96,15 @@ Proxy 個別應用程式 常規:勾選的 App 啟用 Proxy,未勾選的直接連線;\n繞行模式:勾選的 App 直接連線,未勾選的啟用 Proxy。\n可在選單中選擇自動選中需 Proxy 應用 - 啟用 Mux - 啟用或許會加快網路速度,切換或許會閃爍 + 啟用 Mux 多路復用 + 減低延時 但可能會斷流\nTCP 默認復用 8 個子鏈接,UDP 及 QUIC 流量處理方式下方可選 + XUDP 復用子鏈接數(可填 -1 至 1024) + QUIC 流量處理方式 + + 不代理 + 多路復用 + 原生 + 啟用速度顯示 在通知中顯示當前速度\n小圖示顯示流量的轉送狀況 diff --git a/V2rayNG/app/src/main/res/values/arrays.xml b/V2rayNG/app/src/main/res/values/arrays.xml index 48fe13f5..7a64ed02 100644 --- a/V2rayNG/app/src/main/res/values/arrays.xml +++ b/V2rayNG/app/src/main/res/values/arrays.xml @@ -179,4 +179,10 @@ fa ar + + + reject + allow + skip + diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml index eb3c42ab..218301db 100644 --- a/V2rayNG/app/src/main/res/values/strings.xml +++ b/V2rayNG/app/src/main/res/values/strings.xml @@ -103,7 +103,14 @@ General: Checked App is proxy, unchecked direct connection; \nbypass mode: checked app directly connected, unchecked proxy. \nThe option to automatically select the proxy application in the menu Enable Mux - Enable maybe speed up network and switch network maybe flash + Faster, but it may cause unstable connectivity\nTCP traffic mux with default 8 connections,customize how to handle UDP and QUIC below + XUDP connections(range -1 to 1024) + Handling of QUIC in mux tunnel + + reject + allow + skip + Enable speed display Display current speed in the notification.\nNotification icon would change based on diff --git a/V2rayNG/app/src/main/res/xml/pref_settings.xml b/V2rayNG/app/src/main/res/xml/pref_settings.xml index 660f77c7..2ab9ccf1 100644 --- a/V2rayNG/app/src/main/res/xml/pref_settings.xml +++ b/V2rayNG/app/src/main/res/xml/pref_settings.xml @@ -1,9 +1,5 @@ - + + + + + + - - - - + + + + + + + + + + + - - - - - - - - - -