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 0f0618a..37d908f 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/ui/ConfigurationFragment.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/ui/ConfigurationFragment.kt @@ -558,14 +558,16 @@ class ConfigurationFragment @JvmOverloads constructor( @Suppress("EXPERIMENTAL_API_USAGE") fun pingTest(icmpPing: Boolean) { - stopService() - val test = TestDialog() val testJobs = mutableListOf() val dialog = test.builder.show() val mainJob = runOnDefaultDispatcher { + if (DataStore.serviceState.started) { + stopService() + delay(500) // wait for service stop + } val group = DataStore.currentGroup() - var profilesUnfiltered = SagerDatabase.proxyDao.getByGroup(group.id) + val profilesUnfiltered = SagerDatabase.proxyDao.getByGroup(group.id) test.proxyN = profilesUnfiltered.size val profiles = ConcurrentLinkedQueue(profilesUnfiltered) val testPool = newFixedThreadPoolContext(5, "Connection test pool") @@ -692,13 +694,15 @@ class ConfigurationFragment @JvmOverloads constructor( } fun urlTest() { - stopService() - val test = TestDialog() val dialog = test.builder.show() val testJobs = mutableListOf() val mainJob = runOnDefaultDispatcher { + if (DataStore.serviceState.started) { + stopService() + delay(500) // wait for service stop + } val group = DataStore.currentGroup() val profilesUnfiltered = SagerDatabase.proxyDao.getByGroup(group.id) test.proxyN = profilesUnfiltered.size diff --git a/app/src/main/java/io/nekohasekai/sagernet/ui/SettingsPreferenceFragment.kt b/app/src/main/java/io/nekohasekai/sagernet/ui/SettingsPreferenceFragment.kt index 7a0fe34..78fceb7 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/ui/SettingsPreferenceFragment.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/ui/SettingsPreferenceFragment.kt @@ -192,16 +192,12 @@ class SettingsPreferenceFragment : PreferenceFragmentCompat() { true } - serviceMode.setOnPreferenceChangeListener { _, _ -> - if (DataStore.serviceState.started) SagerNet.stopService() - true - } - val tunImplementation = findPreference(Key.TUN_IMPLEMENTATION)!! val resolveDestination = findPreference(Key.RESOLVE_DESTINATION)!! val acquireWakeLock = findPreference(Key.ACQUIRE_WAKE_LOCK)!! val enableClashAPI = findPreference(Key.ENABLE_CLASH_API)!! + serviceMode.onPreferenceChangeListener = reloadListener mixedPort.onPreferenceChangeListener = reloadListener appendHttpProxy.onPreferenceChangeListener = reloadListener showDirectSpeed.onPreferenceChangeListener = reloadListener