From 14ff9eb5274f0b3a0bc91a950ed0fb2b6bc456dd Mon Sep 17 00:00:00 2001
From: 2dust <31833384+2dust@users.noreply.github.com>
Date: Thu, 20 Mar 2025 14:37:38 +0800
Subject: [PATCH] Optimize and improve PerAppProxyActivity
---
.../java/com/v2ray/ang/ui/PerAppProxyActivity.kt | 15 ++++++++++-----
.../src/main/java/com/v2ray/ang/util/HttpUtil.kt | 10 +++++-----
.../src/main/res/layout/activity_bypass_list.xml | 16 ++++++++--------
3 files changed, 23 insertions(+), 18 deletions(-)
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/PerAppProxyActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/PerAppProxyActivity.kt
index e1b6f3b3..e286034b 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/PerAppProxyActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/PerAppProxyActivity.kt
@@ -5,11 +5,8 @@ import android.text.TextUtils
import android.util.Log
import android.view.Menu
import android.view.MenuItem
-import android.view.View
import androidx.appcompat.widget.SearchView
import androidx.lifecycle.lifecycleScope
-import androidx.recyclerview.widget.DividerItemDecoration
-import androidx.recyclerview.widget.LinearLayoutManager
import com.v2ray.ang.AppConfig
import com.v2ray.ang.AppConfig.ANG_PACKAGE
import com.v2ray.ang.R
@@ -18,6 +15,7 @@ import com.v2ray.ang.dto.AppInfo
import com.v2ray.ang.extension.toast
import com.v2ray.ang.extension.v2RayApplication
import com.v2ray.ang.handler.MmkvManager
+import com.v2ray.ang.handler.SettingsManager
import com.v2ray.ang.util.AppManagerUtil
import com.v2ray.ang.util.HttpUtil
import com.v2ray.ang.util.Utils
@@ -48,7 +46,7 @@ class PerAppProxyActivity : BaseActivity() {
val blacklist = MmkvManager.decodeSettingsStringSet(AppConfig.PREF_PER_APP_PROXY_SET)
val apps = withContext(Dispatchers.IO) {
val appsList = AppManagerUtil.loadNetworkAppList(this@PerAppProxyActivity)
-
+
if (blacklist != null) {
appsList.forEach { app ->
app.isSelected = if (blacklist.contains(app.packageName)) 1 else 0
@@ -152,13 +150,20 @@ class PerAppProxyActivity : BaseActivity() {
private fun selectProxyApp() {
toast(R.string.msg_downloading_content)
+ binding.pbWaiting.show()
+
val url = AppConfig.androidpackagenamelistUrl
lifecycleScope.launch(Dispatchers.IO) {
- val content = HttpUtil.getUrlContent(url, 5000)
+ var content = HttpUtil.getUrlContent(url, 5000)
+ if (content.isNullOrEmpty()) {
+ val httpPort = SettingsManager.getHttpPort()
+ content = HttpUtil.getUrlContent(url, 5000, httpPort) ?: ""
+ }
launch(Dispatchers.Main) {
Log.d(ANG_PACKAGE, content)
selectProxyApp(content, true)
toast(R.string.toast_success)
+ binding.pbWaiting.hide()
}
}
}
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/util/HttpUtil.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/util/HttpUtil.kt
index 2f5e506c..135353ad 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/util/HttpUtil.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/util/HttpUtil.kt
@@ -26,18 +26,18 @@ object HttpUtil {
*
* @param url The URL to fetch content from.
* @param timeout The timeout value in milliseconds.
+ * @param httpPort The HTTP port to use.
* @return The content of the URL as a string.
*/
- fun getUrlContent(url: String, timeout: Int): String {
- var result: String = ""
- val conn = createProxyConnection(url, 0, timeout, timeout) ?: return result
+ fun getUrlContent(url: String, timeout: Int, httpPort: Int = 0): String? {
+ val conn = createProxyConnection(url, httpPort, timeout, timeout) ?: return null
try {
- result = conn.inputStream.bufferedReader().readText()
+ return conn.inputStream.bufferedReader().readText()
} catch (_: Exception) {
} finally {
conn.disconnect()
}
- return result
+ return null
}
/**
diff --git a/V2rayNG/app/src/main/res/layout/activity_bypass_list.xml b/V2rayNG/app/src/main/res/layout/activity_bypass_list.xml
index a0b9d459..e40edd72 100644
--- a/V2rayNG/app/src/main/res/layout/activity_bypass_list.xml
+++ b/V2rayNG/app/src/main/res/layout/activity_bypass_list.xml
@@ -7,6 +7,14 @@
android:fitsSystemWindows="true"
android:orientation="vertical">
+
+
-
-