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 1099e6c2..b9ecf827 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt @@ -56,6 +56,7 @@ object AppConfig { 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_IP_API_URL = "pref_ip_api_url" const val PREF_LOGLEVEL = "pref_core_loglevel" const val PREF_OUTBOUND_DOMAIN_RESOLVE_METHOD = "pref_outbound_domain_resolve_method" const val PREF_MODE = "pref_mode" diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/dto/IPAPIInfo.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/dto/IPAPIInfo.kt index 97814fbb..d90e160e 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/dto/IPAPIInfo.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/dto/IPAPIInfo.kt @@ -8,5 +8,10 @@ data class IPAPIInfo( var country: String? = null, var country_name: String? = null, var country_code: String? = null, - var countryCode: String? = null -) \ No newline at end of file + var countryCode: String? = null, + var location: LocationBean? = null +) { + data class LocationBean( + var country_code: String? = null + ) +} \ No newline at end of file diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SpeedtestManager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SpeedtestManager.kt index 29bbaa6d..5948f1bd 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SpeedtestManager.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SpeedtestManager.kt @@ -163,14 +163,28 @@ object SpeedtestManager { } fun getRemoteIPInfo(): String? { + val url = MmkvManager.decodeSettingsString(AppConfig.PREF_IP_API_URL) + .takeIf { !it.isNullOrBlank() } ?: AppConfig.IP_API_URL + val httpPort = SettingsManager.getHttpPort() - var content = HttpUtil.getUrlContent(AppConfig.IP_API_URL, 5000, httpPort) ?: return null + val content = HttpUtil.getUrlContent(url, 5000, httpPort) ?: return null + val ipInfo = JsonUtil.fromJson(content, IPAPIInfo::class.java) ?: return null - var ipInfo = JsonUtil.fromJson(content, IPAPIInfo::class.java) ?: return null - var ip = ipInfo.ip ?: ipInfo.clientIp ?: ipInfo.ip_addr ?: ipInfo.query - var country = ipInfo.country_code ?: ipInfo.country ?: ipInfo.countryCode + val ip = listOf( + ipInfo.ip, + ipInfo.clientIp, + ipInfo.ip_addr, + ipInfo.query + ).firstOrNull { !it.isNullOrBlank() } - return "(${country ?: "unknown"}) $ip" + val country = listOf( + ipInfo.country_code, + ipInfo.country, + ipInfo.countryCode, + ipInfo.location?.country_code + ).firstOrNull { !it.isNullOrBlank() } + + return "(${country ?: "unknown"}) ${ip ?: "unknown"}" } /** 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 616a477f..4d56a65c 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 @@ -64,6 +64,7 @@ class SettingsActivity : BaseActivity() { 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 ipApiUrl by lazy { findPreference(AppConfig.PREF_IP_API_URL) } private val mode by lazy { findPreference(AppConfig.PREF_MODE) } private val hevTunLogLevel by lazy { findPreference(AppConfig.PREF_HEV_TUNNEL_LOGLEVEL) } @@ -84,8 +85,7 @@ class SettingsActivity : BaseActivity() { } localDnsPort?.setOnPreferenceChangeListener { _, any -> val nval = any as String - localDnsPort?.summary = - if (TextUtils.isEmpty(nval)) AppConfig.PORT_LOCAL_DNS else nval + localDnsPort?.summary = nval.ifEmpty { AppConfig.PORT_LOCAL_DNS } true } vpnDns?.setOnPreferenceChangeListener { _, any -> @@ -95,7 +95,7 @@ class SettingsActivity : BaseActivity() { vpnMtu?.setOnPreferenceChangeListener { _, any -> val nval = any as String - vpnMtu?.summary = if (TextUtils.isEmpty(nval)) AppConfig.VPN_MTU.toString() else nval + vpnMtu?.summary = nval.ifEmpty { AppConfig.VPN_MTU.toString() } true } @@ -151,18 +151,18 @@ class SettingsActivity : BaseActivity() { socksPort?.setOnPreferenceChangeListener { _, any -> val nval = any as String - socksPort?.summary = if (TextUtils.isEmpty(nval)) AppConfig.PORT_SOCKS else nval + socksPort?.summary = nval.ifEmpty { AppConfig.PORT_SOCKS } true } remoteDns?.setOnPreferenceChangeListener { _, any -> val nval = any as String - remoteDns?.summary = if (nval == "") AppConfig.DNS_PROXY else nval + remoteDns?.summary = nval.ifEmpty { AppConfig.DNS_PROXY } true } domesticDns?.setOnPreferenceChangeListener { _, any -> val nval = any as String - domesticDns?.summary = if (nval == "") AppConfig.DNS_DIRECT else nval + domesticDns?.summary = nval.ifEmpty { AppConfig.DNS_DIRECT } true } dnsHosts?.setOnPreferenceChangeListener { _, any -> @@ -172,7 +172,12 @@ class SettingsActivity : BaseActivity() { } delayTestUrl?.setOnPreferenceChangeListener { _, any -> val nval = any as String - delayTestUrl?.summary = if (nval == "") AppConfig.DELAY_TEST_URL else nval + delayTestUrl?.summary = nval.ifEmpty { AppConfig.DELAY_TEST_URL } + true + } + ipApiUrl?.setOnPreferenceChangeListener { _, any -> + val nval = any as String + ipApiUrl?.summary = nval.ifEmpty { AppConfig.IP_API_URL } true } mode?.setOnPreferenceChangeListener { _, newValue -> @@ -189,7 +194,7 @@ class SettingsActivity : BaseActivity() { hevTunRwTimeout?.setOnPreferenceChangeListener { _, any -> val nval = any as String - hevTunRwTimeout?.summary = if (TextUtils.isEmpty(nval)) AppConfig.HEVTUN_RW_TIMEOUT else nval + hevTunRwTimeout?.summary = nval.ifEmpty { AppConfig.HEVTUN_RW_TIMEOUT } true } } @@ -225,6 +230,7 @@ class SettingsActivity : BaseActivity() { 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.DELAY_TEST_URL) + ipApiUrl?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_IP_API_URL, AppConfig.IP_API_URL) //updateHevTunSettings(MmkvManager.decodeSettingsBool(AppConfig.PREF_USE_HEV_TUNNEL, true)) hevTunRwTimeout?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_HEV_TUNNEL_RW_TIMEOUT, AppConfig.HEVTUN_RW_TIMEOUT) @@ -246,6 +252,7 @@ class SettingsActivity : BaseActivity() { remoteDns, domesticDns, delayTestUrl, + ipApiUrl, hevTunRwTimeout ).forEach { key -> key?.text = key.summary.toString() 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 441afcb2..78708dbe 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 @@ -47,6 +47,7 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application AppConfig.PREF_DOMESTIC_DNS, AppConfig.PREF_DNS_HOSTS, AppConfig.PREF_DELAY_TEST_URL, + AppConfig.PREF_IP_API_URL, AppConfig.PREF_LOCAL_DNS_PORT, AppConfig.PREF_SOCKS_PORT, AppConfig.PREF_LOGLEVEL, diff --git a/V2rayNG/app/src/main/res/values-ar/strings.xml b/V2rayNG/app/src/main/res/values-ar/strings.xml index a263f6d2..39bf5c11 100644 --- a/V2rayNG/app/src/main/res/values-ar/strings.xml +++ b/V2rayNG/app/src/main/res/values-ar/strings.xml @@ -197,9 +197,12 @@ DNS hosts (Format: domain:address,…) domain:address,… - True delay test url (http/https) + True delay test url Url + Current connection info test url + Url + السماح بالاتصالات من الشبكة المحلية يمكن للأجهزة الأخرى الاتصال بالبروكسي بواسطة عنوان IP الخاص بك من خلال socks/http، يتم التمكين فقط في الشبكة الموثوقة لتجنب الاتصال غير المصرح به السماح بالاتصالات من الشبكة المحلية، تأكد من أنك في شبكة موثوقة diff --git a/V2rayNG/app/src/main/res/values-bn/strings.xml b/V2rayNG/app/src/main/res/values-bn/strings.xml index 2ab6c414..9b40beb2 100644 --- a/V2rayNG/app/src/main/res/values-bn/strings.xml +++ b/V2rayNG/app/src/main/res/values-bn/strings.xml @@ -197,9 +197,12 @@ DNS hosts (Format: domain:address,…) domain:address,… - সঠিক বিলম্ব পরীক্ষা ইউআরএল (http/https) + সঠিক বিলম্ব পরীক্ষা ইউআরএল ইউআরএল + Current connection info test url + Url + LAN থেকে সংযোগ অনুমোদন করুন অন্যান্য ডিভাইসগুলি আপনার আইপি ঠিকানা ব্যবহার করে প্রক্সিতে সংযুক্ত হতে পারে, শুধুমাত্র বিশ্বস্ত নেটওয়ার্কে সক্রিয় করুন যাতে অনুমোদিত সংযোগ এড়ানো যায় LAN থেকে সংযোগ অনুমোদন করুন, নিশ্চিত করুন যে আপনি একটি বিশ্বস্ত নেটওয়ার্কে আছেন 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 36a939fb..88ca1c59 100644 --- a/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml +++ b/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml @@ -197,9 +197,12 @@ DNS هاست موستقیم (قالوو: دامنه: نشۊوی،...) دامنه:نشۊوی،... - نشۊوی اینترنتی آزمایش تئخیر واقعی (http/https) + نشۊوی اینترنتی آزمایش تئخیر واقعی نشۊوی اینترنتی + Current connection info test url + Url + هشتن منپیزا ز شبکه مهلی پوی دسگایل ترن وا نشۊوی IP ایسا، ز ر socks/http و پروکسی منپیز بۊن، تینا من شبکه قابل اعتماد فعال بۊ تا ز منپیز غیر موجاز جلو گری بۊ. منپیزا ز شبکه مهلی ن موجار کۊنین، موتمعن بۊین ک من ی شبکه قابل ائتماڌ هڌین. diff --git a/V2rayNG/app/src/main/res/values-fa/strings.xml b/V2rayNG/app/src/main/res/values-fa/strings.xml index 2d21fe0c..d7438d09 100644 --- a/V2rayNG/app/src/main/res/values-fa/strings.xml +++ b/V2rayNG/app/src/main/res/values-fa/strings.xml @@ -195,9 +195,12 @@ DNS مستقیم هاست (فرمت: دامنه:آدرس،…) دامنه:آدرس،… - آدرس اینترنتی آزمایش تاخیر واقعی کانفیگ ها (HTTP/HTTPS) + آدرس اینترنتی آزمایش تاخیر واقعی کانفیگ ها URL + Current connection info test url + Url + اجازه اتصالات از طریق شبکه محلی سایر دستگاه ها می توانند با استفاده از آدرس آیپی شما برای استفاده از یک پروکسی محلی متصل شوند. فقط در یک شبکه قابل اعتماد برای جلوگیری از اتصالات غیرمجاز استفاده کنید. اتصالات از طریق شبکه محلی را مجاز کنید، مطمئن شوید که در یک شبکه قابل اعتماد هستید. diff --git a/V2rayNG/app/src/main/res/values-ru/strings.xml b/V2rayNG/app/src/main/res/values-ru/strings.xml index 915f6f04..7b074e1d 100644 --- a/V2rayNG/app/src/main/res/values-ru/strings.xml +++ b/V2rayNG/app/src/main/res/values-ru/strings.xml @@ -196,9 +196,12 @@ Узлы DNS (формат: домен:адрес,…) домен:адрес,… - Сервис проверки задержки (HTTP/HTTPS) + Сервис проверки задержки URL + Current connection info test url + Url + Разрешать подключения из LAN Другие устройства могут подключаться, используя ваш IP-адрес, чтобы использовать локальный прокси. Используйте только в доверенной сети, чтобы избежать несанкционированного подключения. Доступ из LAN разрешён, убедитесь, что вы находитесь в доверенной сети diff --git a/V2rayNG/app/src/main/res/values-vi/strings.xml b/V2rayNG/app/src/main/res/values-vi/strings.xml index 68c8a203..485c5b75 100644 --- a/V2rayNG/app/src/main/res/values-vi/strings.xml +++ b/V2rayNG/app/src/main/res/values-vi/strings.xml @@ -197,9 +197,12 @@ DNS hosts (Format: domain:address,…) domain:address,… - URL kiểm tra độ trễ thực (HTTP / HTTPS) + URL kiểm tra độ trễ thực URL + Current connection info test url + Url + Cho phép kết nối từ mạng LAN Các thiết bị khác trong cùng mạng LAN có thể kết nối đến SOCKS / HTTP proxy trên thiết bị của bạn. \nChỉ bật tính năng này trong các mạng đáng tin cậy để tránh kết nối trái phép. Đang bật cho phép kết nối từ mạng LAN 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 370e3347..ec905066 100644 --- a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml @@ -194,9 +194,12 @@ DNS hosts (格式: 域名: 地址,…) domain: address,… - 真连接延迟测试网址 (http/https) + 真连接延迟测试网址 Url + 当前连接信息测试网址 + URL + 允许来自局域网的连接 其他设备可以使用 socks/http 协议通过您的 IP 地址连接到代理, 仅在受信任的网络中启用以避免未经授权的连接 允许来自局域网的连接,请确保处于受信网络 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 a206a350..19db27c7 100644 --- a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml @@ -195,9 +195,12 @@ DNS hosts (格式: 網域:位址,…) domain:address,… - 真連線延遲測試網址 (http/https) + 真連線延遲測試網址 Url + 目前連線資訊測試網址 + URL + 允許來自區域網路的連線 其他裝置可以使用 socks/http 協定透過您的 IP 位址連線到 Proxy,僅在受信任的網路中啟用以避免未經授權的連線 允許來自區域網路的連線,請確保處於受信網路 diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml index 3022b215..f067f560 100644 --- a/V2rayNG/app/src/main/res/values/strings.xml +++ b/V2rayNG/app/src/main/res/values/strings.xml @@ -200,9 +200,12 @@ DNS hosts (Format: domain:address,…) domain:address,… - True delay test url (http/https) + True delay test url Url + Current connection info test url + Url + Allow connections from the LAN Other devices can connect to proxy by your IP address through local proxy. Only enable in trusted networks to avoid unauthorized connections Allow connections from the LAN. Make sure you are in a trusted network diff --git a/V2rayNG/app/src/main/res/xml/pref_settings.xml b/V2rayNG/app/src/main/res/xml/pref_settings.xml index 3c03bd59..df5b58ec 100644 --- a/V2rayNG/app/src/main/res/xml/pref_settings.xml +++ b/V2rayNG/app/src/main/res/xml/pref_settings.xml @@ -265,6 +265,11 @@ android:summary="@string/summary_pref_delay_test_url" android:title="@string/title_pref_delay_test_url" /> + +