diff --git a/app/src/main/java/io/legado/app/ui/association/AddToBookshelfDialog.kt b/app/src/main/java/io/legado/app/ui/association/AddToBookshelfDialog.kt index 619e21d39..9e9fe1e8c 100644 --- a/app/src/main/java/io/legado/app/ui/association/AddToBookshelfDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/AddToBookshelfDialog.kt @@ -30,6 +30,11 @@ class AddToBookshelfDialog() : BaseDialogFragment(R.layout.dialog_add_to_bookshe } override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { + val bookUrl = arguments?.getString("bookUrl") + if (bookUrl.isNullOrBlank()) { + + return + } } diff --git a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowActivity.kt b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowActivity.kt index f6e992a3f..03c765cf9 100644 --- a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowActivity.kt @@ -31,6 +31,9 @@ class ExploreShowActivity : VMBaseActivity { putExtra("name", book.name) diff --git a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowAdapter.kt b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowAdapter.kt index 4505c0793..2590ede6d 100644 --- a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowAdapter.kt @@ -1,7 +1,9 @@ package io.legado.app.ui.book.explore import android.content.Context +import android.os.Bundle import android.view.ViewGroup +import androidx.core.view.isVisible import io.legado.app.R import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.RecyclerAdapter @@ -26,9 +28,20 @@ class ExploreShowAdapter(context: Context, val callBack: CallBack) : item: SearchBook, payloads: MutableList ) { - binding.apply { + val bundle = payloads.getOrNull(0) as? Bundle + if (bundle == null) { + bind(binding, item) + } else { + bindChange(binding, item, bundle) + } + + } + + private fun bind(binding: ItemSearchBinding, item: SearchBook) { + binding.run { tvName.text = item.name tvAuthor.text = context.getString(R.string.author_show, item.author) + ivInBookshelf.isVisible = callBack.isInBookshelf(item.name, item.author) if (item.latestChapterTitle.isNullOrEmpty()) { tvLasted.gone() } else { @@ -53,6 +66,17 @@ class ExploreShowAdapter(context: Context, val callBack: CallBack) : } } + private fun bindChange(binding: ItemSearchBinding, item: SearchBook, bundle: Bundle) { + binding.run { + bundle.keySet().forEach { + when (it) { + "isInBookshelf" -> ivInBookshelf.isVisible = + callBack.isInBookshelf(item.name, item.author) + } + } + } + } + override fun registerListener(holder: ItemViewHolder, binding: ItemSearchBinding) { holder.itemView.setOnClickListener { getItem(holder.layoutPosition)?.let { @@ -62,6 +86,11 @@ class ExploreShowAdapter(context: Context, val callBack: CallBack) : } interface CallBack { + /** + * 是否已经加入书架 + */ + fun isInBookshelf(name: String, author: String): Boolean + fun showBookInfo(book: Book) } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt index 067047f7c..03961d139 100644 --- a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt @@ -13,16 +13,33 @@ import io.legado.app.utils.printOnDebug import io.legado.app.utils.stackTraceStr import kotlinx.coroutines.Dispatchers.IO +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.mapLatest +import kotlinx.coroutines.launch +@OptIn(ExperimentalCoroutinesApi::class) class ExploreShowViewModel(application: Application) : BaseViewModel(application) { - + val bookshelf = hashSetOf() + val upAdapterLiveData = MutableLiveData() val booksData = MutableLiveData>() val errorLiveData = MutableLiveData() private var bookSource: BookSource? = null private var exploreUrl: String? = null private var page = 1 + init { + viewModelScope.launch { + appDb.bookDao.flowAll().mapLatest { books -> + books.map { "${it.name}-${it.author}" } + }.collect { + bookshelf.clear() + bookshelf.addAll(it) + upAdapterLiveData.postValue("isInBookshelf") + } + } + } + fun initData(intent: Intent) { execute { val sourceUrl = intent.getStringExtra("sourceUrl") diff --git a/app/src/main/res/layout/dialog_add_to_bookshelf.xml b/app/src/main/res/layout/dialog_add_to_bookshelf.xml index 77d9ef65f..c82bd527b 100644 --- a/app/src/main/res/layout/dialog_add_to_bookshelf.xml +++ b/app/src/main/res/layout/dialog_add_to_bookshelf.xml @@ -1,6 +1,22 @@ + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_search.xml b/app/src/main/res/layout/item_search.xml index 4d8c09b31..862f242ce 100644 --- a/app/src/main/res/layout/item_search.xml +++ b/app/src/main/res/layout/item_search.xml @@ -26,6 +26,7 @@ android:layout_margin="8dp" android:scaleType="centerCrop" android:src="@color/md_green_600" + android:visibility="invisible" app:layout_constraintRight_toRightOf="@id/iv_cover" app:layout_constraintTop_toTopOf="@id/iv_cover" />