From 140c236da56244a3d727173b1d5dfa97b7d16060 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Thu, 19 Dec 2024 20:57:24 +0800 Subject: [PATCH] =?UTF-8?q?Add=20DNS=20hosts=20(Format:=20domain:address,?= =?UTF-8?q?=E2=80=A6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://github.com/2dust/v2rayNG/issues/4147 --- .../src/main/java/com/v2ray/ang/AppConfig.kt | 1 + .../v2ray/ang/handler/V2rayConfigManager.kt | 21 ++++++++++++++++--- .../java/com/v2ray/ang/ui/SettingsActivity.kt | 7 +++++++ .../v2ray/ang/viewmodel/SettingsViewModel.kt | 1 + .../app/src/main/res/values-ar/strings.xml | 3 +++ .../app/src/main/res/values-bn/strings.xml | 3 +++ .../src/main/res/values-bqi-rIR/strings.xml | 3 +++ .../app/src/main/res/values-fa/strings.xml | 3 +++ .../app/src/main/res/values-ru/strings.xml | 3 +++ .../app/src/main/res/values-vi/strings.xml | 3 +++ .../src/main/res/values-zh-rCN/strings.xml | 3 +++ .../src/main/res/values-zh-rTW/strings.xml | 4 ++-- V2rayNG/app/src/main/res/values/strings.xml | 3 +++ .../app/src/main/res/xml/pref_settings.xml | 5 +++++ 14 files changed, 58 insertions(+), 5 deletions(-) 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 5b262fd1..82e8867f 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt @@ -50,6 +50,7 @@ object AppConfig { const val PREF_SOCKS_PORT = "pref_socks_port" const val PREF_REMOTE_DNS = "pref_remote_dns" const val PREF_DOMESTIC_DNS = "pref_domestic_dns" + const val PREF_DNS_HOSTS = "pref_dns_hosts" const val PREF_DELAY_TEST_URL = "pref_delay_test_url" const val PREF_LOGLEVEL = "pref_core_loglevel" const val PREF_MODE = "pref_mode" 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 6e3799c6..1906c3e9 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 @@ -39,6 +39,7 @@ import com.v2ray.ang.dto.ProfileItem import com.v2ray.ang.dto.RulesetItem import com.v2ray.ang.dto.V2rayConfig import com.v2ray.ang.dto.V2rayConfig.RoutingBean.RulesBean +import com.v2ray.ang.extension.isNotNullEmpty import com.v2ray.ang.fmt.HttpFmt import com.v2ray.ang.fmt.Hysteria2Fmt import com.v2ray.ang.fmt.ShadowsocksFmt @@ -333,7 +334,7 @@ object V2rayConfigManager { remoteDns.forEach { servers.add(it) } - if (proxyDomain.size > 0) { + if (proxyDomain.isNotEmpty()) { servers.add( V2rayConfig.DnsBean.ServersBean( address = remoteDns.first(), @@ -347,7 +348,7 @@ object V2rayConfigManager { val directDomain = userRule2Domain(TAG_DIRECT) val isCnRoutingMode = directDomain.contains(GEOSITE_CN) val geoipCn = arrayListOf(GEOIP_CN) - if (directDomain.size > 0) { + if (directDomain.isNotEmpty()) { servers.add( V2rayConfig.DnsBean.ServersBean( address = domesticDns.first(), @@ -369,9 +370,23 @@ object V2rayConfigManager { ) } + //User DNS hosts + try { + val userHosts = MmkvManager.decodeSettingsString(AppConfig.PREF_DNS_HOSTS) + if (userHosts.isNotNullEmpty()) { + var userHostsMap = userHosts?.split(",") + ?.filter { it.isNotEmpty() } + ?.filter { it.contains(":") } + ?.associate { it.split(":").let { (k, v) -> k to v } } + if (userHostsMap != null) hosts.putAll(userHostsMap) + } + } catch (e: Exception) { + e.printStackTrace() + } + //block dns val blkDomain = userRule2Domain(TAG_BLOCKED) - if (blkDomain.size > 0) { + if (blkDomain.isNotEmpty()) { hosts.putAll(blkDomain.map { it to LOOPBACK }) } 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 ae6e2c22..09901948 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 @@ -60,6 +60,7 @@ class SettingsActivity : BaseActivity() { private val socksPort by lazy { findPreference(AppConfig.PREF_SOCKS_PORT) } private val remoteDns by lazy { findPreference(AppConfig.PREF_REMOTE_DNS) } private val domesticDns by lazy { findPreference(AppConfig.PREF_DOMESTIC_DNS) } + private val dnsHosts by lazy { findPreference(AppConfig.PREF_DNS_HOSTS) } private val delayTestUrl by lazy { findPreference(AppConfig.PREF_DELAY_TEST_URL) } private val mode by lazy { findPreference(AppConfig.PREF_MODE) } @@ -152,6 +153,11 @@ class SettingsActivity : BaseActivity() { domesticDns?.summary = if (nval == "") AppConfig.DNS_DIRECT else nval true } + dnsHosts?.setOnPreferenceChangeListener { _, any -> + val nval = any as String + dnsHosts?.summary = nval + true + } delayTestUrl?.setOnPreferenceChangeListener { _, any -> val nval = any as String delayTestUrl?.summary = if (nval == "") AppConfig.DelayTestUrl else nval @@ -194,6 +200,7 @@ class SettingsActivity : BaseActivity() { socksPort?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_SOCKS_PORT, AppConfig.PORT_SOCKS) remoteDns?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_REMOTE_DNS, AppConfig.DNS_PROXY) domesticDns?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_DOMESTIC_DNS, AppConfig.DNS_DIRECT) + dnsHosts?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_DNS_HOSTS) delayTestUrl?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_DELAY_TEST_URL, AppConfig.DelayTestUrl) initSharedPreference() diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt index 8dc50d58..b0533f02 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt @@ -31,6 +31,7 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application AppConfig.PREF_VPN_DNS, AppConfig.PREF_REMOTE_DNS, AppConfig.PREF_DOMESTIC_DNS, + AppConfig.PREF_DNS_HOSTS, AppConfig.PREF_DELAY_TEST_URL, AppConfig.PREF_LOCAL_DNS_PORT, AppConfig.PREF_SOCKS_PORT, diff --git a/V2rayNG/app/src/main/res/values-ar/strings.xml b/V2rayNG/app/src/main/res/values-ar/strings.xml index 90971ed3..e2bbb68d 100644 --- a/V2rayNG/app/src/main/res/values-ar/strings.xml +++ b/V2rayNG/app/src/main/res/values-ar/strings.xml @@ -180,6 +180,9 @@ DNS المحلي (اختياري) DNS + DNS hosts (Format: domain:address,…) + domain:address,… + True delay test url (http/https) Url diff --git a/V2rayNG/app/src/main/res/values-bn/strings.xml b/V2rayNG/app/src/main/res/values-bn/strings.xml index 8fa5e255..59e68679 100644 --- a/V2rayNG/app/src/main/res/values-bn/strings.xml +++ b/V2rayNG/app/src/main/res/values-bn/strings.xml @@ -180,6 +180,9 @@ ঘরোয়া DNS (ঐচ্ছিক) DNS + DNS hosts (Format: domain:address,…) + domain:address,… + সঠিক বিলম্ব পরীক্ষা ইউআরএল (http/https) ইউআরএল 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 df25e71a..4c4b840f 100644 --- a/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml +++ b/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml @@ -180,6 +180,9 @@ DNS منی (اختیاری) DNS + DNS hosts (Format: domain:address,…) + domain:address,… + آدرس اینترنتی آزمایش تئخیر واقعی (http/https) نشۊوی اینترنتی diff --git a/V2rayNG/app/src/main/res/values-fa/strings.xml b/V2rayNG/app/src/main/res/values-fa/strings.xml index 5edd0074..bf6dd89b 100644 --- a/V2rayNG/app/src/main/res/values-fa/strings.xml +++ b/V2rayNG/app/src/main/res/values-fa/strings.xml @@ -178,6 +178,9 @@ DNS داخلی (اختیاری) DNS + DNS hosts (Format: domain:address,…) + domain:address,… + آدرس اینترنتی آزمایش تاخیر واقعی کانفیگ ها (HTTP/HTTPS) URL diff --git a/V2rayNG/app/src/main/res/values-ru/strings.xml b/V2rayNG/app/src/main/res/values-ru/strings.xml index 50ce5310..b04d6ab8 100644 --- a/V2rayNG/app/src/main/res/values-ru/strings.xml +++ b/V2rayNG/app/src/main/res/values-ru/strings.xml @@ -179,6 +179,9 @@ Внутренняя DNS (необязательно) DNS + DNS hosts (Format: domain:address,…) + domain:address,… + Сервис проверки времени отклика (HTTP/HTTPS) URL diff --git a/V2rayNG/app/src/main/res/values-vi/strings.xml b/V2rayNG/app/src/main/res/values-vi/strings.xml index 66528e36..c7cd80e4 100644 --- a/V2rayNG/app/src/main/res/values-vi/strings.xml +++ b/V2rayNG/app/src/main/res/values-vi/strings.xml @@ -179,6 +179,9 @@ DNS nội địa (Không bắt buộc) DNS + DNS hosts (Format: domain:address,…) + domain:address,… + URL kiểm tra độ trễ thực (HTTP / HTTPS) URL 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 e16e58a2..d0f3df99 100644 --- a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml @@ -176,6 +176,9 @@ 境内DNS (可选) DNS + DNS hosts (格式: 域名:地址,…) + domain:address,… + 真连接延迟测试网址 (http/https) Url 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 8f728f79..b4305157 100644 --- a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml @@ -175,8 +175,8 @@ VPN DNS (僅支援 IPv4/v6) - 國內 DNS (可選) - DNS + DNS hosts (格式: 網域:位址,…) + domain:address,… 真連線延遲測試網址 (http/https) Url diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml index 708f98e2..7f0ca85c 100644 --- a/V2rayNG/app/src/main/res/values/strings.xml +++ b/V2rayNG/app/src/main/res/values/strings.xml @@ -182,6 +182,9 @@ Domestic DNS (Optional) DNS + DNS hosts (Format: domain:address,…) + domain:address,… + True delay test url (http/https) Url diff --git a/V2rayNG/app/src/main/res/xml/pref_settings.xml b/V2rayNG/app/src/main/res/xml/pref_settings.xml index 7821c112..f4cd7577 100644 --- a/V2rayNG/app/src/main/res/xml/pref_settings.xml +++ b/V2rayNG/app/src/main/res/xml/pref_settings.xml @@ -190,6 +190,11 @@ android:summary="@string/summary_pref_domestic_dns" android:title="@string/title_pref_domestic_dns" /> + +