kunfei 3 yıl önce
ebeveyn
işleme
6f53273a53
21 değiştirilmiş dosya ile 102 ekleme ve 44 silme
  1. 3 9
      app/src/main/java/io/legado/app/base/BaseDialogFragment.kt
  2. 11 2
      app/src/main/java/io/legado/app/ui/about/CrashLogsDialog.kt
  3. 3 2
      app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkDialog.kt
  4. 3 3
      app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt
  5. 2 2
      app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceDialog.kt
  6. 2 1
      app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt
  7. 2 1
      app/src/main/java/io/legado/app/ui/book/group/GroupSelectDialog.kt
  8. 4 3
      app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt
  9. 2 1
      app/src/main/java/io/legado/app/ui/book/manage/SourcePickerDialog.kt
  10. 3 2
      app/src/main/java/io/legado/app/ui/book/read/ContentEditDialog.kt
  11. 16 2
      app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt
  12. 3 2
      app/src/main/java/io/legado/app/ui/book/search/SearchScopeDialog.kt
  13. 2 1
      app/src/main/java/io/legado/app/ui/book/source/manage/GroupManageDialog.kt
  14. 2 1
      app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleDialog.kt
  15. 2 1
      app/src/main/java/io/legado/app/ui/config/CoverRuleConfigDialog.kt
  16. 15 2
      app/src/main/java/io/legado/app/ui/font/FontSelectDialog.kt
  17. 16 2
      app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt
  18. 2 1
      app/src/main/java/io/legado/app/ui/replace/GroupManageDialog.kt
  19. 2 1
      app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt
  20. 2 1
      app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt
  21. 5 4
      app/src/main/java/io/legado/app/ui/widget/keyboard/KeyboardAssistsConfig.kt

+ 3 - 9
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 <T> execute(
-        scope: CoroutineScope = this,
+        scope: CoroutineScope = lifecycleScope,
         context: CoroutineContext = Dispatchers.IO,
         block: suspend CoroutineScope.() -> T
     ) = Coroutine.async(scope, context) { block() }

+ 11 - 2
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))
             }
         }

+ 3 - 2
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)
                     }

+ 3 - 3
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()
                     }

+ 2 - 2
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)

+ 2 - 1
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)
             }

+ 2 - 1
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)
             }

+ 4 - 3
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)
             }
         }

+ 2 - 1
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)

+ 3 - 2
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)
                     }

+ 16 - 2
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)
             }

+ 3 - 2
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 ->

+ 2 - 1
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)
             }

+ 2 - 1
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)

+ 2 - 1
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()
             }

+ 15 - 2
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))

+ 16 - 2
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<String, String>) {
-        launch(IO) {
+        lifecycleScope.launch(IO) {
             if (loginData.isEmpty()) {
                 source.removeLoginInfo()
                 withContext(Main) {

+ 2 - 1
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)
             }

+ 2 - 1
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)
             }

+ 2 - 1
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

+ 5 - 4
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())
                 }
             }