Improve: migrate to latest dependencies

This commit is contained in:
Kr328
2021-05-24 15:57:22 +08:00
parent 4f05ba1ac6
commit 27dc5395e0
31 changed files with 92 additions and 83 deletions

View File

@@ -114,7 +114,7 @@ abstract class BaseActivity<D : Design<*>> :
Remote.broadcasts.addObserver(this) Remote.broadcasts.addObserver(this)
events.offer(Event.ActivityStart) events.trySend(Event.ActivityStart)
} }
override fun onStop() { override fun onStop() {
@@ -124,7 +124,7 @@ abstract class BaseActivity<D : Design<*>> :
Remote.broadcasts.removeObserver(this) Remote.broadcasts.removeObserver(this)
events.offer(Event.ActivityStop) events.trySend(Event.ActivityStop)
} }
override fun onDestroy() { override fun onDestroy() {
@@ -174,23 +174,23 @@ abstract class BaseActivity<D : Design<*>> :
} }
override fun onProfileChanged() { override fun onProfileChanged() {
events.offer(Event.ProfileChanged) events.trySend(Event.ProfileChanged)
} }
override fun onProfileLoaded() { override fun onProfileLoaded() {
events.offer(Event.ProfileLoaded) events.trySend(Event.ProfileLoaded)
} }
override fun onServiceRecreated() { override fun onServiceRecreated() {
events.offer(Event.ServiceRecreated) events.trySend(Event.ServiceRecreated)
} }
override fun onStarted() { override fun onStarted() {
events.offer(Event.ClashStart) events.trySend(Event.ClashStart)
} }
override fun onStopped(cause: String?) { override fun onStopped(cause: String?) {
events.offer(Event.ClashStop) events.trySend(Event.ClashStop)
if (cause != null && activityStarted) { if (cause != null && activityStarted) {
launch { launch {

View File

@@ -141,7 +141,7 @@ class FilesActivity : BaseActivity<FilesDesign>() {
} }
override fun onBackPressed() { override fun onBackPressed() {
design?.requests?.offer(FilesDesign.Request.PopStack) design?.requests?.trySend(FilesDesign.Request.PopStack)
} }
private suspend fun FilesDesign.fetch(client: FilesClient, stack: Stack<String>, root: String) { private suspend fun FilesDesign.fetch(client: FilesClient, stack: Stack<String>, root: String) {

View File

@@ -97,7 +97,7 @@ class LogcatService : Service(), CoroutineScope by CoroutineScope(Dispatchers.De
LogcatWriter(this@LogcatService).use { LogcatWriter(this@LogcatService).use {
val observer = object : ILogObserver { val observer = object : ILogObserver {
override fun newItem(log: LogMessage) { override fun newItem(log: LogMessage) {
channel.offer(log) channel.trySend(log)
} }
} }

View File

@@ -47,7 +47,7 @@ class LogsActivity : BaseActivity<LogsDesign>() {
deleteAllLogs() deleteAllLogs()
} }
events.offer(Event.ActivityStart) events.trySend(Event.ActivityStart)
} }
} }
is LogsDesign.Request.OpenFile -> { is LogsDesign.Request.OpenFile -> {

View File

@@ -32,4 +32,8 @@ class MainApplication : Application() {
sendServiceRecreated() sendServiceRecreated()
} }
} }
fun finalize() {
Global.destroy()
}
} }

View File

@@ -73,7 +73,7 @@ class ProxyActivity : BaseActivity<ProxyDesign>() {
} }
ProxyDesign.Request.ReloadAll -> { ProxyDesign.Request.ReloadAll -> {
names.indices.forEach { idx -> names.indices.forEach { idx ->
design.requests.offer(ProxyDesign.Request.Reload(idx)) design.requests.trySend(ProxyDesign.Request.Reload(idx))
} }
} }
is ProxyDesign.Request.Reload -> { is ProxyDesign.Request.Reload -> {

View File

@@ -10,7 +10,6 @@ import com.github.kr328.clash.store.AppStore
import com.github.kr328.clash.util.ApplicationObserver import com.github.kr328.clash.util.ApplicationObserver
import com.github.kr328.clash.util.verifyApk import com.github.kr328.clash.util.verifyApk
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -30,9 +29,9 @@ object Remote {
fun launch() { fun launch() {
ApplicationObserver.attach(Global.application) ApplicationObserver.attach(Global.application)
ApplicationObserver.onVisibleChanged(visible::offer) ApplicationObserver.onVisibleChanged { visible.trySend(it) }
GlobalScope.launch(Dispatchers.IO) { Global.launch(Dispatchers.IO) {
run() run()
} }
} }

View File

@@ -1,8 +1,11 @@
package com.github.kr328.clash.common package com.github.kr328.clash.common
import android.app.Application import android.app.Application
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.cancel
object Global { object Global : CoroutineScope by CoroutineScope(Dispatchers.IO) {
val application: Application val application: Application
get() = application_ get() = application_
@@ -11,4 +14,8 @@ object Global {
fun init(application: Application) { fun init(application: Application) {
this.application_ = application this.application_ = application
} }
fun destroy() {
cancel()
}
} }

View File

@@ -218,7 +218,7 @@ object Clash {
return Channel<LogMessage>(32).apply { return Channel<LogMessage>(32).apply {
Bridge.nativeSubscribeLogcat(object : LogcatInterface { Bridge.nativeSubscribeLogcat(object : LogcatInterface {
override fun received(jsonPayload: String) { override fun received(jsonPayload: String) {
offer(Json.decodeFromString(LogMessage.serializer(), jsonPayload)) trySend(Json.decodeFromString(LogMessage.serializer(), jsonPayload))
} }
}) })
} }

View File

@@ -236,7 +236,7 @@ class OverrideSettingsDesign(
summary = R.string.sideload_geoip_summary summary = R.string.sideload_geoip_summary
) { ) {
clicked { clicked {
requests.offer(Request.EditSideloadGeoip) requests.trySend(Request.EditSideloadGeoip)
} }
} }
@@ -394,6 +394,6 @@ class OverrideSettingsDesign(
} }
fun requestClear() { fun requestClear() {
requests.offer(Request.ResetOverride) requests.trySend(Request.ResetOverride)
} }
} }

View File

@@ -32,48 +32,48 @@ class ProxyMenu(
R.id.not_selectable -> { R.id.not_selectable -> {
uiStore.proxyExcludeNotSelectable = item.isChecked uiStore.proxyExcludeNotSelectable = item.isChecked
requests.offer(ProxyDesign.Request.ReLaunch) requests.trySend(ProxyDesign.Request.ReLaunch)
} }
R.id.single -> { R.id.single -> {
uiStore.proxySingleLine = true uiStore.proxySingleLine = true
updateConfig() updateConfig()
requests.offer(ProxyDesign.Request.ReloadAll) requests.trySend(ProxyDesign.Request.ReloadAll)
} }
R.id.multiple -> { R.id.multiple -> {
uiStore.proxySingleLine = false uiStore.proxySingleLine = false
updateConfig() updateConfig()
requests.offer(ProxyDesign.Request.ReloadAll) requests.trySend(ProxyDesign.Request.ReloadAll)
} }
R.id.default_ -> { R.id.default_ -> {
uiStore.proxySort = ProxySort.Default uiStore.proxySort = ProxySort.Default
requests.offer(ProxyDesign.Request.ReloadAll) requests.trySend(ProxyDesign.Request.ReloadAll)
} }
R.id.name -> { R.id.name -> {
uiStore.proxySort = ProxySort.Title uiStore.proxySort = ProxySort.Title
requests.offer(ProxyDesign.Request.ReloadAll) requests.trySend(ProxyDesign.Request.ReloadAll)
} }
R.id.delay -> { R.id.delay -> {
uiStore.proxySort = ProxySort.Delay uiStore.proxySort = ProxySort.Delay
requests.offer(ProxyDesign.Request.ReloadAll) requests.trySend(ProxyDesign.Request.ReloadAll)
} }
R.id.dont_modify -> { R.id.dont_modify -> {
requests.offer(ProxyDesign.Request.PatchMode(null)) requests.trySend(ProxyDesign.Request.PatchMode(null))
} }
R.id.direct_mode -> { R.id.direct_mode -> {
requests.offer(ProxyDesign.Request.PatchMode(TunnelState.Mode.Direct)) requests.trySend(ProxyDesign.Request.PatchMode(TunnelState.Mode.Direct))
} }
R.id.global_mode -> { R.id.global_mode -> {
requests.offer(ProxyDesign.Request.PatchMode(TunnelState.Mode.Global)) requests.trySend(ProxyDesign.Request.PatchMode(TunnelState.Mode.Global))
} }
R.id.rule_mode -> { R.id.rule_mode -> {
requests.offer(ProxyDesign.Request.PatchMode(TunnelState.Mode.Rule)) requests.trySend(ProxyDesign.Request.PatchMode(TunnelState.Mode.Rule))
} }
else -> return false else -> return false
} }

View File

@@ -93,7 +93,7 @@ class AccessControlDesign(
binding.surface = dialog.surface binding.surface = dialog.surface
binding.mainList.applyLinearAdapter(context, adapter) binding.mainList.applyLinearAdapter(context, adapter)
binding.keywordView.addTextChangedListener { binding.keywordView.addTextChangedListener {
filter.offer(Unit) filter.trySend(Unit)
} }
binding.closeView.setOnClickListener { binding.closeView.setOnClickListener {
dialog.dismiss() dialog.dismiss()

View File

@@ -38,7 +38,7 @@ class ApkBrokenDesign(context: Context) : Design<ApkBrokenDesign.Request>(contex
summary = R.string.google_play_url summary = R.string.google_play_url
) { ) {
clicked { clicked {
requests.offer(Request(context.getString(R.string.google_play_url))) requests.trySend(Request(context.getString(R.string.google_play_url)))
} }
} }
@@ -47,7 +47,7 @@ class ApkBrokenDesign(context: Context) : Design<ApkBrokenDesign.Request>(contex
summary = R.string.github_releases_url summary = R.string.github_releases_url
) { ) {
clicked { clicked {
requests.offer(Request(context.getString(R.string.github_releases_url))) requests.trySend(Request(context.getString(R.string.github_releases_url)))
} }
} }
} }

View File

@@ -61,7 +61,7 @@ class AppSettingsDesign(
title = R.string.dark_mode title = R.string.dark_mode
) { ) {
listener = OnChangedListener { listener = OnChangedListener {
requests.offer(Request.ReCreateAllActivities) requests.trySend(Request.ReCreateAllActivities)
} }
} }

View File

@@ -72,38 +72,38 @@ class FilesDesign(context: Context) : Design<FilesDesign.Request>(context) {
private fun requestOpen(file: File) { private fun requestOpen(file: File) {
if (file.isDirectory) { if (file.isDirectory) {
requests.offer(Request.OpenDirectory(file)) requests.trySend(Request.OpenDirectory(file))
} else { } else {
requests.offer(Request.OpenFile(file)) requests.trySend(Request.OpenFile(file))
} }
} }
fun requestRename(dialog: Dialog, file: File) { fun requestRename(dialog: Dialog, file: File) {
requests.offer(Request.RenameFile(file)) requests.trySend(Request.RenameFile(file))
dialog.dismiss() dialog.dismiss()
} }
fun requestImport(dialog: Dialog, file: File) { fun requestImport(dialog: Dialog, file: File) {
requests.offer(Request.ImportFile(file)) requests.trySend(Request.ImportFile(file))
dialog.dismiss() dialog.dismiss()
} }
fun requestExport(dialog: Dialog, file: File) { fun requestExport(dialog: Dialog, file: File) {
requests.offer(Request.ExportFile(file)) requests.trySend(Request.ExportFile(file))
dialog.dismiss() dialog.dismiss()
} }
fun requestDelete(dialog: Dialog, file: File) { fun requestDelete(dialog: Dialog, file: File) {
requests.offer(Request.DeleteFile(file)) requests.trySend(Request.DeleteFile(file))
dialog.dismiss() dialog.dismiss()
} }
fun requestNew() { fun requestNew() {
requests.offer(Request.ImportFile(null)) requests.trySend(Request.ImportFile(null))
} }
private fun requestMore(file: File) { private fun requestMore(file: File) {

View File

@@ -23,7 +23,7 @@ class LogsDesign(context: Context) : Design<LogsDesign.Request>(context) {
private val binding = DesignLogsBinding private val binding = DesignLogsBinding
.inflate(context.layoutInflater, context.root, false) .inflate(context.layoutInflater, context.root, false)
private val adapter = LogFileAdapter(context) { private val adapter = LogFileAdapter(context) {
requests.offer(Request.OpenFile(it)) requests.trySend(Request.OpenFile(it))
} }
override val root: View override val root: View

View File

@@ -97,6 +97,6 @@ class MainDesign(context: Context) : Design<MainDesign.Request>(context) {
} }
fun request(request: Request) { fun request(request: Request) {
requests.offer(request) requests.trySend(request)
} }
} }

View File

@@ -96,7 +96,7 @@ class NetworkSettingsDesign(
summary = R.string.access_control_packages_summary, summary = R.string.access_control_packages_summary,
) { ) {
clicked { clicked {
requests.offer(Request.StartAccessControlList) requests.trySend(Request.StartAccessControlList)
} }
vpnDependencies.add(this) vpnDependencies.add(this)

View File

@@ -38,13 +38,13 @@ class NewProfileDesign(context: Context) : Design<NewProfileDesign.Request>(cont
} }
private fun requestCreate(provider: ProfileProvider) { private fun requestCreate(provider: ProfileProvider) {
requests.offer(Request.Create(provider)) requests.trySend(Request.Create(provider))
} }
private fun requestDetail(provider: ProfileProvider): Boolean { private fun requestDetail(provider: ProfileProvider): Boolean {
if (provider !is ProfileProvider.External) return false if (provider !is ProfileProvider.External) return false
requests.offer(Request.OpenDetail(provider)) requests.trySend(Request.OpenDetail(provider))
return true return true
} }

View File

@@ -49,7 +49,7 @@ class ProfilesDesign(context: Context) : Design<ProfilesDesign.Request>(context)
suspend fun requestSave(profile: Profile) { suspend fun requestSave(profile: Profile) {
showToast(R.string.active_unsaved_tips, ToastDuration.Long) { showToast(R.string.active_unsaved_tips, ToastDuration.Long) {
setAction(R.string.edit) { setAction(R.string.edit) {
requests.offer(Request.Edit(profile)) requests.trySend(Request.Edit(profile))
} }
} }
} }
@@ -84,37 +84,37 @@ class ProfilesDesign(context: Context) : Design<ProfilesDesign.Request>(context)
} }
fun requestUpdateAll() { fun requestUpdateAll() {
requests.offer(Request.UpdateAll) requests.trySend(Request.UpdateAll)
} }
fun requestCreate() { fun requestCreate() {
requests.offer(Request.Create) requests.trySend(Request.Create)
} }
private fun requestActive(profile: Profile) { private fun requestActive(profile: Profile) {
requests.offer(Request.Active(profile)) requests.trySend(Request.Active(profile))
} }
fun requestUpdate(dialog: Dialog, profile: Profile) { fun requestUpdate(dialog: Dialog, profile: Profile) {
requests.offer(Request.Update(profile)) requests.trySend(Request.Update(profile))
dialog.dismiss() dialog.dismiss()
} }
fun requestEdit(dialog: Dialog, profile: Profile) { fun requestEdit(dialog: Dialog, profile: Profile) {
requests.offer(Request.Edit(profile)) requests.trySend(Request.Edit(profile))
dialog.dismiss() dialog.dismiss()
} }
fun requestDuplicate(dialog: Dialog, profile: Profile) { fun requestDuplicate(dialog: Dialog, profile: Profile) {
requests.offer(Request.Duplicate(profile)) requests.trySend(Request.Duplicate(profile))
dialog.dismiss() dialog.dismiss()
} }
fun requestDelete(dialog: Dialog, profile: Profile) { fun requestDelete(dialog: Dialog, profile: Profile) {
requests.offer(Request.Delete(profile)) requests.trySend(Request.Delete(profile))
dialog.dismiss() dialog.dismiss()
} }

View File

@@ -142,11 +142,11 @@ class PropertiesDesign(context: Context) : Design<PropertiesDesign.Request>(cont
} }
fun requestCommit() { fun requestCommit() {
requests.offer(Request.Commit) requests.trySend(Request.Commit)
} }
fun requestBrowseFiles() { fun requestBrowseFiles() {
requests.offer(Request.BrowseFiles) requests.trySend(Request.BrowseFiles)
} }
private fun ModelProgressBarConfigure.applyFrom(status: FetchStatus) { private fun ModelProgressBarConfigure.applyFrom(status: FetchStatus) {

View File

@@ -24,7 +24,7 @@ class ProvidersDesign(
get() = binding.root get() = binding.root
private val adapter = ProviderAdapter(context, providers) { index, provider -> private val adapter = ProviderAdapter(context, providers) { index, provider ->
requests.offer(Request.Update(index, provider)) requests.trySend(Request.Update(index, provider))
} }
fun updateElapsed() { fun updateElapsed() {
@@ -56,7 +56,7 @@ class ProvidersDesign(
adapter.states.filter { !it.updating }.forEachIndexed { index, state -> adapter.states.filter { !it.updating }.forEachIndexed { index, state ->
state.updating = true state.updating = true
requests.offer(Request.Update(index, state.provider)) requests.trySend(Request.Update(index, state.provider))
} }
} }
} }

View File

@@ -134,7 +134,7 @@ class ProxyDesign(
config, config,
List(groupNames.size) { index -> List(groupNames.size) { index ->
ProxyAdapter(config) { name -> ProxyAdapter(config) { name ->
requests.offer(Request.Select(index, name)) requests.trySend(Request.Select(index, name))
} }
} }
) { ) {
@@ -171,7 +171,7 @@ class ProxyDesign(
fun requestUrlTesting() { fun requestUrlTesting() {
urlTesting = true urlTesting = true
requests.offer(Request.UrlTest(binding.pagesView.currentItem)) requests.trySend(Request.UrlTest(binding.pagesView.currentItem))
updateUrlTestButtonStatus() updateUrlTestButtonStatus()
} }

View File

@@ -28,6 +28,6 @@ class SettingsDesign(context: Context) : Design<SettingsDesign.Request>(context)
} }
fun request(request: Request) { fun request(request: Request) {
requests.offer(request) requests.trySend(request)
} }
} }

View File

@@ -28,46 +28,46 @@ class AccessControlMenu(
when (item.itemId) { when (item.itemId) {
R.id.select_all -> R.id.select_all ->
requests.offer(Request.SelectAll) requests.trySend(Request.SelectAll)
R.id.select_none -> R.id.select_none ->
requests.offer(Request.SelectNone) requests.trySend(Request.SelectNone)
R.id.select_invert -> R.id.select_invert ->
requests.offer(Request.SelectInvert) requests.trySend(Request.SelectInvert)
R.id.system_apps -> { R.id.system_apps -> {
uiStore.accessControlSystemApp = !item.isChecked uiStore.accessControlSystemApp = !item.isChecked
requests.offer(Request.ReloadApps) requests.trySend(Request.ReloadApps)
} }
R.id.name -> { R.id.name -> {
uiStore.accessControlSort = AppInfoSort.Label uiStore.accessControlSort = AppInfoSort.Label
requests.offer(Request.ReloadApps) requests.trySend(Request.ReloadApps)
} }
R.id.package_name -> { R.id.package_name -> {
uiStore.accessControlSort = AppInfoSort.PackageName uiStore.accessControlSort = AppInfoSort.PackageName
requests.offer(Request.ReloadApps) requests.trySend(Request.ReloadApps)
} }
R.id.install_time -> { R.id.install_time -> {
uiStore.accessControlSort = AppInfoSort.InstallTime uiStore.accessControlSort = AppInfoSort.InstallTime
requests.offer(Request.ReloadApps) requests.trySend(Request.ReloadApps)
} }
R.id.update_time -> { R.id.update_time -> {
uiStore.accessControlSort = AppInfoSort.UpdateTime uiStore.accessControlSort = AppInfoSort.UpdateTime
requests.offer(Request.ReloadApps) requests.trySend(Request.ReloadApps)
} }
R.id.reverse -> { R.id.reverse -> {
uiStore.accessControlReverse = item.isChecked uiStore.accessControlReverse = item.isChecked
requests.offer(Request.ReloadApps) requests.trySend(Request.ReloadApps)
} }
R.id.import_from_clipboard -> { R.id.import_from_clipboard -> {
requests.offer(Request.Import) requests.trySend(Request.Import)
} }
R.id.export_to_clipboard -> { R.id.export_to_clipboard -> {
requests.offer(Request.Export) requests.trySend(Request.Export)
} }
else -> return false else -> return false
} }

View File

@@ -8,7 +8,7 @@ import com.github.kr328.clash.design.ui.Insets
fun View.setOnInsertsChangedListener(adaptLandscape: Boolean = true, listener: (Insets) -> Unit) { fun View.setOnInsertsChangedListener(adaptLandscape: Boolean = true, listener: (Insets) -> Unit) {
setOnApplyWindowInsetsListener { v, ins -> setOnApplyWindowInsetsListener { v, ins ->
val compat = WindowInsetsCompat.toWindowInsetsCompat(ins) val compat = WindowInsetsCompat.toWindowInsetsCompat(ins)
val insets = compat.systemWindowInsets val insets = compat.getInsets(WindowInsetsCompat.Type.systemBars())
val rInsets = if (ViewCompat.getLayoutDirection(v) == ViewCompat.LAYOUT_DIRECTION_LTR) { val rInsets = if (ViewCompat.getLayoutDirection(v) == ViewCompat.LAYOUT_DIRECTION_LTR) {
Insets( Insets(
@@ -28,7 +28,7 @@ fun View.setOnInsertsChangedListener(adaptLandscape: Boolean = true, listener: (
listener(if (adaptLandscape) rInsets.landscape(v.context) else rInsets) listener(if (adaptLandscape) rInsets.landscape(v.context) else rInsets)
compat.consumeStableInsets().toWindowInsets() compat.toWindowInsets()
} }
requestApplyInsets() requestApplyInsets()

View File

@@ -6,6 +6,7 @@ import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import com.github.kr328.clash.common.Global
import com.github.kr328.clash.common.compat.pendingIntentFlags import com.github.kr328.clash.common.compat.pendingIntentFlags
import com.github.kr328.clash.common.compat.startForegroundServiceCompat import com.github.kr328.clash.common.compat.startForegroundServiceCompat
import com.github.kr328.clash.common.constants.Intents import com.github.kr328.clash.common.constants.Intents
@@ -16,7 +17,6 @@ import com.github.kr328.clash.service.data.Imported
import com.github.kr328.clash.service.data.ImportedDao import com.github.kr328.clash.service.data.ImportedDao
import com.github.kr328.clash.service.model.Profile import com.github.kr328.clash.service.model.Profile
import com.github.kr328.clash.service.util.importedDir import com.github.kr328.clash.service.util.importedDir
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.sync.withLock
@@ -27,7 +27,7 @@ class ProfileReceiver : BroadcastReceiver() {
when (intent.action) { when (intent.action) {
Intent.ACTION_BOOT_COMPLETED, Intent.ACTION_MY_PACKAGE_REPLACED, Intent.ACTION_BOOT_COMPLETED, Intent.ACTION_MY_PACKAGE_REPLACED,
Intent.ACTION_TIMEZONE_CHANGED, Intent.ACTION_TIME_CHANGED -> { Intent.ACTION_TIMEZONE_CHANGED, Intent.ACTION_TIME_CHANGED -> {
GlobalScope.launch { Global.launch {
reset() reset()
val service = Intent(Intents.ACTION_PROFILE_SCHEDULE_UPDATES) val service = Intent(Intents.ACTION_PROFILE_SCHEDULE_UPDATES)

View File

@@ -28,7 +28,7 @@ class ConfigurationModule(service: Service) : Module<ConfigurationModule.LoadExc
var loaded: UUID? = null var loaded: UUID? = null
reload.offer(Unit) reload.trySend(Unit)
while (true) { while (true) {
val changed: UUID? = select { val changed: UUID? = select {
@@ -75,6 +75,6 @@ class ConfigurationModule(service: Service) : Module<ConfigurationModule.LoadExc
} }
fun reload() { fun reload() {
reload.offer(Unit) reload.trySend(Unit)
} }
} }

View File

@@ -39,7 +39,7 @@ abstract class Module<E>(val service: Service) {
return return
} }
channel.offer(intent) channel.trySend(intent)
} }
} }

View File

@@ -36,7 +36,7 @@ class NetworkObserveModule(service: Service) :
override fun onAvailable(network: Network) { override fun onAvailable(network: Network) {
this.network = network this.network = network
networks.offer(network) networks.trySend(network)
} }
override fun onCapabilitiesChanged( override fun onCapabilitiesChanged(
@@ -49,19 +49,19 @@ class NetworkObserveModule(service: Service) :
if (this.network == network && this.internet != internet) { if (this.network == network && this.internet != internet) {
this.internet = internet this.internet = internet
networks.offer(network) networks.trySend(network)
} }
} }
override fun onLost(network: Network) { override fun onLost(network: Network) {
if (this.network == network) { if (this.network == network) {
networks.offer(null) networks.trySend(null)
} }
} }
override fun onLinkPropertiesChanged(network: Network, linkProperties: LinkProperties) { override fun onLinkPropertiesChanged(network: Network, linkProperties: LinkProperties) {
if (this.network == network) { if (this.network == network) {
networks.offer(network) networks.trySend(network)
} }
} }
} }

View File

@@ -7,7 +7,6 @@ import com.github.kr328.clash.common.Global
import com.github.kr328.clash.service.data.migrations.LEGACY_MIGRATION import com.github.kr328.clash.service.data.migrations.LEGACY_MIGRATION
import com.github.kr328.clash.service.data.migrations.MIGRATIONS import com.github.kr328.clash.service.data.migrations.MIGRATIONS
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.lang.ref.SoftReference import java.lang.ref.SoftReference
import androidx.room.Database as DB import androidx.room.Database as DB
@@ -41,7 +40,7 @@ abstract class Database : RoomDatabase() {
} }
init { init {
GlobalScope.launch(Dispatchers.IO) { Global.launch(Dispatchers.IO) {
LEGACY_MIGRATION(Global.application) LEGACY_MIGRATION(Global.application)
} }
} }