优化
This commit is contained in:
@@ -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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user