From a75a15146e461b1c5a8ed467a6ba6d0faeddd543 Mon Sep 17 00:00:00 2001 From: armv9 <48624112+arm64v8a@users.noreply.github.com> Date: Sat, 6 Sep 2025 12:46:19 +0900 Subject: [PATCH] fix test cancel --- .../sagernet/ui/ConfigurationFragment.kt | 36 ++++++++++++------- nb4a.properties | 2 +- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/io/nekohasekai/sagernet/ui/ConfigurationFragment.kt b/app/src/main/java/io/nekohasekai/sagernet/ui/ConfigurationFragment.kt index 3ac40f9..0540910 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/ui/ConfigurationFragment.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/ui/ConfigurationFragment.kt @@ -110,7 +110,7 @@ import okhttp3.internal.closeQuietly import java.net.InetSocketAddress import java.net.Socket import java.net.UnknownHostException -import java.util.Collections +import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentLinkedQueue import java.util.concurrent.atomic.AtomicInteger import java.util.zip.ZipInputStream @@ -608,22 +608,30 @@ class ConfigurationFragment @JvmOverloads constructor( lateinit var cancel: () -> Unit lateinit var minimize: () -> Unit - var dialogHidden = false + val dialogStatus = AtomicInteger(0) // 1: hidden 2: cancelled var notification: ConnectionTestNotification? = null - val results = Collections.synchronizedSet(mutableSetOf()) + val results: MutableSet = ConcurrentHashMap.newKeySet() var proxyN = 0 val finishedN = AtomicInteger(0) fun update(profile: ProxyEntity) { - results.add(profile) + if (dialogStatus.get() != 2) { + results.add(profile) + } runOnMainDispatcher { val context = context ?: return@runOnMainDispatcher + val progress = finishedN.addAndGet(1) + val status = dialogStatus.get() + notification?.updateNotification( + progress, + proxyN, + progress >= proxyN || status == 2 + ) + if (status >= 1) return@runOnMainDispatcher if (!isAdded) return@runOnMainDispatcher - val progress = finishedN.addAndGet(1) - notification?.updateNotification(progress, proxyN, progress >= proxyN) - if (dialogHidden) return@runOnMainDispatcher + // refresh dialog var profileStatusText: String? = null var profileStatusColor = 0 @@ -797,8 +805,11 @@ class ConfigurationFragment @JvmOverloads constructor( } } test.cancel = { + test.dialogStatus.set(2) dialog.dismiss() runOnDefaultDispatcher { + mainJob.cancel() + testJobs.forEach { it.cancel() } test.results.forEach { try { ProfileManager.updateProfile(it) @@ -807,13 +818,11 @@ class ConfigurationFragment @JvmOverloads constructor( } } GroupManager.postReload(DataStore.currentGroupId()) - mainJob.cancel() - testJobs.forEach { it.cancel() } DataStore.runningTest = false } } test.minimize = { - test.dialogHidden = true + test.dialogStatus.set(1) test.notification = ConnectionTestNotification( dialog.context, "[${group.displayName()}] ${getString(R.string.connection_test)}" @@ -865,8 +874,11 @@ class ConfigurationFragment @JvmOverloads constructor( } } test.cancel = { + test.dialogStatus.set(2) dialog.dismiss() runOnDefaultDispatcher { + mainJob.cancel() + testJobs.forEach { it.cancel() } test.results.forEach { try { ProfileManager.updateProfile(it) @@ -875,13 +887,11 @@ class ConfigurationFragment @JvmOverloads constructor( } } GroupManager.postReload(DataStore.currentGroupId()) - mainJob.cancel() - testJobs.forEach { it.cancel() } DataStore.runningTest = false } } test.minimize = { - test.dialogHidden = true + test.dialogStatus.set(1) test.notification = ConnectionTestNotification( dialog.context, "[${group.displayName()}] ${getString(R.string.connection_test)}" diff --git a/nb4a.properties b/nb4a.properties index 8bd0af2..89fdda5 100644 --- a/nb4a.properties +++ b/nb4a.properties @@ -1,4 +1,4 @@ PACKAGE_NAME=moe.nb4a VERSION_NAME=1.3.9 -PRE_VERSION_NAME=pre-1.4.0-20250905-1 +PRE_VERSION_NAME=pre-1.4.0-20250906-1 VERSION_CODE=43