From f123ef2eaafd6012828c9e8e6946bda6b4b69869 Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Thu, 18 Sep 2025 19:54:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B9=A6=E7=AD=BE=E5=BF=AB?= =?UTF-8?q?=E9=80=9F=E5=AE=9A=E4=BD=8D=E8=87=B3=E7=9B=AE=E5=BD=95=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kazusa/ui/book/toc/BookmarkAdapter.kt | 6 ++ .../kazusa/ui/book/toc/BookmarkFragment.kt | 8 +- .../kazusa/ui/book/toc/ChapterListAdapter.kt | 2 +- .../kazusa/ui/book/toc/ChapterListFragment.kt | 33 +++++++++ .../legato/kazusa/ui/book/toc/TocActivity.kt | 9 +++ app/src/main/res/layout/item_bookmark.xml | 74 +++++++++++++------ 6 files changed, 103 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/io/legato/kazusa/ui/book/toc/BookmarkAdapter.kt b/app/src/main/java/io/legato/kazusa/ui/book/toc/BookmarkAdapter.kt index 6f24f7792..d002e56b5 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/toc/BookmarkAdapter.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/toc/BookmarkAdapter.kt @@ -41,11 +41,17 @@ class BookmarkAdapter(context: Context, val callback: Callback) : callback.onClick(bookmark) } } + binding.btnLocate.onClick { + getItem(holder.layoutPosition)?.let { bookmark -> + callback.onLocate(bookmark) + } + } } interface Callback { fun onClick(bookmark: Bookmark) fun onLongClick(bookmark: Bookmark, pos: Int) + fun onLocate(bookmark: Bookmark) } } \ No newline at end of file diff --git a/app/src/main/java/io/legato/kazusa/ui/book/toc/BookmarkFragment.kt b/app/src/main/java/io/legato/kazusa/ui/book/toc/BookmarkFragment.kt index fb52396c0..02292896a 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/toc/BookmarkFragment.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/toc/BookmarkFragment.kt @@ -12,10 +12,8 @@ import io.legato.kazusa.constant.AppLog import io.legato.kazusa.data.appDb import io.legato.kazusa.data.entities.Bookmark import io.legato.kazusa.databinding.FragmentBookmarkBinding -//import io.legado.app.lib.theme.primaryColor import io.legato.kazusa.ui.book.bookmark.BookmarkDialog import io.legato.kazusa.ui.widget.recycler.UpLinearLayoutManager -import io.legato.kazusa.ui.widget.recycler.VerticalDivider import io.legato.kazusa.utils.applyNavigationBarPadding import io.legato.kazusa.utils.showDialogFragment import io.legato.kazusa.utils.viewbindingdelegate.viewBinding @@ -49,10 +47,8 @@ class BookmarkFragment : VMBaseFragment(R.layout.fragment_bookmark private fun initRecyclerView() { //binding.recyclerView.setEdgeEffectColor(primaryColor) binding.recyclerView.layoutManager = mLayoutManager - binding.recyclerView.addItemDecoration(VerticalDivider(requireContext())) binding.recyclerView.adapter = adapter binding.recyclerView.applyNavigationBarPadding() - binding.tvEmptyMsg.visible(false) } @@ -96,4 +92,8 @@ class BookmarkFragment : VMBaseFragment(R.layout.fragment_bookmark showDialogFragment(BookmarkDialog(bookmark, pos)) } + override fun onLocate(bookmark: Bookmark) { + (activity as? TocActivity)?.locateToChapter(bookmark.chapterIndex) + } + } \ No newline at end of file diff --git a/app/src/main/java/io/legato/kazusa/ui/book/toc/ChapterListAdapter.kt b/app/src/main/java/io/legato/kazusa/ui/book/toc/ChapterListAdapter.kt index 0fc7a63c0..fa1c5c003 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/toc/ChapterListAdapter.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/toc/ChapterListAdapter.kt @@ -212,7 +212,7 @@ class ChapterListAdapter( if (selectedIndices.contains(item.index)) { ivVolume.gone() - tvChapterItem.setBackgroundColor(context.themeColor(com.google.android.material.R.attr.colorSurfaceBright)) + tvChapterItem.setBackgroundColor(context.themeColor(com.google.android.material.R.attr.colorSurfaceContainerHighest)) } else { if (item.isVolume) { ivVolume.visible() diff --git a/app/src/main/java/io/legato/kazusa/ui/book/toc/ChapterListFragment.kt b/app/src/main/java/io/legato/kazusa/ui/book/toc/ChapterListFragment.kt index f03d51125..34dc1d763 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/toc/ChapterListFragment.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/toc/ChapterListFragment.kt @@ -1,10 +1,14 @@ package io.legato.kazusa.ui.book.toc +import android.animation.ArgbEvaluator +import android.animation.ValueAnimator import android.annotation.SuppressLint import android.app.Activity.RESULT_OK import android.content.Intent import android.graphics.Canvas +import android.graphics.Color import android.graphics.Rect +import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.transition.TransitionManager import android.view.View @@ -260,6 +264,35 @@ class ChapterListFragment : VMBaseFragment(R.layout.fragment_chapt } } + fun scrollToChapter(chapterIndex: Int) { + val pos = adapter.getItems().indexOfFirst { it.index == chapterIndex } + if (pos != -1) { + mLayoutManager.scrollToPositionWithOffset(pos, 0) + + binding.recyclerView.post { + val holder = binding.recyclerView.findViewHolderForAdapterPosition(pos) + holder?.itemView?.let { view -> + flashHighlight(view) + } + } + } + } + + private fun flashHighlight(view: View) { + val highlightColor = context?.themeColor(com.google.android.material.R.attr.colorSurfaceContainerHighest) + val originalColor = (view.background as? ColorDrawable)?.color ?: Color.TRANSPARENT + val anim = ValueAnimator.ofObject(ArgbEvaluator(), originalColor, highlightColor, originalColor).apply { + duration = 500 + repeatCount = 1 + repeatMode = ValueAnimator.RESTART + addUpdateListener { animator -> + val color = animator.animatedValue as Int + view.setBackgroundColor(color) + } + } + anim.start() + } + override fun onSelectionModeChanged(enabled: Boolean) { TransitionManager.beginDelayedTransition(binding.coordinatorLayout, MaterialFadeThrough()) diff --git a/app/src/main/java/io/legato/kazusa/ui/book/toc/TocActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/toc/TocActivity.kt index cf5946854..3acf8ce30 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/toc/TocActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/toc/TocActivity.kt @@ -210,6 +210,15 @@ class TocActivity : VMBaseActivity(), } } + fun locateToChapter(index: Int) { + val tag = "android:switcher:${binding.viewPager.id}:0" + val chapterFragment = supportFragmentManager.findFragmentByTag(tag) as? ChapterListFragment + chapterFragment?.scrollToChapter(index) + + binding.viewPager.currentItem = 0 + } + + @SuppressLint("SetTextI18n") fun showDownloadDialog() { ReadBook.book?.let { book -> diff --git a/app/src/main/res/layout/item_bookmark.xml b/app/src/main/res/layout/item_bookmark.xml index 73324356b..8655d278b 100644 --- a/app/src/main/res/layout/item_bookmark.xml +++ b/app/src/main/res/layout/item_bookmark.xml @@ -1,34 +1,60 @@ - - + - + + - + - \ No newline at end of file + + + + + + \ No newline at end of file