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 0a2a2946..6a6195d5 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt @@ -103,6 +103,7 @@ object AppConfig { const val TG_CHANNEL_URL = "https://t.me/github_2dust" const val DELAY_TEST_URL = "https://www.gstatic.com/generate_204" const val DELAY_TEST_URL2 = "https://www.google.com/generate_204" + const val IP_API_Url = "https://api.ip.sb/geoip" /** DNS server addresses. */ const val DNS_PROXY = "1.1.1.1" 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 new file mode 100644 index 00000000..4d29ffc7 --- /dev/null +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/dto/IPAPIInfo.kt @@ -0,0 +1,11 @@ +package com.v2ray.ang.dto + +data class IPAPIInfo( + var ip: String? = null, + var city: String? = null, + var region: String? = null, + var region_code: String? = null, + var country: String? = null, + var country_name: String? = null, + 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 bab1f1d4..99898a3a 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 @@ -6,8 +6,10 @@ import android.text.TextUtils import android.util.Log import com.v2ray.ang.AppConfig import com.v2ray.ang.R +import com.v2ray.ang.dto.IPAPIInfo import com.v2ray.ang.extension.responseLength import com.v2ray.ang.util.HttpUtil +import com.v2ray.ang.util.JsonUtil import kotlinx.coroutines.isActive import libv2ray.Libv2ray import java.io.IOException @@ -164,6 +166,14 @@ object SpeedtestManager { return Pair(elapsed, result) } + fun getRemoteIPInfo(): String? { + val httpPort = SettingsManager.getHttpPort() + var content = HttpUtil.getUrlContent(AppConfig.IP_API_Url, 5000, httpPort) ?: return null + + var ipInfo = JsonUtil.fromJson(content, IPAPIInfo::class.java) ?: return null + return "(${ipInfo.country_code}) ${ipInfo.ip}" + } + /** * Gets the version of the V2Ray library. * diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/service/V2RayServiceManager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/service/V2RayServiceManager.kt index d1c17cf1..44cd257a 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/service/V2RayServiceManager.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/service/V2RayServiceManager.kt @@ -15,6 +15,7 @@ import com.v2ray.ang.dto.ProfileItem import com.v2ray.ang.extension.toast import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.handler.SettingsManager +import com.v2ray.ang.handler.SpeedtestManager import com.v2ray.ang.handler.V2rayConfigManager import com.v2ray.ang.util.MessageUtil import com.v2ray.ang.util.PluginUtil @@ -231,7 +232,12 @@ object V2RayServiceManager { val result = if (time == -1L) { service.getString(R.string.connection_test_error, errstr) } else { - service.getString(R.string.connection_test_available, time) + buildString { + append(service.getString(R.string.connection_test_available, time)) + SpeedtestManager.getRemoteIPInfo()?.let { ip -> + append("\n$ip") + } + } } MessageUtil.sendMsg2UI(service, AppConfig.MSG_MEASURE_DELAY_SUCCESS, result) diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml index ced93fa0..c1b31042 100644 --- a/V2rayNG/app/src/main/res/values/strings.xml +++ b/V2rayNG/app/src/main/res/values/strings.xml @@ -304,7 +304,7 @@ Check Connectivity Testing… Testing %d configurations… - Success: HTTP connection took %dms + Success: Connection took %dms Fail to detect internet connection: %s Internet Unavailable Error code: #%d