From 028d13aef8577a12c0a72bfd04cc2bb156699532 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 23 May 2026 11:09:46 +0800 Subject: [PATCH] Add SettingsManager.getProfileRemarks and use it --- .../com/v2ray/ang/handler/SettingsManager.kt | 14 ++++++++++++++ .../com/v2ray/ang/ui/RoutingEditActivity.kt | 5 +---- .../v2ray/ang/ui/ServerProxyChainActivity.kt | 19 +++++++------------ .../java/com/v2ray/ang/ui/SubEditActivity.kt | 12 ++++++++---- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt index feecea58..235337d9 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt @@ -246,6 +246,20 @@ object SettingsManager { .firstOrNull { it.remarks == remarks } } + /** + * Collects non-empty profile remarks while excluding specific config types. + */ + fun getProfileRemarks(excludeConfigTypes: Set = setOf(EConfigType.CUSTOM)): List { + return decodeAllServerList() + .asSequence() + .mapNotNull { guid -> decodeServerConfig(guid) } + .filter { profile -> profile.configType !in excludeConfigTypes } + .map { it.remarks.trim() } + .filter { it.isNotEmpty() } + .distinct() + .toList() + } + /** * Removes the subscription. * If there are no remaining subscriptions, diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/RoutingEditActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/RoutingEditActivity.kt index b5fa69f1..e5bb6b1d 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/RoutingEditActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/RoutingEditActivity.kt @@ -15,7 +15,6 @@ import com.v2ray.ang.dto.entities.RulesetItem import com.v2ray.ang.extension.nullIfBlank import com.v2ray.ang.extension.toast import com.v2ray.ang.extension.toastSuccess -import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.handler.SettingsManager import com.v2ray.ang.util.Utils import kotlinx.coroutines.Dispatchers @@ -78,9 +77,7 @@ class RoutingEditActivity : BaseActivity() { * The dropdown button triggers showing the full list without typing. */ private fun setupOutboundTagInput() { - val profileRemarks = MmkvManager.decodeAllServerList() - .mapNotNull { id -> MmkvManager.decodeServerConfig(id)?.remarks } - .filter { it.isNotBlank() } + val profileRemarks = SettingsManager.getProfileRemarks() val suggestions = (BUILTIN_OUTBOUND_TAGS.toList() + profileRemarks).distinct() val adapter = ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, suggestions) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerProxyChainActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerProxyChainActivity.kt index 4c7f3d0a..d5a6f740 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerProxyChainActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerProxyChainActivity.kt @@ -55,18 +55,13 @@ class ServerProxyChainActivity : BaseActivity() { } private fun loadAvailableRemarks() { - allRemarks = MmkvManager.decodeAllServerList() - .asSequence() - .mapNotNull { guid -> MmkvManager.decodeServerConfig(guid) } - .filter { profile -> - profile.configType != EConfigType.CUSTOM - && profile.configType != EConfigType.POLICYGROUP - && profile.configType != EConfigType.PROXYCHAIN - } - .map { it.remarks.trim() } - .filter { it.isNotEmpty() } - .distinct() - .toList() + allRemarks = SettingsManager.getProfileRemarks( + excludeConfigTypes = setOf( + EConfigType.CUSTOM, + EConfigType.POLICYGROUP, + EConfigType.PROXYCHAIN, + ) + ) } private fun setupRecycler() { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubEditActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubEditActivity.kt index 7045aa2c..2272f088 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubEditActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubEditActivity.kt @@ -13,6 +13,7 @@ import com.v2ray.ang.AppConfig import com.v2ray.ang.R import com.v2ray.ang.databinding.ActivitySubEditBinding import com.v2ray.ang.dto.entities.SubscriptionItem +import com.v2ray.ang.enums.EConfigType import com.v2ray.ang.extension.toast import com.v2ray.ang.extension.toastSuccess import com.v2ray.ang.handler.MmkvManager @@ -78,10 +79,13 @@ class SubEditActivity : BaseActivity() { } private fun setupProfileRemarkInputs() { - val suggestions = MmkvManager.decodeAllServerList() - .mapNotNull { id -> MmkvManager.decodeServerConfig(id)?.remarks } - .filter { it.isNotBlank() } - .distinct() + val suggestions = SettingsManager.getProfileRemarks( + excludeConfigTypes = setOf( + EConfigType.CUSTOM, + EConfigType.POLICYGROUP, + EConfigType.PROXYCHAIN, + ) + ) setupProfileRemarkInput(binding.etPreProfile, binding.btnPreProfileDropdown, suggestions) setupProfileRemarkInput(binding.etNextProfile, binding.btnNextProfileDropdown, suggestions)