Use viewModelScope instead of GlobalScope

This commit is contained in:
topjohnwu 2022-03-23 18:03:41 -07:00
parent b1faa5eed4
commit e67d0678f9
2 changed files with 12 additions and 13 deletions

View File

@ -7,11 +7,8 @@ import com.topjohnwu.magisk.core.Config
import com.topjohnwu.magisk.core.magiskdb.PolicyDao import com.topjohnwu.magisk.core.magiskdb.PolicyDao
import com.topjohnwu.magisk.core.model.su.SuPolicy import com.topjohnwu.magisk.core.model.su.SuPolicy
import com.topjohnwu.magisk.core.model.su.toPolicy import com.topjohnwu.magisk.core.model.su.toPolicy
import com.topjohnwu.magisk.ktx.now
import com.topjohnwu.superuser.Shell import com.topjohnwu.superuser.Shell
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import timber.log.Timber import timber.log.Timber
import java.io.Closeable import java.io.Closeable
@ -54,10 +51,9 @@ class SuRequestHandler(
return true return true
} }
@Throws(IOException::class)
override fun close() { override fun close() {
if (::output.isInitialized) if (::output.isInitialized)
output.close() runCatching { output.close() }
} }
private class SuRequestError : IOException() private class SuRequestError : IOException()
@ -73,7 +69,7 @@ class SuRequestHandler(
when (e) { when (e) {
is IOException, is PackageManager.NameNotFoundException -> { is IOException, is PackageManager.NameNotFoundException -> {
Timber.e(e) Timber.e(e)
runCatching { close() } close()
false false
} }
else -> throw e // Unexpected error else -> throw e // Unexpected error
@ -81,23 +77,24 @@ class SuRequestHandler(
} }
} }
fun respond(action: Int, time: Int) { suspend fun respond(action: Int, time: Int) {
val until = if (time > 0) val until = if (time > 0)
TimeUnit.MILLISECONDS.toSeconds(now) + TimeUnit.MINUTES.toSeconds(time.toLong()) TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()) +
TimeUnit.MINUTES.toSeconds(time.toLong())
else else
time.toLong() time.toLong()
policy.policy = action policy.policy = action
policy.until = until policy.until = until
GlobalScope.launch(Dispatchers.IO) { withContext(Dispatchers.IO) {
try { try {
output.writeInt(policy.policy) output.writeInt(policy.policy)
output.flush() output.flush()
} catch (e: IOException) { } catch (e: IOException) {
Timber.e(e) Timber.e(e)
} finally { } finally {
runCatching { close() } close()
if (until >= 0) if (until >= 0)
policyDB.update(policy) policyDB.update(policy)
} }

View File

@ -125,10 +125,12 @@ class SuRequestViewModel(
val pos = selectedItemPosition val pos = selectedItemPosition
timeoutPrefs.edit().putInt(handler.policy.packageName, pos).apply() timeoutPrefs.edit().putInt(handler.policy.packageName, pos).apply()
handler.respond(action, Config.Value.TIMEOUT_LIST[pos])
// Kill activity after response viewModelScope.launch {
DieEvent().publish() handler.respond(action, Config.Value.TIMEOUT_LIST[pos])
// Kill activity after response
DieEvent().publish()
}
} }
private fun cancelTimer() { private fun cancelTimer() {