diff --git a/app/src/main/java/com/github/kr328/clash/BaseActivity.kt b/app/src/main/java/com/github/kr328/clash/BaseActivity.kt index 83073345..4347756a 100644 --- a/app/src/main/java/com/github/kr328/clash/BaseActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/BaseActivity.kt @@ -114,7 +114,7 @@ abstract class BaseActivity> : Remote.broadcasts.addObserver(this) - events.offer(Event.ActivityStart) + events.trySend(Event.ActivityStart) } override fun onStop() { @@ -124,7 +124,7 @@ abstract class BaseActivity> : Remote.broadcasts.removeObserver(this) - events.offer(Event.ActivityStop) + events.trySend(Event.ActivityStop) } override fun onDestroy() { @@ -174,23 +174,23 @@ abstract class BaseActivity> : } override fun onProfileChanged() { - events.offer(Event.ProfileChanged) + events.trySend(Event.ProfileChanged) } override fun onProfileLoaded() { - events.offer(Event.ProfileLoaded) + events.trySend(Event.ProfileLoaded) } override fun onServiceRecreated() { - events.offer(Event.ServiceRecreated) + events.trySend(Event.ServiceRecreated) } override fun onStarted() { - events.offer(Event.ClashStart) + events.trySend(Event.ClashStart) } override fun onStopped(cause: String?) { - events.offer(Event.ClashStop) + events.trySend(Event.ClashStop) if (cause != null && activityStarted) { launch { diff --git a/app/src/main/java/com/github/kr328/clash/FilesActivity.kt b/app/src/main/java/com/github/kr328/clash/FilesActivity.kt index e8ebb3d1..c71e6830 100644 --- a/app/src/main/java/com/github/kr328/clash/FilesActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/FilesActivity.kt @@ -141,7 +141,7 @@ class FilesActivity : BaseActivity() { } override fun onBackPressed() { - design?.requests?.offer(FilesDesign.Request.PopStack) + design?.requests?.trySend(FilesDesign.Request.PopStack) } private suspend fun FilesDesign.fetch(client: FilesClient, stack: Stack, root: String) { diff --git a/app/src/main/java/com/github/kr328/clash/LogcatService.kt b/app/src/main/java/com/github/kr328/clash/LogcatService.kt index bb17c24e..11a75757 100644 --- a/app/src/main/java/com/github/kr328/clash/LogcatService.kt +++ b/app/src/main/java/com/github/kr328/clash/LogcatService.kt @@ -97,7 +97,7 @@ class LogcatService : Service(), CoroutineScope by CoroutineScope(Dispatchers.De LogcatWriter(this@LogcatService).use { val observer = object : ILogObserver { override fun newItem(log: LogMessage) { - channel.offer(log) + channel.trySend(log) } } diff --git a/app/src/main/java/com/github/kr328/clash/LogsActivity.kt b/app/src/main/java/com/github/kr328/clash/LogsActivity.kt index d3a36242..0a482b65 100644 --- a/app/src/main/java/com/github/kr328/clash/LogsActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/LogsActivity.kt @@ -47,7 +47,7 @@ class LogsActivity : BaseActivity() { deleteAllLogs() } - events.offer(Event.ActivityStart) + events.trySend(Event.ActivityStart) } } is LogsDesign.Request.OpenFile -> { diff --git a/app/src/main/java/com/github/kr328/clash/MainApplication.kt b/app/src/main/java/com/github/kr328/clash/MainApplication.kt index 4393905d..13fe5eb2 100644 --- a/app/src/main/java/com/github/kr328/clash/MainApplication.kt +++ b/app/src/main/java/com/github/kr328/clash/MainApplication.kt @@ -32,4 +32,8 @@ class MainApplication : Application() { sendServiceRecreated() } } + + fun finalize() { + Global.destroy() + } } \ No newline at end of file diff --git a/app/src/main/java/com/github/kr328/clash/ProxyActivity.kt b/app/src/main/java/com/github/kr328/clash/ProxyActivity.kt index a57cd073..fddebcf0 100644 --- a/app/src/main/java/com/github/kr328/clash/ProxyActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/ProxyActivity.kt @@ -73,7 +73,7 @@ class ProxyActivity : BaseActivity() { } ProxyDesign.Request.ReloadAll -> { names.indices.forEach { idx -> - design.requests.offer(ProxyDesign.Request.Reload(idx)) + design.requests.trySend(ProxyDesign.Request.Reload(idx)) } } is ProxyDesign.Request.Reload -> { diff --git a/app/src/main/java/com/github/kr328/clash/remote/Remote.kt b/app/src/main/java/com/github/kr328/clash/remote/Remote.kt index 53f78f36..664ecc3a 100644 --- a/app/src/main/java/com/github/kr328/clash/remote/Remote.kt +++ b/app/src/main/java/com/github/kr328/clash/remote/Remote.kt @@ -10,7 +10,6 @@ import com.github.kr328.clash.store.AppStore import com.github.kr328.clash.util.ApplicationObserver import com.github.kr328.clash.util.verifyApk import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.launch @@ -30,9 +29,9 @@ object Remote { fun launch() { ApplicationObserver.attach(Global.application) - ApplicationObserver.onVisibleChanged(visible::offer) + ApplicationObserver.onVisibleChanged { visible.trySend(it) } - GlobalScope.launch(Dispatchers.IO) { + Global.launch(Dispatchers.IO) { run() } } diff --git a/common/src/main/java/com/github/kr328/clash/common/Global.kt b/common/src/main/java/com/github/kr328/clash/common/Global.kt index 086d48a3..bea22010 100644 --- a/common/src/main/java/com/github/kr328/clash/common/Global.kt +++ b/common/src/main/java/com/github/kr328/clash/common/Global.kt @@ -1,8 +1,11 @@ package com.github.kr328.clash.common 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 get() = application_ @@ -11,4 +14,8 @@ object Global { fun init(application: Application) { this.application_ = application } + + fun destroy() { + cancel() + } } \ No newline at end of file diff --git a/core/src/main/java/com/github/kr328/clash/core/Clash.kt b/core/src/main/java/com/github/kr328/clash/core/Clash.kt index aace5e2a..bf58ae52 100644 --- a/core/src/main/java/com/github/kr328/clash/core/Clash.kt +++ b/core/src/main/java/com/github/kr328/clash/core/Clash.kt @@ -218,7 +218,7 @@ object Clash { return Channel(32).apply { Bridge.nativeSubscribeLogcat(object : LogcatInterface { override fun received(jsonPayload: String) { - offer(Json.decodeFromString(LogMessage.serializer(), jsonPayload)) + trySend(Json.decodeFromString(LogMessage.serializer(), jsonPayload)) } }) } diff --git a/design/src/foss/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt b/design/src/foss/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt index 80c2a92e..ae0a592f 100644 --- a/design/src/foss/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt +++ b/design/src/foss/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt @@ -236,7 +236,7 @@ class OverrideSettingsDesign( summary = R.string.sideload_geoip_summary ) { clicked { - requests.offer(Request.EditSideloadGeoip) + requests.trySend(Request.EditSideloadGeoip) } } @@ -394,6 +394,6 @@ class OverrideSettingsDesign( } fun requestClear() { - requests.offer(Request.ResetOverride) + requests.trySend(Request.ResetOverride) } } \ No newline at end of file diff --git a/design/src/foss/java/com/github/kr328/clash/design/component/ProxyMenu.kt b/design/src/foss/java/com/github/kr328/clash/design/component/ProxyMenu.kt index 52f6be0a..017601f9 100644 --- a/design/src/foss/java/com/github/kr328/clash/design/component/ProxyMenu.kt +++ b/design/src/foss/java/com/github/kr328/clash/design/component/ProxyMenu.kt @@ -32,48 +32,48 @@ class ProxyMenu( R.id.not_selectable -> { uiStore.proxyExcludeNotSelectable = item.isChecked - requests.offer(ProxyDesign.Request.ReLaunch) + requests.trySend(ProxyDesign.Request.ReLaunch) } R.id.single -> { uiStore.proxySingleLine = true updateConfig() - requests.offer(ProxyDesign.Request.ReloadAll) + requests.trySend(ProxyDesign.Request.ReloadAll) } R.id.multiple -> { uiStore.proxySingleLine = false updateConfig() - requests.offer(ProxyDesign.Request.ReloadAll) + requests.trySend(ProxyDesign.Request.ReloadAll) } R.id.default_ -> { uiStore.proxySort = ProxySort.Default - requests.offer(ProxyDesign.Request.ReloadAll) + requests.trySend(ProxyDesign.Request.ReloadAll) } R.id.name -> { uiStore.proxySort = ProxySort.Title - requests.offer(ProxyDesign.Request.ReloadAll) + requests.trySend(ProxyDesign.Request.ReloadAll) } R.id.delay -> { uiStore.proxySort = ProxySort.Delay - requests.offer(ProxyDesign.Request.ReloadAll) + requests.trySend(ProxyDesign.Request.ReloadAll) } R.id.dont_modify -> { - requests.offer(ProxyDesign.Request.PatchMode(null)) + requests.trySend(ProxyDesign.Request.PatchMode(null)) } R.id.direct_mode -> { - requests.offer(ProxyDesign.Request.PatchMode(TunnelState.Mode.Direct)) + requests.trySend(ProxyDesign.Request.PatchMode(TunnelState.Mode.Direct)) } R.id.global_mode -> { - requests.offer(ProxyDesign.Request.PatchMode(TunnelState.Mode.Global)) + requests.trySend(ProxyDesign.Request.PatchMode(TunnelState.Mode.Global)) } R.id.rule_mode -> { - requests.offer(ProxyDesign.Request.PatchMode(TunnelState.Mode.Rule)) + requests.trySend(ProxyDesign.Request.PatchMode(TunnelState.Mode.Rule)) } else -> return false } diff --git a/design/src/main/java/com/github/kr328/clash/design/AccessControlDesign.kt b/design/src/main/java/com/github/kr328/clash/design/AccessControlDesign.kt index a50c8035..cc1d2c80 100644 --- a/design/src/main/java/com/github/kr328/clash/design/AccessControlDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/AccessControlDesign.kt @@ -93,7 +93,7 @@ class AccessControlDesign( binding.surface = dialog.surface binding.mainList.applyLinearAdapter(context, adapter) binding.keywordView.addTextChangedListener { - filter.offer(Unit) + filter.trySend(Unit) } binding.closeView.setOnClickListener { dialog.dismiss() diff --git a/design/src/main/java/com/github/kr328/clash/design/ApkBrokenDesign.kt b/design/src/main/java/com/github/kr328/clash/design/ApkBrokenDesign.kt index a99483d5..56dd6132 100644 --- a/design/src/main/java/com/github/kr328/clash/design/ApkBrokenDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/ApkBrokenDesign.kt @@ -38,7 +38,7 @@ class ApkBrokenDesign(context: Context) : Design(contex summary = R.string.google_play_url ) { 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(contex summary = R.string.github_releases_url ) { clicked { - requests.offer(Request(context.getString(R.string.github_releases_url))) + requests.trySend(Request(context.getString(R.string.github_releases_url))) } } } diff --git a/design/src/main/java/com/github/kr328/clash/design/AppSettingsDesign.kt b/design/src/main/java/com/github/kr328/clash/design/AppSettingsDesign.kt index 94352a27..ad296de5 100644 --- a/design/src/main/java/com/github/kr328/clash/design/AppSettingsDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/AppSettingsDesign.kt @@ -61,7 +61,7 @@ class AppSettingsDesign( title = R.string.dark_mode ) { listener = OnChangedListener { - requests.offer(Request.ReCreateAllActivities) + requests.trySend(Request.ReCreateAllActivities) } } diff --git a/design/src/main/java/com/github/kr328/clash/design/FilesDesign.kt b/design/src/main/java/com/github/kr328/clash/design/FilesDesign.kt index b6ccb73f..cab7c2d9 100644 --- a/design/src/main/java/com/github/kr328/clash/design/FilesDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/FilesDesign.kt @@ -72,38 +72,38 @@ class FilesDesign(context: Context) : Design(context) { private fun requestOpen(file: File) { if (file.isDirectory) { - requests.offer(Request.OpenDirectory(file)) + requests.trySend(Request.OpenDirectory(file)) } else { - requests.offer(Request.OpenFile(file)) + requests.trySend(Request.OpenFile(file)) } } fun requestRename(dialog: Dialog, file: File) { - requests.offer(Request.RenameFile(file)) + requests.trySend(Request.RenameFile(file)) dialog.dismiss() } fun requestImport(dialog: Dialog, file: File) { - requests.offer(Request.ImportFile(file)) + requests.trySend(Request.ImportFile(file)) dialog.dismiss() } fun requestExport(dialog: Dialog, file: File) { - requests.offer(Request.ExportFile(file)) + requests.trySend(Request.ExportFile(file)) dialog.dismiss() } fun requestDelete(dialog: Dialog, file: File) { - requests.offer(Request.DeleteFile(file)) + requests.trySend(Request.DeleteFile(file)) dialog.dismiss() } fun requestNew() { - requests.offer(Request.ImportFile(null)) + requests.trySend(Request.ImportFile(null)) } private fun requestMore(file: File) { diff --git a/design/src/main/java/com/github/kr328/clash/design/LogsDesign.kt b/design/src/main/java/com/github/kr328/clash/design/LogsDesign.kt index 803bf6d1..64a17e60 100644 --- a/design/src/main/java/com/github/kr328/clash/design/LogsDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/LogsDesign.kt @@ -23,7 +23,7 @@ class LogsDesign(context: Context) : Design(context) { private val binding = DesignLogsBinding .inflate(context.layoutInflater, context.root, false) private val adapter = LogFileAdapter(context) { - requests.offer(Request.OpenFile(it)) + requests.trySend(Request.OpenFile(it)) } override val root: View diff --git a/design/src/main/java/com/github/kr328/clash/design/MainDesign.kt b/design/src/main/java/com/github/kr328/clash/design/MainDesign.kt index 524eef5e..b1e0180b 100644 --- a/design/src/main/java/com/github/kr328/clash/design/MainDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/MainDesign.kt @@ -97,6 +97,6 @@ class MainDesign(context: Context) : Design(context) { } fun request(request: Request) { - requests.offer(request) + requests.trySend(request) } } \ No newline at end of file diff --git a/design/src/main/java/com/github/kr328/clash/design/NetworkSettingsDesign.kt b/design/src/main/java/com/github/kr328/clash/design/NetworkSettingsDesign.kt index 0c430402..5dad3e4d 100644 --- a/design/src/main/java/com/github/kr328/clash/design/NetworkSettingsDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/NetworkSettingsDesign.kt @@ -96,7 +96,7 @@ class NetworkSettingsDesign( summary = R.string.access_control_packages_summary, ) { clicked { - requests.offer(Request.StartAccessControlList) + requests.trySend(Request.StartAccessControlList) } vpnDependencies.add(this) diff --git a/design/src/main/java/com/github/kr328/clash/design/NewProfileDesign.kt b/design/src/main/java/com/github/kr328/clash/design/NewProfileDesign.kt index 642aca9e..e38d01e7 100644 --- a/design/src/main/java/com/github/kr328/clash/design/NewProfileDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/NewProfileDesign.kt @@ -38,13 +38,13 @@ class NewProfileDesign(context: Context) : Design(cont } private fun requestCreate(provider: ProfileProvider) { - requests.offer(Request.Create(provider)) + requests.trySend(Request.Create(provider)) } private fun requestDetail(provider: ProfileProvider): Boolean { if (provider !is ProfileProvider.External) return false - requests.offer(Request.OpenDetail(provider)) + requests.trySend(Request.OpenDetail(provider)) return true } diff --git a/design/src/main/java/com/github/kr328/clash/design/ProfilesDesign.kt b/design/src/main/java/com/github/kr328/clash/design/ProfilesDesign.kt index e0caed84..33c14677 100644 --- a/design/src/main/java/com/github/kr328/clash/design/ProfilesDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/ProfilesDesign.kt @@ -49,7 +49,7 @@ class ProfilesDesign(context: Context) : Design(context) suspend fun requestSave(profile: Profile) { showToast(R.string.active_unsaved_tips, ToastDuration.Long) { setAction(R.string.edit) { - requests.offer(Request.Edit(profile)) + requests.trySend(Request.Edit(profile)) } } } @@ -84,37 +84,37 @@ class ProfilesDesign(context: Context) : Design(context) } fun requestUpdateAll() { - requests.offer(Request.UpdateAll) + requests.trySend(Request.UpdateAll) } fun requestCreate() { - requests.offer(Request.Create) + requests.trySend(Request.Create) } private fun requestActive(profile: Profile) { - requests.offer(Request.Active(profile)) + requests.trySend(Request.Active(profile)) } fun requestUpdate(dialog: Dialog, profile: Profile) { - requests.offer(Request.Update(profile)) + requests.trySend(Request.Update(profile)) dialog.dismiss() } fun requestEdit(dialog: Dialog, profile: Profile) { - requests.offer(Request.Edit(profile)) + requests.trySend(Request.Edit(profile)) dialog.dismiss() } fun requestDuplicate(dialog: Dialog, profile: Profile) { - requests.offer(Request.Duplicate(profile)) + requests.trySend(Request.Duplicate(profile)) dialog.dismiss() } fun requestDelete(dialog: Dialog, profile: Profile) { - requests.offer(Request.Delete(profile)) + requests.trySend(Request.Delete(profile)) dialog.dismiss() } diff --git a/design/src/main/java/com/github/kr328/clash/design/PropertiesDesign.kt b/design/src/main/java/com/github/kr328/clash/design/PropertiesDesign.kt index 5a7439bc..e18fafdf 100644 --- a/design/src/main/java/com/github/kr328/clash/design/PropertiesDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/PropertiesDesign.kt @@ -142,11 +142,11 @@ class PropertiesDesign(context: Context) : Design(cont } fun requestCommit() { - requests.offer(Request.Commit) + requests.trySend(Request.Commit) } fun requestBrowseFiles() { - requests.offer(Request.BrowseFiles) + requests.trySend(Request.BrowseFiles) } private fun ModelProgressBarConfigure.applyFrom(status: FetchStatus) { diff --git a/design/src/main/java/com/github/kr328/clash/design/ProvidersDesign.kt b/design/src/main/java/com/github/kr328/clash/design/ProvidersDesign.kt index fa5e13e3..b193783c 100644 --- a/design/src/main/java/com/github/kr328/clash/design/ProvidersDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/ProvidersDesign.kt @@ -24,7 +24,7 @@ class ProvidersDesign( get() = binding.root private val adapter = ProviderAdapter(context, providers) { index, provider -> - requests.offer(Request.Update(index, provider)) + requests.trySend(Request.Update(index, provider)) } fun updateElapsed() { @@ -56,7 +56,7 @@ class ProvidersDesign( adapter.states.filter { !it.updating }.forEachIndexed { index, state -> state.updating = true - requests.offer(Request.Update(index, state.provider)) + requests.trySend(Request.Update(index, state.provider)) } } } \ No newline at end of file diff --git a/design/src/main/java/com/github/kr328/clash/design/ProxyDesign.kt b/design/src/main/java/com/github/kr328/clash/design/ProxyDesign.kt index efdf83de..487e8767 100644 --- a/design/src/main/java/com/github/kr328/clash/design/ProxyDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/ProxyDesign.kt @@ -134,7 +134,7 @@ class ProxyDesign( config, List(groupNames.size) { index -> ProxyAdapter(config) { name -> - requests.offer(Request.Select(index, name)) + requests.trySend(Request.Select(index, name)) } } ) { @@ -171,7 +171,7 @@ class ProxyDesign( fun requestUrlTesting() { urlTesting = true - requests.offer(Request.UrlTest(binding.pagesView.currentItem)) + requests.trySend(Request.UrlTest(binding.pagesView.currentItem)) updateUrlTestButtonStatus() } diff --git a/design/src/main/java/com/github/kr328/clash/design/SettingsDesign.kt b/design/src/main/java/com/github/kr328/clash/design/SettingsDesign.kt index 51696023..d6f6c190 100644 --- a/design/src/main/java/com/github/kr328/clash/design/SettingsDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/SettingsDesign.kt @@ -28,6 +28,6 @@ class SettingsDesign(context: Context) : Design(context) } fun request(request: Request) { - requests.offer(request) + requests.trySend(request) } } \ No newline at end of file diff --git a/design/src/main/java/com/github/kr328/clash/design/component/AccessControlMenu.kt b/design/src/main/java/com/github/kr328/clash/design/component/AccessControlMenu.kt index 70e2c913..ae3bbc59 100644 --- a/design/src/main/java/com/github/kr328/clash/design/component/AccessControlMenu.kt +++ b/design/src/main/java/com/github/kr328/clash/design/component/AccessControlMenu.kt @@ -28,46 +28,46 @@ class AccessControlMenu( when (item.itemId) { R.id.select_all -> - requests.offer(Request.SelectAll) + requests.trySend(Request.SelectAll) R.id.select_none -> - requests.offer(Request.SelectNone) + requests.trySend(Request.SelectNone) R.id.select_invert -> - requests.offer(Request.SelectInvert) + requests.trySend(Request.SelectInvert) R.id.system_apps -> { uiStore.accessControlSystemApp = !item.isChecked - requests.offer(Request.ReloadApps) + requests.trySend(Request.ReloadApps) } R.id.name -> { uiStore.accessControlSort = AppInfoSort.Label - requests.offer(Request.ReloadApps) + requests.trySend(Request.ReloadApps) } R.id.package_name -> { uiStore.accessControlSort = AppInfoSort.PackageName - requests.offer(Request.ReloadApps) + requests.trySend(Request.ReloadApps) } R.id.install_time -> { uiStore.accessControlSort = AppInfoSort.InstallTime - requests.offer(Request.ReloadApps) + requests.trySend(Request.ReloadApps) } R.id.update_time -> { uiStore.accessControlSort = AppInfoSort.UpdateTime - requests.offer(Request.ReloadApps) + requests.trySend(Request.ReloadApps) } R.id.reverse -> { uiStore.accessControlReverse = item.isChecked - requests.offer(Request.ReloadApps) + requests.trySend(Request.ReloadApps) } R.id.import_from_clipboard -> { - requests.offer(Request.Import) + requests.trySend(Request.Import) } R.id.export_to_clipboard -> { - requests.offer(Request.Export) + requests.trySend(Request.Export) } else -> return false } diff --git a/design/src/main/java/com/github/kr328/clash/design/util/Inserts.kt b/design/src/main/java/com/github/kr328/clash/design/util/Inserts.kt index 91b6ab95..65255781 100644 --- a/design/src/main/java/com/github/kr328/clash/design/util/Inserts.kt +++ b/design/src/main/java/com/github/kr328/clash/design/util/Inserts.kt @@ -8,7 +8,7 @@ import com.github.kr328.clash.design.ui.Insets fun View.setOnInsertsChangedListener(adaptLandscape: Boolean = true, listener: (Insets) -> Unit) { setOnApplyWindowInsetsListener { v, 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) { Insets( @@ -28,7 +28,7 @@ fun View.setOnInsertsChangedListener(adaptLandscape: Boolean = true, listener: ( listener(if (adaptLandscape) rInsets.landscape(v.context) else rInsets) - compat.consumeStableInsets().toWindowInsets() + compat.toWindowInsets() } requestApplyInsets() diff --git a/service/src/main/java/com/github/kr328/clash/service/ProfileReceiver.kt b/service/src/main/java/com/github/kr328/clash/service/ProfileReceiver.kt index f81a817d..8488a234 100644 --- a/service/src/main/java/com/github/kr328/clash/service/ProfileReceiver.kt +++ b/service/src/main/java/com/github/kr328/clash/service/ProfileReceiver.kt @@ -6,6 +6,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent 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.startForegroundServiceCompat 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.model.Profile import com.github.kr328.clash.service.util.importedDir -import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock @@ -27,7 +27,7 @@ class ProfileReceiver : BroadcastReceiver() { when (intent.action) { Intent.ACTION_BOOT_COMPLETED, Intent.ACTION_MY_PACKAGE_REPLACED, Intent.ACTION_TIMEZONE_CHANGED, Intent.ACTION_TIME_CHANGED -> { - GlobalScope.launch { + Global.launch { reset() val service = Intent(Intents.ACTION_PROFILE_SCHEDULE_UPDATES) diff --git a/service/src/main/java/com/github/kr328/clash/service/clash/module/ConfigurationModule.kt b/service/src/main/java/com/github/kr328/clash/service/clash/module/ConfigurationModule.kt index 202643c9..7be05436 100644 --- a/service/src/main/java/com/github/kr328/clash/service/clash/module/ConfigurationModule.kt +++ b/service/src/main/java/com/github/kr328/clash/service/clash/module/ConfigurationModule.kt @@ -28,7 +28,7 @@ class ConfigurationModule(service: Service) : Module(val service: Service) { return } - channel.offer(intent) + channel.trySend(intent) } } diff --git a/service/src/main/java/com/github/kr328/clash/service/clash/module/NetworkObserveModule.kt b/service/src/main/java/com/github/kr328/clash/service/clash/module/NetworkObserveModule.kt index 877662b6..d1f48fc6 100644 --- a/service/src/main/java/com/github/kr328/clash/service/clash/module/NetworkObserveModule.kt +++ b/service/src/main/java/com/github/kr328/clash/service/clash/module/NetworkObserveModule.kt @@ -36,7 +36,7 @@ class NetworkObserveModule(service: Service) : override fun onAvailable(network: Network) { this.network = network - networks.offer(network) + networks.trySend(network) } override fun onCapabilitiesChanged( @@ -49,19 +49,19 @@ class NetworkObserveModule(service: Service) : if (this.network == network && this.internet != internet) { this.internet = internet - networks.offer(network) + networks.trySend(network) } } override fun onLost(network: Network) { if (this.network == network) { - networks.offer(null) + networks.trySend(null) } } override fun onLinkPropertiesChanged(network: Network, linkProperties: LinkProperties) { if (this.network == network) { - networks.offer(network) + networks.trySend(network) } } } diff --git a/service/src/main/java/com/github/kr328/clash/service/data/Database.kt b/service/src/main/java/com/github/kr328/clash/service/data/Database.kt index 550c976f..e8f4b608 100644 --- a/service/src/main/java/com/github/kr328/clash/service/data/Database.kt +++ b/service/src/main/java/com/github/kr328/clash/service/data/Database.kt @@ -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.MIGRATIONS import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import java.lang.ref.SoftReference import androidx.room.Database as DB @@ -41,7 +40,7 @@ abstract class Database : RoomDatabase() { } init { - GlobalScope.launch(Dispatchers.IO) { + Global.launch(Dispatchers.IO) { LEGACY_MIGRATION(Global.application) } }