Replace doasync with Kotlin coroutine
Using a custom coroutine scope, we don't need to keep track of the running job. We can simply call cancel children for the scope.
This commit is contained in:
@@ -16,7 +16,9 @@ import com.v2ray.ang.extension.defaultDPreference
|
||||
import com.v2ray.ang.ui.PerAppProxyActivity
|
||||
import com.v2ray.ang.ui.SettingsActivity
|
||||
import com.v2ray.ang.util.Utils
|
||||
import org.jetbrains.anko.doAsync
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import java.io.File
|
||||
import java.lang.ref.SoftReference
|
||||
|
||||
@@ -170,7 +172,7 @@ class V2RayVpnService : VpnService(), ServiceControl {
|
||||
val fd = mInterface.fileDescriptor
|
||||
val path = File(Utils.packagePath(applicationContext), "sock_path").absolutePath
|
||||
|
||||
doAsync {
|
||||
GlobalScope.launch(Dispatchers.IO) {
|
||||
var tries = 0
|
||||
while (true) try {
|
||||
Thread.sleep(50L shl tries)
|
||||
|
||||
@@ -11,9 +11,9 @@ import com.v2ray.ang.R
|
||||
import com.v2ray.ang.extension.toast
|
||||
import com.v2ray.ang.util.Utils
|
||||
import kotlinx.android.synthetic.main.activity_logcat.*
|
||||
import org.jetbrains.anko.doAsync
|
||||
import org.jetbrains.anko.uiThread
|
||||
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import java.io.IOException
|
||||
import java.util.LinkedHashSet
|
||||
|
||||
@@ -34,7 +34,7 @@ class LogcatActivity : BaseActivity() {
|
||||
try {
|
||||
pb_waiting.visibility = View.VISIBLE
|
||||
|
||||
doAsync {
|
||||
GlobalScope.launch(Dispatchers.Default) {
|
||||
if (shouldFlushLog) {
|
||||
val lst = LinkedHashSet<String>()
|
||||
lst.add("logcat")
|
||||
@@ -54,7 +54,7 @@ class LogcatActivity : BaseActivity() {
|
||||
// InputStreamReader(process.inputStream))
|
||||
// val allText = bufferedReader.use(BufferedReader::readText)
|
||||
val allText = process.inputStream.bufferedReader().use { it.readText() }
|
||||
uiThread {
|
||||
launch(Dispatchers.Main) {
|
||||
tv_logcat.text = allText
|
||||
tv_logcat.movementMethod = ScrollingMovementMethod()
|
||||
pb_waiting.visibility = View.GONE
|
||||
|
||||
@@ -63,7 +63,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
|
||||
|
||||
private val adapter by lazy { MainRecyclerAdapter(this) }
|
||||
private var mItemTouchHelper: ItemTouchHelper? = null
|
||||
private val testingJobs = ArrayList<Job>()
|
||||
private val tcpingTestScope by lazy { CoroutineScope(Dispatchers.IO) }
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@@ -90,9 +90,9 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
|
||||
val socksPort = 10808//Utils.parseInt(defaultDPreference.getPrefString(SettingsActivity.PREF_SOCKS_PORT, "10808"))
|
||||
|
||||
tv_test_state.text = getString(R.string.connection_test_testing)
|
||||
doAsync {
|
||||
GlobalScope.launch(Dispatchers.IO) {
|
||||
val result = Utils.testConnection(this@MainActivity, socksPort)
|
||||
uiThread {
|
||||
launch(Dispatchers.Main) {
|
||||
tv_test_state.text = Utils.getEditable(result)
|
||||
}
|
||||
}
|
||||
@@ -249,10 +249,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
|
||||
}
|
||||
|
||||
R.id.ping_all -> {
|
||||
testingJobs.forEach {
|
||||
it.cancel()
|
||||
}
|
||||
testingJobs.clear()
|
||||
tcpingTestScope.coroutineContext[Job]?.cancelChildren()
|
||||
Utils.closeAllTcpSockets()
|
||||
for (k in 0 until configs.vmess.count()) {
|
||||
configs.vmess[k].testResult = ""
|
||||
@@ -267,16 +264,14 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
|
||||
serverAddress = serverOutbound.getServerAddress() ?: continue
|
||||
serverPort = serverOutbound.getServerPort() ?: continue
|
||||
}
|
||||
testingJobs.add(GlobalScope.launch(Dispatchers.IO) {
|
||||
tcpingTestScope.launch {
|
||||
configs.vmess.getOrNull(k)?.let { // check null in case array is modified during testing
|
||||
it.testResult = Utils.tcping(serverAddress, serverPort)
|
||||
val myJob = coroutineContext[Job]
|
||||
launch(Dispatchers.Main) {
|
||||
testingJobs.remove(myJob)
|
||||
adapter.updateSelectedItem(k)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
true
|
||||
}
|
||||
@@ -392,9 +387,14 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
|
||||
toast(R.string.toast_invalid_url)
|
||||
return false
|
||||
}
|
||||
doAsync {
|
||||
val configText = URL(url).readText()
|
||||
uiThread {
|
||||
GlobalScope.launch(Dispatchers.IO) {
|
||||
val configText = try {
|
||||
URL(url).readText()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
""
|
||||
}
|
||||
launch(Dispatchers.Main) {
|
||||
importCustomizeConfig(configText)
|
||||
}
|
||||
}
|
||||
@@ -426,9 +426,14 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
|
||||
continue
|
||||
}
|
||||
Log.d("Main", url)
|
||||
doAsync {
|
||||
val configText = URL(url).readText()
|
||||
uiThread {
|
||||
GlobalScope.launch(Dispatchers.IO) {
|
||||
val configText = try {
|
||||
URL(url).readText()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
""
|
||||
}
|
||||
launch(Dispatchers.Main) {
|
||||
importBatchConfig(Utils.decode(configText), id)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,8 +29,9 @@ import com.v2ray.ang.dto.AppInfo
|
||||
import com.v2ray.ang.extension.toast
|
||||
import com.v2ray.ang.extension.v2RayApplication
|
||||
import com.v2ray.ang.util.Utils
|
||||
import org.jetbrains.anko.doAsync
|
||||
import org.jetbrains.anko.uiThread
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import java.net.URL
|
||||
|
||||
class PerAppProxyActivity : BaseActivity() {
|
||||
@@ -220,9 +221,14 @@ class PerAppProxyActivity : BaseActivity() {
|
||||
private fun selectProxyApp() {
|
||||
toast(R.string.msg_downloading_content)
|
||||
val url = AppConfig.androidpackagenamelistUrl
|
||||
doAsync {
|
||||
val content = URL(url).readText()
|
||||
uiThread {
|
||||
GlobalScope.launch(Dispatchers.IO) {
|
||||
val content = try {
|
||||
URL(url).readText()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
""
|
||||
}
|
||||
launch(Dispatchers.Main) {
|
||||
Log.d("selectProxyApp", content)
|
||||
selectProxyApp(content)
|
||||
toast(R.string.toast_success)
|
||||
|
||||
@@ -14,8 +14,9 @@ import android.view.MenuInflater
|
||||
import com.tbruyelle.rxpermissions.RxPermissions
|
||||
import com.v2ray.ang.AppConfig
|
||||
import com.v2ray.ang.extension.toast
|
||||
import org.jetbrains.anko.doAsync
|
||||
import org.jetbrains.anko.uiThread
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import java.net.URL
|
||||
|
||||
class RoutingSettingsFragment : Fragment() {
|
||||
@@ -112,10 +113,15 @@ class RoutingSettingsFragment : Fragment() {
|
||||
}
|
||||
|
||||
activity?.toast(R.string.msg_downloading_content)
|
||||
doAsync {
|
||||
val content = URL(url).readText()
|
||||
uiThread {
|
||||
et_routing_content.text = Utils.getEditable(content!!)
|
||||
GlobalScope.launch(Dispatchers.IO) {
|
||||
val content = try {
|
||||
URL(url).readText()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
""
|
||||
}
|
||||
launch(Dispatchers.Main) {
|
||||
et_routing_content.text = Utils.getEditable(content)
|
||||
activity?.toast(R.string.toast_success)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user