本地书籍

This commit is contained in:
HapeLee committed 2025-11-16 13:39:38 +08:00
1 parent fdc86d7183
commit 5362d4f47f
3 files changed
+28 -18

No files matched your search

@@ -14,6 +14,7 @@ import android.transition.TransitionManager
import android.view.View import android.view.View
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.toDrawable import androidx.core.graphics.drawable.toDrawable
import androidx.core.view.isVisible
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.interpolator.view.animation.FastOutSlowInInterpolator import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
@@ -58,6 +59,7 @@ class ChapterListFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_chapt
private val mLayoutManager by lazy { UpLinearLayoutManager(requireContext()) } private val mLayoutManager by lazy { UpLinearLayoutManager(requireContext()) }
private val adapter by lazy { ChapterListAdapter(requireContext(), this) } private val adapter by lazy { ChapterListAdapter(requireContext(), this) }
private var durChapterIndex = 0 private var durChapterIndex = 0
private var swipeHelper: ItemTouchHelper? = null
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) = binding.run { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) = binding.run {
viewModel.chapterListCallBack = this@ChapterListFragment viewModel.chapterListCallBack = this@ChapterListFragment
@@ -65,10 +67,32 @@ class ChapterListFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_chapt
initView() initView()
viewModel.bookData.observe(this@ChapterListFragment) { viewModel.bookData.observe(this@ChapterListFragment) {
initBook(it) initBook(it)
initSwipeIfNeed(it.isLocal)
} }
} }
private fun initRecyclerView() { private fun initRecyclerView() {
binding.recyclerView.layoutManager = mLayoutManager
binding.recyclerView.addItemDecoration(object : RecyclerView.ItemDecoration() {
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
if (parent.getChildAdapterPosition(view) == state.itemCount - 1) {
outRect.bottom = 80.dpToPx()
}
}
})
binding.recyclerView.adapter = adapter
}
private fun initSwipeIfNeed(isLocalBook: Boolean) {
binding.btnDownloadSelected.isEnabled = !isLocalBook
swipeHelper?.attachToRecyclerView(null)
if (!isLocalBook){
val swipeCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) { val swipeCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
override fun onMove( override fun onMove(
@@ -151,27 +175,10 @@ class ChapterListFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_chapt
} }
} }
} }
val itemTouchHelper = ItemTouchHelper(swipeCallback) val itemTouchHelper = ItemTouchHelper(swipeCallback)
itemTouchHelper.attachToRecyclerView(binding.recyclerView) itemTouchHelper.attachToRecyclerView(binding.recyclerView)
binding.recyclerView.layoutManager = mLayoutManager
binding.recyclerView.addItemDecoration(object : RecyclerView.ItemDecoration() {
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
if (parent.getChildAdapterPosition(view) == state.itemCount - 1) {
outRect.bottom = 80.dpToPx()
} }
} }
})
binding.recyclerView.adapter = adapter
}
private fun initView() = binding.run { private fun initView() = binding.run {
llBase.applyNavigationBarPadding() llBase.applyNavigationBarPadding()
@@ -31,6 +31,7 @@ import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookChapter import io.legado.app.data.entities.BookChapter
import io.legado.app.databinding.ActivityChapterListBinding import io.legado.app.databinding.ActivityChapterListBinding
import io.legado.app.databinding.DialogDownloadChoiceBinding import io.legado.app.databinding.DialogDownloadChoiceBinding
import io.legado.app.help.book.isLocal
import io.legado.app.help.book.isLocalTxt import io.legado.app.help.book.isLocalTxt
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
@@ -64,6 +65,7 @@ class TocActivity : VMBaseActivity<ActivityChapterListBinding, TocViewModel>(),
private var menu: Menu? = null private var menu: Menu? = null
private var searchView: SearchView? = null private var searchView: SearchView? = null
private val waitDialog by lazy { WaitDialog(this) } private val waitDialog by lazy { WaitDialog(this) }
private var isLocalBook : Boolean = false
private val exportDir = registerForActivityResult(HandleFileContract()) { private val exportDir = registerForActivityResult(HandleFileContract()) {
it.uri?.let { uri -> it.uri?.let { uri ->
when (it.requestCode) { when (it.requestCode) {
@@ -88,6 +90,7 @@ class TocActivity : VMBaseActivity<ActivityChapterListBinding, TocViewModel>(),
viewModel.bookData.observe(this) { book -> viewModel.bookData.observe(this) { book ->
menu?.setGroupVisible(R.id.menu_group_text, book.isLocalTxt) menu?.setGroupVisible(R.id.menu_group_text, book.isLocalTxt)
supportActionBar?.title = book.name supportActionBar?.title = book.name
binding.topBar.menu.findItem(R.id.menu_download)?.isVisible = !book.isLocal
} }
intent.getStringExtra("bookUrl")?.let { intent.getStringExtra("bookUrl")?.let {
viewModel.initBook(it) viewModel.initBook(it)
+1 -1
View File
@@ -4,7 +4,7 @@ coreSplashscreen = "1.2.0-rc01"
datastorePreferences = "1.1.7" datastorePreferences = "1.1.7"
kotlin = "2.2.20" kotlin = "2.2.20"
ksp = "2.2.20-2.0.4" ksp = "2.2.20-2.0.4"
agp = "8.13.0" agp = "8.13.1"
appcompat = "1.7.1" appcompat = "1.7.1"
colorpicker = "1.1.0" colorpicker = "1.1.0"
commonsText = "1.14.0" commonsText = "1.14.0"