From 9837384a3b70648805d327ebf442cfcd96fec46d Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 1 Aug 2023 09:43:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/base/BaseDialogFragment.kt | 12 +++--------- .../io/legado/app/ui/about/CrashLogsDialog.kt | 13 +++++++++++-- .../app/ui/book/bookmark/BookmarkDialog.kt | 5 +++-- .../changesource/ChangeBookSourceDialog.kt | 6 +++--- .../changesource/ChangeChapterSourceDialog.kt | 4 ++-- .../app/ui/book/group/GroupManageDialog.kt | 3 ++- .../app/ui/book/group/GroupSelectDialog.kt | 3 ++- .../app/ui/book/import/remote/ServersDialog.kt | 7 ++++--- .../app/ui/book/manage/SourcePickerDialog.kt | 3 ++- .../app/ui/book/read/ContentEditDialog.kt | 5 +++-- .../ui/book/read/config/SpeakEngineDialog.kt | 18 ++++++++++++++++-- .../app/ui/book/search/SearchScopeDialog.kt | 5 +++-- .../ui/book/source/manage/GroupManageDialog.kt | 3 ++- .../app/ui/book/toc/rule/TxtTocRuleDialog.kt | 3 ++- .../app/ui/config/CoverRuleConfigDialog.kt | 3 ++- .../io/legado/app/ui/font/FontSelectDialog.kt | 17 +++++++++++++++-- .../legado/app/ui/login/SourceLoginDialog.kt | 18 ++++++++++++++++-- .../legado/app/ui/replace/GroupManageDialog.kt | 3 ++- .../ui/rss/source/manage/GroupManageDialog.kt | 3 ++- .../legado/app/ui/widget/dialog/TextDialog.kt | 3 ++- .../widget/keyboard/KeyboardAssistsConfig.kt | 9 +++++---- 21 files changed, 102 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/io/legado/app/base/BaseDialogFragment.kt b/app/src/main/java/io/legado/app/base/BaseDialogFragment.kt index 8bf17aecd..b66096cb7 100644 --- a/app/src/main/java/io/legado/app/base/BaseDialogFragment.kt +++ b/app/src/main/java/io/legado/app/base/BaseDialogFragment.kt @@ -7,21 +7,20 @@ import android.view.View import androidx.annotation.LayoutRes import androidx.fragment.app.DialogFragment import androidx.fragment.app.FragmentManager +import androidx.lifecycle.lifecycleScope import io.legado.app.R import io.legado.app.constant.AppLog import io.legado.app.help.coroutine.Coroutine import io.legado.app.lib.theme.ThemeStore import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.MainScope -import kotlinx.coroutines.cancel import kotlin.coroutines.CoroutineContext abstract class BaseDialogFragment( @LayoutRes layoutID: Int, private val adaptationSoftKeyboard: Boolean = false -) : DialogFragment(layoutID), CoroutineScope by MainScope() { +) : DialogFragment(layoutID) { private var onDismissListener: OnDismissListener? = null @@ -65,13 +64,8 @@ abstract class BaseDialogFragment( onDismissListener?.onDismiss(dialog) } - override fun onDestroy() { - super.onDestroy() - cancel() - } - fun execute( - scope: CoroutineScope = this, + scope: CoroutineScope = lifecycleScope, context: CoroutineContext = Dispatchers.IO, block: suspend CoroutineScope.() -> T ) = Coroutine.async(scope, context) { block() } diff --git a/app/src/main/java/io/legado/app/ui/about/CrashLogsDialog.kt b/app/src/main/java/io/legado/app/ui/about/CrashLogsDialog.kt index a77c9fac9..84e743633 100644 --- a/app/src/main/java/io/legado/app/ui/about/CrashLogsDialog.kt +++ b/app/src/main/java/io/legado/app/ui/about/CrashLogsDialog.kt @@ -9,6 +9,7 @@ import android.view.ViewGroup import androidx.appcompat.widget.Toolbar import androidx.fragment.app.viewModels import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.R import io.legado.app.base.BaseDialogFragment @@ -20,7 +21,15 @@ import io.legado.app.databinding.Item1lineTextBinding import io.legado.app.help.config.AppConfig import io.legado.app.lib.theme.primaryColor import io.legado.app.ui.widget.dialog.TextDialog -import io.legado.app.utils.* +import io.legado.app.utils.FileDoc +import io.legado.app.utils.FileUtils +import io.legado.app.utils.delete +import io.legado.app.utils.find +import io.legado.app.utils.getFile +import io.legado.app.utils.list +import io.legado.app.utils.setLayout +import io.legado.app.utils.showDialogFragment +import io.legado.app.utils.toastOnUi import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.isActive import java.io.FileFilter @@ -59,7 +68,7 @@ class CrashLogsDialog : BaseDialogFragment(R.layout.dialog_recycler_view), private fun showLogFile(fileDoc: FileDoc) { viewModel.readFile(fileDoc) { - if (isActive) { + if (lifecycleScope.isActive) { showDialogFragment(TextDialog(fileDoc.name, it)) } } diff --git a/app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkDialog.kt b/app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkDialog.kt index a08c1edc4..25d7f31d2 100644 --- a/app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkDialog.kt @@ -3,6 +3,7 @@ package io.legado.app.ui.book.bookmark import android.os.Bundle import android.view.View import android.view.ViewGroup +import androidx.lifecycle.lifecycleScope import io.legado.app.R import io.legado.app.base.BaseDialogFragment import io.legado.app.data.appDb @@ -57,7 +58,7 @@ class BookmarkDialog() : BaseDialogFragment(R.layout.dialog_bookmark, true) { tvOk.setOnClickListener { bookmark.bookText = editBookText.text?.toString() ?: "" bookmark.content = editContent.text?.toString() ?: "" - launch { + lifecycleScope.launch { withContext(IO) { appDb.bookmarkDao.insert(bookmark) } @@ -65,7 +66,7 @@ class BookmarkDialog() : BaseDialogFragment(R.layout.dialog_bookmark, true) { } } tvFooterLeft.setOnClickListener { - launch { + lifecycleScope.launch { withContext(IO) { appDb.bookmarkDao.delete(bookmark) } diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt index 46c1a8740..73a207284 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt @@ -75,7 +75,7 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_ if (it) { val searchGroup = AppConfig.searchGroup if (searchGroup.isNotEmpty()) { - launch { + lifecycleScope.launch { alert("搜索结果为空") { setMessage("${searchGroup}分组搜索结果为空,是否切换到全部分组") cancelButton() @@ -204,7 +204,7 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_ } } } - launch { + lifecycleScope.launch { appDb.bookSourceDao.flowEnabledGroups().flowOn(IO).conflate().collect { groups.clear() groups.addAll(it) @@ -251,7 +251,7 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_ AppConfig.searchGroup = item.title.toString() } upGroupMenuName() - launch(IO) { + lifecycleScope.launch(IO) { if (viewModel.refresh()) { viewModel.startOrStopSearch() } diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceDialog.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceDialog.kt index 246703e6d..df9042fe5 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceDialog.kt @@ -90,7 +90,7 @@ class ChangeChapterSourceDialog() : BaseDialogFragment(R.layout.dialog_chapter_c if (it) { val searchGroup = AppConfig.searchGroup if (searchGroup.isNotEmpty()) { - launch { + lifecycleScope.launch { alert("搜索结果为空") { setMessage("${searchGroup}分组搜索结果为空,是否切换到全部分组") noButton() @@ -234,7 +234,7 @@ class ChangeChapterSourceDialog() : BaseDialogFragment(R.layout.dialog_chapter_c } } } - launch { + lifecycleScope.launch { appDb.bookSourceDao.flowEnabledGroups().flowOn(IO).conflate().collect { groups.clear() groups.addAll(it) diff --git a/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt b/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt index 2347f7015..029f29e4a 100644 --- a/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt @@ -7,6 +7,7 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.Toolbar import androidx.fragment.app.viewModels +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -68,7 +69,7 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view), } private fun initData() { - launch { + lifecycleScope.launch { appDb.bookGroupDao.flowAll().conflate().collect { adapter.setItems(it) } diff --git a/app/src/main/java/io/legado/app/ui/book/group/GroupSelectDialog.kt b/app/src/main/java/io/legado/app/ui/book/group/GroupSelectDialog.kt index ebbf1a98c..e153d81b2 100644 --- a/app/src/main/java/io/legado/app/ui/book/group/GroupSelectDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/group/GroupSelectDialog.kt @@ -7,6 +7,7 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.Toolbar import androidx.fragment.app.viewModels +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -85,7 +86,7 @@ class GroupSelectDialog() : BaseDialogFragment(R.layout.dialog_book_group_picker } private fun initData() { - launch { + lifecycleScope.launch { appDb.bookGroupDao.flowSelect().conflate().collect { adapter.setItems(it) } diff --git a/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt b/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt index 913fe376c..fea16d0f2 100644 --- a/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt @@ -8,12 +8,13 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.Toolbar import androidx.fragment.app.viewModels +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.R -import io.legado.app.constant.AppConst.DEFAULT_WEBDAV_ID import io.legado.app.base.BaseDialogFragment import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.RecyclerAdapter +import io.legado.app.constant.AppConst.DEFAULT_WEBDAV_ID import io.legado.app.data.appDb import io.legado.app.data.entities.Server import io.legado.app.databinding.DialogRecyclerViewBinding @@ -77,8 +78,8 @@ class ServersDialog : BaseDialogFragment(R.layout.dialog_recycler_view), } private fun initData() { - launch { - appDb.serverDao.observeAll().collect{ + lifecycleScope.launch { + appDb.serverDao.observeAll().collect { adapter.setItems(it) } } diff --git a/app/src/main/java/io/legado/app/ui/book/manage/SourcePickerDialog.kt b/app/src/main/java/io/legado/app/ui/book/manage/SourcePickerDialog.kt index b00cbbe18..4c4a0bab1 100644 --- a/app/src/main/java/io/legado/app/ui/book/manage/SourcePickerDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/manage/SourcePickerDialog.kt @@ -6,6 +6,7 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.SearchView import androidx.core.view.setPadding +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.R import io.legado.app.base.BaseDialogFragment @@ -71,7 +72,7 @@ class SourcePickerDialog : BaseDialogFragment(R.layout.dialog_source_picker) { private fun initData(searchKey: String? = null) { sourceFlowJob?.cancel() - sourceFlowJob = launch { + sourceFlowJob = lifecycleScope.launch { when { searchKey.isNullOrEmpty() -> appDb.bookSourceDao.flowEnabled() else -> appDb.bookSourceDao.flowSearchEnabled(searchKey) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ContentEditDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/ContentEditDialog.kt index c229c906c..6b7b42b9c 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ContentEditDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ContentEditDialog.kt @@ -7,6 +7,7 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.viewModels import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.lifecycleScope import io.legado.app.R import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseViewModel @@ -48,7 +49,7 @@ class ContentEditDialog : BaseDialogFragment(R.layout.dialog_content_edit) { binding.toolBar.title = ReadBook.curTextChapter?.title initMenu() binding.toolBar.setOnClickListener { - launch { + lifecycleScope.launch { val book = ReadBook.book ?: return@launch val chapter = withContext(IO) { appDb.bookChapterDao.getChapter(book.bookUrl, ReadBook.durChapterIndex) @@ -103,7 +104,7 @@ class ContentEditDialog : BaseDialogFragment(R.layout.dialog_content_edit) { setCustomView(alertBinding.root) okButton { chapter.title = alertBinding.editView.text.toString() - launch { + lifecycleScope.launch { withContext(IO) { appDb.bookChapterDao.upDate(chapter) } diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt index fc5de6bc4..2918c1cc4 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt @@ -8,6 +8,7 @@ import android.view.ViewGroup import android.widget.RadioButton import androidx.appcompat.widget.Toolbar import androidx.fragment.app.viewModels +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.R import io.legado.app.base.BaseDialogFragment @@ -28,8 +29,21 @@ import io.legado.app.model.ReadBook import io.legado.app.ui.association.ImportHttpTtsDialog import io.legado.app.ui.file.HandleFileContract import io.legado.app.ui.login.SourceLoginActivity -import io.legado.app.utils.* +import io.legado.app.utils.ACache +import io.legado.app.utils.GSON +import io.legado.app.utils.applyTint +import io.legado.app.utils.fromJsonObject +import io.legado.app.utils.gone +import io.legado.app.utils.isAbsUrl +import io.legado.app.utils.isJsonObject +import io.legado.app.utils.sendToClip +import io.legado.app.utils.setEdgeEffectColor +import io.legado.app.utils.setLayout +import io.legado.app.utils.showDialogFragment +import io.legado.app.utils.splitNotBlank +import io.legado.app.utils.startActivity import io.legado.app.utils.viewbindingdelegate.viewBinding +import io.legado.app.utils.visible import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.launch @@ -148,7 +162,7 @@ class SpeakEngineDialog(val callBack: CallBack) : BaseDialogFragment(R.layout.di } private fun initData() { - launch { + lifecycleScope.launch { appDb.httpTTSDao.flowAll().conflate().collect { adapter.setItems(it) } diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchScopeDialog.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchScopeDialog.kt index 5b09d0a01..475c828df 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchScopeDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchScopeDialog.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.SearchView +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.RecyclerView import io.legado.app.R import io.legado.app.base.BaseDialogFragment @@ -100,7 +101,7 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) { } private fun initData() { - launch { + lifecycleScope.launch { groups = withContext(IO) { appDb.bookSourceDao.allEnabledGroups() } @@ -113,7 +114,7 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) { @SuppressLint("NotifyDataSetChanged") private fun upData() { - launch { + lifecycleScope.launch { withContext(IO) { if (binding.rbSource.isChecked) { sources.filter { source -> diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/GroupManageDialog.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/GroupManageDialog.kt index 2762d8f32..68e5bef1a 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/GroupManageDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/GroupManageDialog.kt @@ -8,6 +8,7 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.Toolbar import androidx.fragment.app.activityViewModels +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.R import io.legado.app.base.BaseDialogFragment @@ -56,7 +57,7 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view), } private fun initData() { - launch { + lifecycleScope.launch { appDb.bookSourceDao.flowGroups().flowOn(IO).collect { adapter.setItems(it) } diff --git a/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleDialog.kt b/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleDialog.kt index ccf4a0d0d..4cf25dc9f 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleDialog.kt @@ -9,6 +9,7 @@ import android.view.ViewGroup import androidx.appcompat.widget.Toolbar import androidx.core.os.bundleOf import androidx.fragment.app.viewModels +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView @@ -106,7 +107,7 @@ class TxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_toc_regex), } private fun initData() { - launch { + lifecycleScope.launch { appDb.txtTocRuleDao.observeAll().conflate().collect { tocRules -> initSelectedName(tocRules) adapter.setItems(tocRules, adapter.diffItemCallBack) diff --git a/app/src/main/java/io/legado/app/ui/config/CoverRuleConfigDialog.kt b/app/src/main/java/io/legado/app/ui/config/CoverRuleConfigDialog.kt index 21aaa071c..8d8ae8437 100644 --- a/app/src/main/java/io/legado/app/ui/config/CoverRuleConfigDialog.kt +++ b/app/src/main/java/io/legado/app/ui/config/CoverRuleConfigDialog.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.util.Log import android.view.View import android.view.ViewGroup +import androidx.lifecycle.lifecycleScope import io.legado.app.R import io.legado.app.base.BaseDialogFragment import io.legado.app.databinding.DialogCoverRuleConfigBinding @@ -53,7 +54,7 @@ class CoverRuleConfigDialog : BaseDialogFragment(R.layout.dialog_cover_rule_conf } private fun initData() { - launch { + lifecycleScope.launch { val rule = withContext(IO) { BookCover.getCoverRule() } diff --git a/app/src/main/java/io/legado/app/ui/font/FontSelectDialog.kt b/app/src/main/java/io/legado/app/ui/font/FontSelectDialog.kt index 1cef99016..cbe8910cd 100644 --- a/app/src/main/java/io/legado/app/ui/font/FontSelectDialog.kt +++ b/app/src/main/java/io/legado/app/ui/font/FontSelectDialog.kt @@ -6,6 +6,7 @@ import android.view.MenuItem import android.view.View import androidx.appcompat.widget.Toolbar import androidx.documentfile.provider.DocumentFile +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.R import io.legado.app.base.BaseDialogFragment @@ -19,7 +20,19 @@ import io.legado.app.lib.permission.Permissions import io.legado.app.lib.permission.PermissionsCompat import io.legado.app.lib.theme.primaryColor import io.legado.app.ui.file.HandleFileContract -import io.legado.app.utils.* +import io.legado.app.utils.FileDoc +import io.legado.app.utils.FileUtils +import io.legado.app.utils.RealPathUtil +import io.legado.app.utils.applyTint +import io.legado.app.utils.cnCompare +import io.legado.app.utils.externalFiles +import io.legado.app.utils.getPrefString +import io.legado.app.utils.isContentScheme +import io.legado.app.utils.list +import io.legado.app.utils.listFileDocs +import io.legado.app.utils.putPrefString +import io.legado.app.utils.setLayout +import io.legado.app.utils.toastOnUi import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.launch @@ -111,7 +124,7 @@ class FontSelectDialog : BaseDialogFragment(R.layout.dialog_font_select), } private fun openFolder() { - launch(Main) { + lifecycleScope.launch(Main) { val defaultPath = "SD${File.separator}Fonts" selectFontDir.launch { otherActions = arrayListOf(SelectItem(defaultPath, -1)) diff --git a/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt b/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt index 0af5e8491..535a607df 100644 --- a/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt +++ b/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt @@ -7,6 +7,7 @@ import android.view.View import android.view.ViewGroup import androidx.core.view.setPadding import androidx.fragment.app.activityViewModels +import androidx.lifecycle.lifecycleScope import io.legado.app.R import io.legado.app.base.BaseDialogFragment import io.legado.app.constant.AppLog @@ -19,13 +20,26 @@ import io.legado.app.help.coroutine.Coroutine import io.legado.app.lib.dialogs.alert import io.legado.app.lib.theme.primaryColor import io.legado.app.ui.about.AppLogDialog -import io.legado.app.utils.* +import io.legado.app.utils.GSON +import io.legado.app.utils.applyTint +import io.legado.app.utils.dpToPx +import io.legado.app.utils.isAbsUrl +import io.legado.app.utils.openUrl +import io.legado.app.utils.printOnDebug +import io.legado.app.utils.setLayout +import io.legado.app.utils.showDialogFragment +import io.legado.app.utils.toastOnUi import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import splitties.views.onClick +import kotlin.collections.HashMap +import kotlin.collections.List +import kotlin.collections.forEachIndexed +import kotlin.collections.hashMapOf +import kotlin.collections.set class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) { @@ -140,7 +154,7 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) { } private fun login(source: BaseSource, loginData: HashMap) { - launch(IO) { + lifecycleScope.launch(IO) { if (loginData.isEmpty()) { source.removeLoginInfo() withContext(Main) { diff --git a/app/src/main/java/io/legado/app/ui/replace/GroupManageDialog.kt b/app/src/main/java/io/legado/app/ui/replace/GroupManageDialog.kt index 4f54a77ed..85cc90b3f 100644 --- a/app/src/main/java/io/legado/app/ui/replace/GroupManageDialog.kt +++ b/app/src/main/java/io/legado/app/ui/replace/GroupManageDialog.kt @@ -8,6 +8,7 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.Toolbar import androidx.fragment.app.activityViewModels +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.R import io.legado.app.base.BaseDialogFragment @@ -59,7 +60,7 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view), } private fun initData() { - launch { + lifecycleScope.launch { appDb.replaceRuleDao.flowGroups().conflate().collect { adapter.setItems(it) } diff --git a/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt b/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt index 198d43072..f0a3b7cce 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt @@ -8,6 +8,7 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.Toolbar import androidx.fragment.app.activityViewModels +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.R import io.legado.app.base.BaseDialogFragment @@ -61,7 +62,7 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view), } private fun initData() { - launch { + lifecycleScope.launch { appDb.rssSourceDao.flowGroups().conflate().collect { adapter.setItems(it) } diff --git a/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt b/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt index 412bb200b..b546639ca 100644 --- a/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt +++ b/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt @@ -3,6 +3,7 @@ package io.legado.app.ui.widget.dialog import android.os.Bundle import android.view.View import android.view.ViewGroup +import androidx.lifecycle.lifecycleScope import io.legado.app.R import io.legado.app.base.BaseDialogFragment import io.legado.app.databinding.DialogTextViewBinding @@ -80,7 +81,7 @@ class TextDialog() : BaseDialogFragment(R.layout.dialog_text_view) { } if (time > 0) { binding.badgeView.setBadgeCount((time / 1000).toInt()) - launch { + lifecycleScope.launch { while (time > 0) { delay(1000) time -= 1000 diff --git a/app/src/main/java/io/legado/app/ui/widget/keyboard/KeyboardAssistsConfig.kt b/app/src/main/java/io/legado/app/ui/widget/keyboard/KeyboardAssistsConfig.kt index 6fa09ac46..d8111deab 100644 --- a/app/src/main/java/io/legado/app/ui/widget/keyboard/KeyboardAssistsConfig.kt +++ b/app/src/main/java/io/legado/app/ui/widget/keyboard/KeyboardAssistsConfig.kt @@ -7,6 +7,7 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.Toolbar import androidx.core.view.setPadding +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -67,7 +68,7 @@ class KeyboardAssistsConfig : BaseDialogFragment(R.layout.dialog_recycler_view), } private fun initData() { - launch { + lifecycleScope.launch { appDb.keyboardAssistsDao.flowAll.collect { adapter.setItems(it) } @@ -94,7 +95,7 @@ class KeyboardAssistsConfig : BaseDialogFragment(R.layout.dialog_recycler_view), setCustomView(alertBinding.root) cancelButton() okButton { - launch(IO) { + lifecycleScope.launch(IO) { val newKeyboardAssist = KeyboardAssist( key = alertBinding.edit1.text.toString(), value = alertBinding.edit2.text.toString() @@ -142,7 +143,7 @@ class KeyboardAssistsConfig : BaseDialogFragment(R.layout.dialog_recycler_view), } binding.ivDelete.setOnClickListener { getItemByLayoutPosition(holder.layoutPosition)?.let { keyboardAssist -> - launch(IO) { + lifecycleScope.launch(IO) { appDb.keyboardAssistsDao.delete(keyboardAssist) } } @@ -160,7 +161,7 @@ class KeyboardAssistsConfig : BaseDialogFragment(R.layout.dialog_recycler_view), for ((index, item) in getItems().withIndex()) { item.serialNo = index + 1 } - launch(IO) { + lifecycleScope.launch(IO) { appDb.keyboardAssistsDao.update(*getItems().toTypedArray()) } }