This commit is contained in:
kunfei
2023-08-01 09:43:56 +08:00
parent 5afedc4985
commit 9837384a3b
21 changed files with 102 additions and 44 deletions

View File

@@ -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() }

View File

@@ -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))
}
}

View File

@@ -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)
}

View File

@@ -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()
}

View File

@@ -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)

View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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)
}
}

View File

@@ -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)

View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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 ->

View File

@@ -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)
}

View File

@@ -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)

View File

@@ -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()
}

View File

@@ -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))

View File

@@ -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) {

View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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

View File

@@ -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())
}
}