From 3a8a51ac7c6adca5302db9dc13b6d130c7c88d02 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 27 Feb 2022 08:59:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/base/adapter/DiffRecyclerAdapter.kt | 52 ++++++++----------- .../ui/book/changecover/ChangeCoverDialog.kt | 3 +- .../changesource/ChangeBookSourceDialog.kt | 3 +- .../changesource/ChangeChapterSourceDialog.kt | 3 +- .../app/ui/book/search/SearchActivity.kt | 3 +- .../bookshelf/style1/books/BooksFragment.kt | 5 +- 6 files changed, 30 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt b/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt index a955f63b3..5f26c1161 100644 --- a/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt +++ b/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt @@ -74,45 +74,39 @@ abstract class DiffRecyclerAdapter(protected val context } } - suspend fun updateItem(item: ITEM) { - withContext(Dispatchers.Main) { - synchronized(asyncListDiffer) { - kotlin.runCatching { - val index = asyncListDiffer.currentList.indexOf(item) - if (index >= 0) { - asyncListDiffer.currentList[index] = item - notifyItemChanged(index) - } + fun updateItem(item: ITEM) { + synchronized(asyncListDiffer) { + kotlin.runCatching { + val index = asyncListDiffer.currentList.indexOf(item) + if (index >= 0) { + asyncListDiffer.currentList[index] = item + notifyItemChanged(index) } } } } - suspend fun updateItem(position: Int, payload: Any) { - withContext(Dispatchers.Main) { - synchronized(asyncListDiffer) { - kotlin.runCatching { - val size = itemCount - if (position in 0 until size) { - notifyItemChanged(position, payload) - } + fun updateItem(position: Int, payload: Any) { + synchronized(asyncListDiffer) { + kotlin.runCatching { + val size = itemCount + if (position in 0 until size) { + notifyItemChanged(position, payload) } } } } - suspend fun updateItems(fromPosition: Int, toPosition: Int, payloads: Any) { - withContext(Dispatchers.Main) { - synchronized(asyncListDiffer) { - kotlin.runCatching { - val size = itemCount - if (fromPosition in 0 until size && toPosition in 0 until size) { - notifyItemRangeChanged( - fromPosition, - toPosition - fromPosition + 1, - payloads - ) - } + fun updateItems(fromPosition: Int, toPosition: Int, payloads: Any) { + synchronized(asyncListDiffer) { + kotlin.runCatching { + val size = itemCount + if (fromPosition in 0 until size && toPosition in 0 until size) { + notifyItemRangeChanged( + fromPosition, + toPosition - fromPosition + 1, + payloads + ) } } } diff --git a/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverDialog.kt b/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverDialog.kt index d891165d6..245634f06 100644 --- a/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverDialog.kt @@ -15,7 +15,6 @@ import io.legado.app.lib.theme.primaryColor import io.legado.app.utils.applyTint import io.legado.app.utils.setLayout import io.legado.app.utils.viewbindingdelegate.viewBinding -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.launch @@ -68,7 +67,7 @@ class ChangeCoverDialog() : BaseDialogFragment(R.layout.dialog_change_cover), } private fun initData() { - launch(Dispatchers.Default) { + launch { whenStarted { viewModel.dataFlow.conflate().collect { adapter.setItems(it) diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt index 319a5f0ba..2f5daca35 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt @@ -29,7 +29,6 @@ import io.legado.app.ui.book.source.manage.BookSourceActivity import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.utils.* import io.legado.app.utils.viewbindingdelegate.viewBinding -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.launch @@ -146,7 +145,7 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_ } binding.toolBar.menu.applyTint(requireContext()) } - launch(Dispatchers.Default) { + launch { whenStarted { viewModel.searchDataFlow.conflate().collect { adapter.setItems(it) diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceDialog.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceDialog.kt index 3d7024729..b57de5f64 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceDialog.kt @@ -31,7 +31,6 @@ import io.legado.app.ui.book.source.manage.BookSourceActivity import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.utils.* import io.legado.app.utils.viewbindingdelegate.viewBinding -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.launch @@ -178,7 +177,7 @@ class ChangeChapterSourceDialog() : BaseDialogFragment(R.layout.dialog_chapter_c } binding.toolBar.menu.applyTint(requireContext()) } - launch(Dispatchers.Default) { + launch { whenStarted { viewModel.searchDataFlow.conflate().collect { searchBookAdapter.setItems(it) diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt index 0a3a983d1..ca986697c 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt @@ -29,7 +29,6 @@ import io.legado.app.ui.book.source.manage.BookSourceActivity import io.legado.app.ui.widget.recycler.LoadMoreView import io.legado.app.utils.* import io.legado.app.utils.viewbindingdelegate.viewBinding -import kotlinx.coroutines.Dispatchers.Default import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Job import kotlinx.coroutines.delay @@ -199,7 +198,7 @@ class SearchActivity : VMBaseActivity appDb.bookDao.flowAll() AppConst.bookGroupLocalId -> appDb.bookDao.flowLocal() @@ -120,7 +121,7 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books), 3 -> list.sortedBy { it.order } else -> list.sortedByDescending { it.durChapterTime } } - }.catch { + }.flowOn(Dispatchers.Default).catch { AppLog.put("书架更新出错", it) }.conflate().collect { list -> binding.tvEmptyMsg.isGone = list.isNotEmpty()