This commit is contained in:
kunfei
2023-08-01 09:43:56 +08:00
parent e28a72297b
commit 6f53273a53
21 changed files with 102 additions and 44 deletions
@@ -7,21 +7,20 @@ import android.view.View
import androidx.annotation.LayoutRes import androidx.annotation.LayoutRes
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.lifecycle.lifecycleScope
import io.legado.app.R import io.legado.app.R
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
import io.legado.app.help.coroutine.Coroutine import io.legado.app.help.coroutine.Coroutine
import io.legado.app.lib.theme.ThemeStore import io.legado.app.lib.theme.ThemeStore
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.cancel
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
abstract class BaseDialogFragment( abstract class BaseDialogFragment(
@LayoutRes layoutID: Int, @LayoutRes layoutID: Int,
private val adaptationSoftKeyboard: Boolean = false private val adaptationSoftKeyboard: Boolean = false
) : DialogFragment(layoutID), CoroutineScope by MainScope() { ) : DialogFragment(layoutID) {
private var onDismissListener: OnDismissListener? = null private var onDismissListener: OnDismissListener? = null
@@ -65,13 +64,8 @@ abstract class BaseDialogFragment(
onDismissListener?.onDismiss(dialog) onDismissListener?.onDismiss(dialog)
} }
override fun onDestroy() {
super.onDestroy()
cancel()
}
fun <T> execute( fun <T> execute(
scope: CoroutineScope = this, scope: CoroutineScope = lifecycleScope,
context: CoroutineContext = Dispatchers.IO, context: CoroutineContext = Dispatchers.IO,
block: suspend CoroutineScope.() -> T block: suspend CoroutineScope.() -> T
) = Coroutine.async(scope, context) { block() } ) = Coroutine.async(scope, context) { block() }
@@ -9,6 +9,7 @@ import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment 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.help.config.AppConfig
import io.legado.app.lib.theme.primaryColor import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.dialog.TextDialog 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 io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import java.io.FileFilter import java.io.FileFilter
@@ -59,7 +68,7 @@ class CrashLogsDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
private fun showLogFile(fileDoc: FileDoc) { private fun showLogFile(fileDoc: FileDoc) {
viewModel.readFile(fileDoc) { viewModel.readFile(fileDoc) {
if (isActive) { if (lifecycleScope.isActive) {
showDialogFragment(TextDialog(fileDoc.name, it)) showDialogFragment(TextDialog(fileDoc.name, it))
} }
} }
@@ -3,6 +3,7 @@ package io.legado.app.ui.book.bookmark
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.lifecycle.lifecycleScope
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.data.appDb import io.legado.app.data.appDb
@@ -57,7 +58,7 @@ class BookmarkDialog() : BaseDialogFragment(R.layout.dialog_bookmark, true) {
tvOk.setOnClickListener { tvOk.setOnClickListener {
bookmark.bookText = editBookText.text?.toString() ?: "" bookmark.bookText = editBookText.text?.toString() ?: ""
bookmark.content = editContent.text?.toString() ?: "" bookmark.content = editContent.text?.toString() ?: ""
launch { lifecycleScope.launch {
withContext(IO) { withContext(IO) {
appDb.bookmarkDao.insert(bookmark) appDb.bookmarkDao.insert(bookmark)
} }
@@ -65,7 +66,7 @@ class BookmarkDialog() : BaseDialogFragment(R.layout.dialog_bookmark, true) {
} }
} }
tvFooterLeft.setOnClickListener { tvFooterLeft.setOnClickListener {
launch { lifecycleScope.launch {
withContext(IO) { withContext(IO) {
appDb.bookmarkDao.delete(bookmark) appDb.bookmarkDao.delete(bookmark)
} }
@@ -75,7 +75,7 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_
if (it) { if (it) {
val searchGroup = AppConfig.searchGroup val searchGroup = AppConfig.searchGroup
if (searchGroup.isNotEmpty()) { if (searchGroup.isNotEmpty()) {
launch { lifecycleScope.launch {
alert("搜索结果为空") { alert("搜索结果为空") {
setMessage("${searchGroup}分组搜索结果为空,是否切换到全部分组") setMessage("${searchGroup}分组搜索结果为空,是否切换到全部分组")
cancelButton() cancelButton()
@@ -204,7 +204,7 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_
} }
} }
} }
launch { lifecycleScope.launch {
appDb.bookSourceDao.flowEnabledGroups().flowOn(IO).conflate().collect { appDb.bookSourceDao.flowEnabledGroups().flowOn(IO).conflate().collect {
groups.clear() groups.clear()
groups.addAll(it) groups.addAll(it)
@@ -251,7 +251,7 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_
AppConfig.searchGroup = item.title.toString() AppConfig.searchGroup = item.title.toString()
} }
upGroupMenuName() upGroupMenuName()
launch(IO) { lifecycleScope.launch(IO) {
if (viewModel.refresh()) { if (viewModel.refresh()) {
viewModel.startOrStopSearch() viewModel.startOrStopSearch()
} }
@@ -90,7 +90,7 @@ class ChangeChapterSourceDialog() : BaseDialogFragment(R.layout.dialog_chapter_c
if (it) { if (it) {
val searchGroup = AppConfig.searchGroup val searchGroup = AppConfig.searchGroup
if (searchGroup.isNotEmpty()) { if (searchGroup.isNotEmpty()) {
launch { lifecycleScope.launch {
alert("搜索结果为空") { alert("搜索结果为空") {
setMessage("${searchGroup}分组搜索结果为空,是否切换到全部分组") setMessage("${searchGroup}分组搜索结果为空,是否切换到全部分组")
noButton() noButton()
@@ -234,7 +234,7 @@ class ChangeChapterSourceDialog() : BaseDialogFragment(R.layout.dialog_chapter_c
} }
} }
} }
launch { lifecycleScope.launch {
appDb.bookSourceDao.flowEnabledGroups().flowOn(IO).conflate().collect { appDb.bookSourceDao.flowEnabledGroups().flowOn(IO).conflate().collect {
groups.clear() groups.clear()
groups.addAll(it) groups.addAll(it)
@@ -7,6 +7,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@@ -68,7 +69,7 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
} }
private fun initData() { private fun initData() {
launch { lifecycleScope.launch {
appDb.bookGroupDao.flowAll().conflate().collect { appDb.bookGroupDao.flowAll().conflate().collect {
adapter.setItems(it) adapter.setItems(it)
} }
@@ -7,6 +7,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@@ -85,7 +86,7 @@ class GroupSelectDialog() : BaseDialogFragment(R.layout.dialog_book_group_picker
} }
private fun initData() { private fun initData() {
launch { lifecycleScope.launch {
appDb.bookGroupDao.flowSelect().conflate().collect { appDb.bookGroupDao.flowSelect().conflate().collect {
adapter.setItems(it) adapter.setItems(it)
} }
@@ -8,12 +8,13 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R 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.BaseDialogFragment
import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.base.adapter.RecyclerAdapter 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.appDb
import io.legado.app.data.entities.Server import io.legado.app.data.entities.Server
import io.legado.app.databinding.DialogRecyclerViewBinding import io.legado.app.databinding.DialogRecyclerViewBinding
@@ -77,8 +78,8 @@ class ServersDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
} }
private fun initData() { private fun initData() {
launch { lifecycleScope.launch {
appDb.serverDao.observeAll().collect{ appDb.serverDao.observeAll().collect {
adapter.setItems(it) adapter.setItems(it)
} }
} }
@@ -6,6 +6,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.core.view.setPadding import androidx.core.view.setPadding
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
@@ -71,7 +72,7 @@ class SourcePickerDialog : BaseDialogFragment(R.layout.dialog_source_picker) {
private fun initData(searchKey: String? = null) { private fun initData(searchKey: String? = null) {
sourceFlowJob?.cancel() sourceFlowJob?.cancel()
sourceFlowJob = launch { sourceFlowJob = lifecycleScope.launch {
when { when {
searchKey.isNullOrEmpty() -> appDb.bookSourceDao.flowEnabled() searchKey.isNullOrEmpty() -> appDb.bookSourceDao.flowEnabled()
else -> appDb.bookSourceDao.flowSearchEnabled(searchKey) else -> appDb.bookSourceDao.flowSearchEnabled(searchKey)
@@ -7,6 +7,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.lifecycleScope
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.base.BaseViewModel import io.legado.app.base.BaseViewModel
@@ -48,7 +49,7 @@ class ContentEditDialog : BaseDialogFragment(R.layout.dialog_content_edit) {
binding.toolBar.title = ReadBook.curTextChapter?.title binding.toolBar.title = ReadBook.curTextChapter?.title
initMenu() initMenu()
binding.toolBar.setOnClickListener { binding.toolBar.setOnClickListener {
launch { lifecycleScope.launch {
val book = ReadBook.book ?: return@launch val book = ReadBook.book ?: return@launch
val chapter = withContext(IO) { val chapter = withContext(IO) {
appDb.bookChapterDao.getChapter(book.bookUrl, ReadBook.durChapterIndex) appDb.bookChapterDao.getChapter(book.bookUrl, ReadBook.durChapterIndex)
@@ -103,7 +104,7 @@ class ContentEditDialog : BaseDialogFragment(R.layout.dialog_content_edit) {
setCustomView(alertBinding.root) setCustomView(alertBinding.root)
okButton { okButton {
chapter.title = alertBinding.editView.text.toString() chapter.title = alertBinding.editView.text.toString()
launch { lifecycleScope.launch {
withContext(IO) { withContext(IO) {
appDb.bookChapterDao.upDate(chapter) appDb.bookChapterDao.upDate(chapter)
} }
@@ -8,6 +8,7 @@ import android.view.ViewGroup
import android.widget.RadioButton import android.widget.RadioButton
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment 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.association.ImportHttpTtsDialog
import io.legado.app.ui.file.HandleFileContract import io.legado.app.ui.file.HandleFileContract
import io.legado.app.ui.login.SourceLoginActivity 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.viewbindingdelegate.viewBinding
import io.legado.app.utils.visible
import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.flow.conflate
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -148,7 +162,7 @@ class SpeakEngineDialog(val callBack: CallBack) : BaseDialogFragment(R.layout.di
} }
private fun initData() { private fun initData() {
launch { lifecycleScope.launch {
appDb.httpTTSDao.flowAll().conflate().collect { appDb.httpTTSDao.flowAll().conflate().collect {
adapter.setItems(it) adapter.setItems(it)
} }
@@ -5,6 +5,7 @@ import android.os.Bundle
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
@@ -100,7 +101,7 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
} }
private fun initData() { private fun initData() {
launch { lifecycleScope.launch {
groups = withContext(IO) { groups = withContext(IO) {
appDb.bookSourceDao.allEnabledGroups() appDb.bookSourceDao.allEnabledGroups()
} }
@@ -113,7 +114,7 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
private fun upData() { private fun upData() {
launch { lifecycleScope.launch {
withContext(IO) { withContext(IO) {
if (binding.rbSource.isChecked) { if (binding.rbSource.isChecked) {
sources.filter { source -> sources.filter { source ->
@@ -8,6 +8,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
@@ -56,7 +57,7 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
} }
private fun initData() { private fun initData() {
launch { lifecycleScope.launch {
appDb.bookSourceDao.flowGroups().flowOn(IO).collect { appDb.bookSourceDao.flowGroups().flowOn(IO).collect {
adapter.setItems(it) adapter.setItems(it)
} }
@@ -9,6 +9,7 @@ import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@@ -106,7 +107,7 @@ class TxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_toc_regex),
} }
private fun initData() { private fun initData() {
launch { lifecycleScope.launch {
appDb.txtTocRuleDao.observeAll().conflate().collect { tocRules -> appDb.txtTocRuleDao.observeAll().conflate().collect { tocRules ->
initSelectedName(tocRules) initSelectedName(tocRules)
adapter.setItems(tocRules, adapter.diffItemCallBack) adapter.setItems(tocRules, adapter.diffItemCallBack)
@@ -4,6 +4,7 @@ import android.os.Bundle
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.lifecycle.lifecycleScope
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.databinding.DialogCoverRuleConfigBinding import io.legado.app.databinding.DialogCoverRuleConfigBinding
@@ -53,7 +54,7 @@ class CoverRuleConfigDialog : BaseDialogFragment(R.layout.dialog_cover_rule_conf
} }
private fun initData() { private fun initData() {
launch { lifecycleScope.launch {
val rule = withContext(IO) { val rule = withContext(IO) {
BookCover.getCoverRule() BookCover.getCoverRule()
} }
@@ -6,6 +6,7 @@ import android.view.MenuItem
import android.view.View import android.view.View
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.documentfile.provider.DocumentFile import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment 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.permission.PermissionsCompat
import io.legado.app.lib.theme.primaryColor import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.file.HandleFileContract 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 io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -111,7 +124,7 @@ class FontSelectDialog : BaseDialogFragment(R.layout.dialog_font_select),
} }
private fun openFolder() { private fun openFolder() {
launch(Main) { lifecycleScope.launch(Main) {
val defaultPath = "SD${File.separator}Fonts" val defaultPath = "SD${File.separator}Fonts"
selectFontDir.launch { selectFontDir.launch {
otherActions = arrayListOf(SelectItem(defaultPath, -1)) otherActions = arrayListOf(SelectItem(defaultPath, -1))
@@ -7,6 +7,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.setPadding import androidx.core.view.setPadding
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.constant.AppLog 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.dialogs.alert
import io.legado.app.lib.theme.primaryColor import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.about.AppLogDialog 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 io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import splitties.views.onClick 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) { 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>) { private fun login(source: BaseSource, loginData: HashMap<String, String>) {
launch(IO) { lifecycleScope.launch(IO) {
if (loginData.isEmpty()) { if (loginData.isEmpty()) {
source.removeLoginInfo() source.removeLoginInfo()
withContext(Main) { withContext(Main) {
@@ -8,6 +8,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
@@ -59,7 +60,7 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
} }
private fun initData() { private fun initData() {
launch { lifecycleScope.launch {
appDb.replaceRuleDao.flowGroups().conflate().collect { appDb.replaceRuleDao.flowGroups().conflate().collect {
adapter.setItems(it) adapter.setItems(it)
} }
@@ -8,6 +8,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
@@ -61,7 +62,7 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
} }
private fun initData() { private fun initData() {
launch { lifecycleScope.launch {
appDb.rssSourceDao.flowGroups().conflate().collect { appDb.rssSourceDao.flowGroups().conflate().collect {
adapter.setItems(it) adapter.setItems(it)
} }
@@ -3,6 +3,7 @@ package io.legado.app.ui.widget.dialog
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.lifecycle.lifecycleScope
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.databinding.DialogTextViewBinding import io.legado.app.databinding.DialogTextViewBinding
@@ -80,7 +81,7 @@ class TextDialog() : BaseDialogFragment(R.layout.dialog_text_view) {
} }
if (time > 0) { if (time > 0) {
binding.badgeView.setBadgeCount((time / 1000).toInt()) binding.badgeView.setBadgeCount((time / 1000).toInt())
launch { lifecycleScope.launch {
while (time > 0) { while (time > 0) {
delay(1000) delay(1000)
time -= 1000 time -= 1000
@@ -7,6 +7,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.view.setPadding import androidx.core.view.setPadding
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@@ -67,7 +68,7 @@ class KeyboardAssistsConfig : BaseDialogFragment(R.layout.dialog_recycler_view),
} }
private fun initData() { private fun initData() {
launch { lifecycleScope.launch {
appDb.keyboardAssistsDao.flowAll.collect { appDb.keyboardAssistsDao.flowAll.collect {
adapter.setItems(it) adapter.setItems(it)
} }
@@ -94,7 +95,7 @@ class KeyboardAssistsConfig : BaseDialogFragment(R.layout.dialog_recycler_view),
setCustomView(alertBinding.root) setCustomView(alertBinding.root)
cancelButton() cancelButton()
okButton { okButton {
launch(IO) { lifecycleScope.launch(IO) {
val newKeyboardAssist = KeyboardAssist( val newKeyboardAssist = KeyboardAssist(
key = alertBinding.edit1.text.toString(), key = alertBinding.edit1.text.toString(),
value = alertBinding.edit2.text.toString() value = alertBinding.edit2.text.toString()
@@ -142,7 +143,7 @@ class KeyboardAssistsConfig : BaseDialogFragment(R.layout.dialog_recycler_view),
} }
binding.ivDelete.setOnClickListener { binding.ivDelete.setOnClickListener {
getItemByLayoutPosition(holder.layoutPosition)?.let { keyboardAssist -> getItemByLayoutPosition(holder.layoutPosition)?.let { keyboardAssist ->
launch(IO) { lifecycleScope.launch(IO) {
appDb.keyboardAssistsDao.delete(keyboardAssist) appDb.keyboardAssistsDao.delete(keyboardAssist)
} }
} }
@@ -160,7 +161,7 @@ class KeyboardAssistsConfig : BaseDialogFragment(R.layout.dialog_recycler_view),
for ((index, item) in getItems().withIndex()) { for ((index, item) in getItems().withIndex()) {
item.serialNo = index + 1 item.serialNo = index + 1
} }
launch(IO) { lifecycleScope.launch(IO) {
appDb.keyboardAssistsDao.update(*getItems().toTypedArray()) appDb.keyboardAssistsDao.update(*getItems().toTypedArray())
} }
} }