From 0cf14742759b302945f01c71a97cda2a24d8a2dc Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Feb 2022 21:25:10 +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 --- .../legado/app/base/adapter/DiffRecyclerAdapter.kt | 9 +++++---- .../app/ui/book/changecover/ChangeCoverDialog.kt | 2 ++ .../ui/book/changecover/ChangeCoverViewModel.kt | 4 +--- .../ui/book/changesource/ChangeBookSourceDialog.kt | 2 ++ .../book/changesource/ChangeBookSourceViewModel.kt | 14 ++++++-------- .../book/changesource/ChangeChapterSourceDialog.kt | 2 ++ .../changesource/ChangeChapterSourceViewModel.kt | 8 +++----- .../io/legado/app/ui/book/search/SearchActivity.kt | 2 ++ .../legado/app/ui/book/search/SearchViewModel.kt | 3 +-- 9 files changed, 24 insertions(+), 22 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 86f3a11e1..d874a6774 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 @@ -46,13 +46,14 @@ abstract class DiffRecyclerAdapter(protected val context recyclerView.adapter = this } - /** - * items与上一次提交的对象必须不同,如果指向相同地址即使数据变化也不会刷新 - */ @Synchronized fun setItems(items: List?) { kotlin.runCatching { - asyncListDiffer.submitList(items) + if (items == null) { + asyncListDiffer.submitList(null) + } else { + asyncListDiffer.submitList(ArrayList(items)) + } } } 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 e04c3dba8..7c4cc94fc 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,6 +15,7 @@ import io.legado.app.utils.applyTint import io.legado.app.utils.setLayout import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.launch /** @@ -67,6 +68,7 @@ class ChangeCoverDialog() : BaseDialogFragment(R.layout.dialog_change_cover), private fun initData() { launch { viewModel.dataFlow + .conflate() .collect { adapter.setItems(it) delay(1000) diff --git a/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt b/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt index 52831a900..39bba269b 100644 --- a/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt @@ -18,7 +18,6 @@ import kotlinx.coroutines.ExecutorCoroutineDispatcher import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.callbackFlow -import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.flow.flowOn import java.util.* import java.util.concurrent.Executors @@ -56,8 +55,7 @@ class ChangeCoverViewModel(application: Application) : BaseViewModel(application searchBooks.clear() searchSuccess = null } - }.conflate() - .flowOn(IO) + }.flowOn(IO) @Volatile private var searchIndex = -1 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 7f6074fb4..01e9c5d83 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,6 +29,7 @@ import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.utils.* import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.launch @@ -145,6 +146,7 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_ } launch { viewModel.searchDataFlow + .conflate() .collect { adapter.setItems(it) delay(1000) diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt index bd677088d..93ecf8eb5 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt @@ -22,7 +22,6 @@ import kotlinx.coroutines.ExecutorCoroutineDispatcher import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.callbackFlow -import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map import splitties.init.appCtx @@ -55,11 +54,11 @@ class ChangeBookSourceViewModel(application: Application) : BaseViewModel(applic searchBook.name.contains(screenKey) -> searchBooks.add(searchBook) else -> return } - trySend(searchBooks) + trySend(arrayOf(searchBooks)) } override fun upAdapter() { - trySend(searchBooks) + trySend(arrayOf(searchBooks)) } } @@ -67,7 +66,7 @@ class ChangeBookSourceViewModel(application: Application) : BaseViewModel(applic getDbSearchBooks().let { searchBooks.clear() searchBooks.addAll(it) - trySend(searchBooks) + trySend(arrayOf(searchBooks)) } if (searchBooks.size <= 1) { @@ -77,10 +76,9 @@ class ChangeBookSourceViewModel(application: Application) : BaseViewModel(applic awaitClose { searchCallback = null } - }.conflate() - .map { - searchBooks.sortedBy { it.originOrder } - }.flowOn(IO) + }.map { + searchBooks.sortedBy { it.originOrder } + }.flowOn(IO) @Volatile private var searchIndex = -1 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 3cbffe99f..0600fc96e 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,6 +31,7 @@ import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.utils.* import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.launch @@ -177,6 +178,7 @@ class ChangeChapterSourceDialog() : BaseDialogFragment(R.layout.dialog_chapter_c } launch { viewModel.searchDataFlow + .conflate() .collect { searchBookAdapter.setItems(it) delay(1000) diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceViewModel.kt index 5bf669a26..9654336c0 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceViewModel.kt @@ -24,7 +24,6 @@ import kotlinx.coroutines.ExecutorCoroutineDispatcher import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.callbackFlow -import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map import splitties.init.appCtx @@ -83,10 +82,9 @@ class ChangeChapterSourceViewModel(application: Application) : BaseViewModel(app awaitClose { searchCallback = null } - }.conflate() - .map { - searchBooks.sortedBy { it.originOrder } - }.flowOn(IO) + }.map { + searchBooks.sortedBy { it.originOrder } + }.flowOn(IO) @Volatile private var searchIndex = -1 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 764d28483..c86089468 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 @@ -30,6 +30,7 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Job import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -197,6 +198,7 @@ class SearchActivity : VMBaseActivity