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 70b966b7..5f37e276 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AppConfig.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AppConfig.kt @@ -22,6 +22,7 @@ object AppConfig { const val PREF_VPN_DNS = "pref_vpn_dns" const val PREF_REMOTE_DNS = "pref_remote_dns" const val PREF_DOMESTIC_DNS = "pref_domestic_dns" + const val PREF_LOCAL_DNS_PORT = "pref_local_dns_port" const val PREF_FORWARD_IPV6 = "pref_forward_ipv6" const val PREF_ROUTING_DOMAIN_STRATEGY = "pref_routing_domain_strategy" const val PREF_ROUTING_MODE = "pref_routing_mode" 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 c374b3b8..786dbc8b 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 @@ -4,6 +4,7 @@ import android.arch.lifecycle.ViewModelProviders import android.content.Intent import android.os.Bundle import android.support.v7.preference.* +import android.text.TextUtils import android.view.View import com.v2ray.ang.R import com.v2ray.ang.AppConfig @@ -29,6 +30,10 @@ class SettingsActivity : BaseActivity() { class SettingsFragment : PreferenceFragmentCompat() { private val perAppProxy by lazy { findPreference(AppConfig.PREF_PER_APP_PROXY) as CheckBoxPreference } + private val localDns by lazy { findPreference(AppConfig.PREF_LOCAL_DNS_ENABLED) } + 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 sppedEnabled by lazy { findPreference(AppConfig.PREF_SPEED_ENABLED) as CheckBoxPreference } private val sniffingEnabled by lazy { findPreference(AppConfig.PREF_SNIFFING_ENABLED) as CheckBoxPreference } private val proxySharing by lazy { findPreference(AppConfig.PREF_PROXY_SHARING) as CheckBoxPreference } @@ -141,9 +146,21 @@ class SettingsActivity : BaseActivity() { restartProxy() true } - + localDns?.setOnPreferenceChangeListener{ _, any -> + updateLocalDns(any as Boolean) + true + } + localDnsPort?.setOnPreferenceChangeListener { _, any -> + val nval = any as String + localDnsPort?.summary = if (TextUtils.isEmpty(nval)) "10807" else nval + true + } + vpnDns?.setOnPreferenceChangeListener { _, any -> + vpnDns?.summary = any as String + true + } mode.setOnPreferenceChangeListener { _, newValue -> - updatePerAppProxy(newValue.toString()) + updateMode(newValue.toString()) true } mode.dialogLayoutResource = R.layout.preference_with_help_link @@ -188,32 +205,43 @@ class SettingsActivity : BaseActivity() { override fun onStart() { super.onStart() val defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity) - updatePerAppProxy(defaultSharedPreferences.getString(AppConfig.PREF_MODE, "VPN")) - remoteDns.summary = defaultSharedPreferences.getString(AppConfig.PREF_REMOTE_DNS, "") + updateMode(defaultSharedPreferences.getString(AppConfig.PREF_MODE, "VPN")) + var remoteDnsString = defaultSharedPreferences.getString(AppConfig.PREF_REMOTE_DNS, "") domesticDns.summary = defaultSharedPreferences.getString(AppConfig.PREF_DOMESTIC_DNS, "") - if (remoteDns.summary == "") { - remoteDns.summary = AppConfig.DNS_AGENT + if (TextUtils.isEmpty(remoteDnsString)) { + remoteDnsString = AppConfig.DNS_AGENT } - if ( domesticDns.summary == "") { domesticDns.summary = AppConfig.DNS_DIRECT } + remoteDns.summary = remoteDnsString + vpnDns?.summary = defaultSharedPreferences.getString(AppConfig.PREF_VPN_DNS, remoteDnsString) // socksPort.summary = defaultSharedPreferences.getString(PREF_SOCKS_PORT, "10808") // lanconnPort.summary = defaultSharedPreferences.getString(PREF_HTTP_PORT, "") } - private fun updatePerAppProxy(mode: String?) { - if (mode == "VPN") { - perAppProxy.isEnabled = true - perAppProxy.isChecked = PreferenceManager.getDefaultSharedPreferences(activity) - .getBoolean(AppConfig.PREF_PER_APP_PROXY, false) - } else { - perAppProxy.isEnabled = false - perAppProxy.isChecked = false + private fun updateMode(mode: String?) { + val defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity) + val vpn = mode == "VPN" + perAppProxy.isEnabled = vpn + perAppProxy.isChecked = PreferenceManager.getDefaultSharedPreferences(activity) + .getBoolean(AppConfig.PREF_PER_APP_PROXY, false) + localDns?.isEnabled = vpn + fakeDns?.isEnabled = vpn + localDnsPort?.isEnabled = vpn + vpnDns?.isEnabled = vpn + if (vpn) { + updateLocalDns(defaultSharedPreferences.getBoolean(AppConfig.PREF_LOCAL_DNS_ENABLED, false)) } } + + private fun updateLocalDns(enabled: Boolean) { + fakeDns?.isEnabled = enabled + localDnsPort?.isEnabled = enabled + vpnDns?.isEnabled = !enabled + } } fun onModeHelpClicked(view: View) { 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 24d13e72..bfa8a8d7 100644 --- a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml @@ -76,7 +76,7 @@ 设置 进阶设置 - + VPN 设置 分应用代理 分应用代理仅支持 Android 5.0 Lollipop 及更高 @@ -87,10 +87,13 @@ 在通知中显示当前速度\n小图标显示流量的路由情况 启用流量探测 - 流量探测 + 从流量中探测域名 (默认启用) 启用本地DNS - DNS由本地设备的v2Ray-core处理(测试) + DNS 请求导入 core 由 DNS 模块处理(推荐启用 如果需要路由绕过局域网及大陆地址) + + 启用虚拟DNS + 本地返回虚构解析结果 (减低延时 但个别应用可能无法使用) IPv6 路由 转发 IPv6 流量到远程服务器(测试) @@ -107,7 +110,9 @@ 远程DNS (可选) DNS - 境内DNS (可选,本地DNS模式下生效) + VPN DNS (仅支持 IPv4/v6) + + 境内DNS (可选) DNS SOCKS5代理端口 @@ -116,6 +121,9 @@ HTTP代理端口 HTTP代理端口 + 本地DNS端口 + 本地DNS端口 + 反馈 反馈改进或漏洞至 GitHub 加入Telegram Group 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 4c6b7436..416dbf7f 100644 --- a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml @@ -77,7 +77,7 @@ 設定 進階設定 - + VPN 設定 Proxy 個別應用程式 Proxy 個別應用程式模式只支援 Android 5.0 (Lollipop) 或更高 @@ -88,10 +88,13 @@ 在通知中顯示當前速度\n小圖標顯示流量的路由情況 啟用流量探測 - 流量探測 + 從流量中探測域名 (默認啟用) 啟用本地DNS - DNS請求由本地的v2ray core處理(測試) + DNS 請求導入 core 由 DNS 模塊處理(推薦啟用 如果需要路由略過局域網及中國大陸) + + 啟用虛擬DNS + 本地返回虛構解析結果 (減低延時 但個別應用可能無法使用) IPv6 路由 向遠端重新導向 IPv6 流量(測試) @@ -108,7 +111,9 @@ 遠端DNS (可選) DNS - 境内DNS (可選,僅本地DNS模式下生效) + VPN DNS (僅支持 IPv4/v6) + + 境内DNS (可選) DNS SOCKS5代理連接埠 @@ -117,6 +122,8 @@ HTTP代理連接埠 HTTP代理連接埠 + 本地DNS端口 + 本地DNS端口 回饋 回饋提升或前往 GitHub 回報 Bug diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml index f15c8c8b..06782022 100644 --- a/V2rayNG/app/src/main/res/values/strings.xml +++ b/V2rayNG/app/src/main/res/values/strings.xml @@ -77,7 +77,7 @@ Settings Advanced Settings - + VPN Settings Per-app proxy Per-app proxy mode only support Android 5.0 Lollipop or higher @@ -89,10 +89,14 @@ usage. Enable Sniffing - Sniffing + Try sniff domain from the packet (default on) Enable local DNS - DNS processed by v2ray-core (BETA) + DNS processed by core‘s DNS module (Recommended, if need routing Bypassing LAN and + mainland address) + + Enable fake DNS + local DNS returns fake IP address (faster, but it may not work for some apps) IPv6 Route Redirect IPv6 traffic to remote (BETA) @@ -109,7 +113,9 @@ Remote DNS (Optional) DNS - Domestic DNS (Optional, effects on LocalDNS mode) + VPN DNS (only IPv4/v6) + + Domestic DNS (Optional) DNS SOCKS5 proxy port @@ -118,6 +124,9 @@ HTTP proxy port HTTP proxy port + Local DNS port + Local DNS port + Feedback Feedback enhancements or bugs to GitHub Join Telegram Group diff --git a/V2rayNG/app/src/main/res/xml/pref_settings.xml b/V2rayNG/app/src/main/res/xml/pref_settings.xml index 021594a4..7c1fe151 100644 --- a/V2rayNG/app/src/main/res/xml/pref_settings.xml +++ b/V2rayNG/app/src/main/res/xml/pref_settings.xml @@ -1,6 +1,17 @@ - + + + + + + + android:key="pref_fake_dns_enabled" + android:summary="@string/summary_pref_fake_dns_enabled" + android:title="@string/title_pref_fake_dns_enabled" /> - + - + @@ -40,6 +53,11 @@ android:summary="%s" android:title="@string/title_pref_routing_domain_strategy" /> + + - - @@ -62,19 +75,11 @@ android:title="@string/title_pref_forward_ipv6" /> - - - - + android:defaultValue="false" + android:key="pref_proxy_sharing_enabled" + android:onClick="proxySharingOnClick" + android:summary="@string/summary_pref_proxy_sharing_enabled" + android:title="@string/title_pref_proxy_sharing_enabled" /> + + + +