This commit is contained in:
Horis
2025-02-20 14:05:10 +08:00
parent 8b3d7150f4
commit 1e2299ce60
2 changed files with 42 additions and 50 deletions
@@ -3,9 +3,9 @@ package io.legado.app.model.recyclerView
data class MangeContent(
var mChapterPagePos: Int = 0,//总章节位置
var mChapterPageCount:Int,//总章节数量
var mChapterPageCount: Int,//总章节数量
var mChapterNextPagePos: Int = 0,//下一章
val mImageUrl: String="",//当前URL
var mDurChapterPos:Int=0,//当前章节位置
var mDurChapterCount:Int=0//当前章节内容总数
val mImageUrl: String = "",//当前URL
var mDurChapterPos: Int = 0,//当前章节位置
var mDurChapterCount: Int = 0//当前章节内容总数
)
@@ -69,21 +69,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
private val mAdapter: MangaAdapter by lazy {
MangaAdapter(this@ReadMangaActivity)
}
private val mPreDownloadNum by lazy {
AppConfig.mangaPreDownloadNum
}
private val mSinglePageScroller by lazy {
AppConfig.singlePageScrolling
}
private val mDisableMangaScaling by lazy {
AppConfig.disableMangaScaling
}
private val mDisableClickScroller by lazy {
AppConfig.disableClickScroller
}
private val mSmoothScroller by lazy {
object : LinearSmoothScroller(this@ReadMangaActivity) {
override fun getVerticalSnapPreference(): Int {
@@ -126,7 +111,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
}
private var mMenu: Menu? = null
private var mRecyclerViewPreloader: RecyclerViewPreloader<Any>? = null
private val networkChangedListener by lazy {
@@ -168,8 +152,27 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
override fun onActivityCreated(savedInstanceState: Bundle?) {
ReadManga.register(this)
disableMangaScaling(mDisableMangaScaling)
upSystemUiVisibility(false)
initRecyclerView()
binding.tvRetry.setOnClickListener {
binding.llLoading.isVisible = true
binding.llRetry.isGone = true
mFirstLoading = false
ReadManga.loadContent()
}
mAdapter.addFooterView {
ViewLoadMoreBinding.bind(loadMoreView)
}
loadMoreView.setOnClickListener {
if (!loadMoreView.isLoading && !ReadManga.gameOver) {
scrollToBottom(true, ReadManga.durChapterPagePos)
}
}
loadMoreView.gone()
}
private fun initRecyclerView() {
binding.mRecyclerMange.run {
adapter = mAdapter
itemAnimator = null
@@ -178,8 +181,9 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
mLayoutManager.initialPrefetchItemCount = 4
mLayoutManager.isItemPrefetchEnabled = true
setItemViewCacheSize(AppConfig.preDownloadNum)
singlePagerScroller(mSinglePageScroller)
disabledClickScroller(mDisableClickScroller)
singlePagerScroller(AppConfig.singlePageScrolling)
disabledClickScroller(AppConfig.disableClickScroller)
disableMangaScaling(AppConfig.disableMangaScaling)
setPreScrollListener { _, _, dy, position ->
if (dy > 0 && position + 2 > mAdapter.getCurrentList().size - 3) {
if (mAdapter.getCurrentList().last() is ReaderLoading) {
@@ -199,7 +203,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
val content = mAdapter.getCurrentList()[position]
if (content is MangeContent) {
ReadManga.durChapterPos = content.mDurChapterPos.minus(1)
upText(
upInfoBar(
content.mChapterPagePos,
content.mChapterPageCount,
content.mDurChapterPos,
@@ -212,7 +216,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
}
}
addRecyclerViewPreloader(mPreDownloadNum)
addRecyclerViewPreloader(AppConfig.mangaPreDownloadNum)
onToucheMiddle {
if (!binding.mangaMenu.isVisible) {
binding.mangaMenu.runMenuIn()
@@ -225,22 +229,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
scrollToPrev()
}
}
binding.tvRetry.setOnClickListener {
binding.llLoading.isVisible = true
binding.llRetry.isGone = true
mFirstLoading = false
ReadManga.loadContent()
}
mAdapter.addFooterView {
ViewLoadMoreBinding.bind(loadMoreView)
}
loadMoreView.setOnClickListener {
if (!loadMoreView.isLoading && !ReadManga.gameOver) {
scrollToBottom(true, ReadManga.durChapterPagePos)
}
}
loadMoreView.gone()
}
override fun onNewIntent(intent: Intent) {
@@ -271,7 +259,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
if (!mFirstLoading) {
if (list.size > 1) {
binding.infobar.isVisible = true
upText(
upInfoBar(
ReadManga.durChapterPagePos.plus(1),
ReadManga.durChapterPageCount,
ReadManga.durChapterPos.plus(1),
@@ -300,7 +288,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
}
}
private fun upText(
private fun upInfoBar(
chapterPagePos: Int, chapterPageCount: Int, chapterPos: Int, chapterCount: Int,
) {
binding.infobar.update(
@@ -475,7 +463,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
}
R.id.menu_manga_auto_page_speed -> {
showNumberPickerDialog(1,getString(R.string.setting_manga_auto_page_speed), 3) {
showNumberPickerDialog(1, getString(R.string.setting_manga_auto_page_speed), 3) {
AppConfig.mangaAutoPageSpeed = it
mMangaAutoPageSpeed = it
item.title = getString(R.string.manga_auto_page_speed, it)
@@ -540,10 +528,10 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
private fun upMenu(menu: Menu) {
this.mMenu = menu
menu.findItem(R.id.menu_pre_manga_number).title =
getString(R.string.pre_download_m, mPreDownloadNum)
menu.findItem(R.id.menu_scroller_page).isChecked = mSinglePageScroller
menu.findItem(R.id.menu_disable_manga_scaling).isChecked = mDisableMangaScaling
menu.findItem(R.id.menu_disable_click_scroller).isChecked = mDisableClickScroller
getString(R.string.pre_download_m, AppConfig.mangaPreDownloadNum)
menu.findItem(R.id.menu_scroller_page).isChecked = AppConfig.singlePageScrolling
menu.findItem(R.id.menu_disable_manga_scaling).isChecked = AppConfig.disableMangaScaling
menu.findItem(R.id.menu_disable_click_scroller).isChecked = AppConfig.disableClickScroller
menu.findItem(R.id.menu_manga_auto_page_speed).title =
getString(R.string.manga_auto_page_speed, mMangaAutoPageSpeed)
}
@@ -582,7 +570,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
smoothScrollToPosition(nextPosition)
}
private fun scrollToPrev() {
val firstCompletelyVisiblePosition = mLayoutManager.findFirstCompletelyVisibleItemPosition()
val prevPosition = if (firstCompletelyVisiblePosition != RecyclerView.NO_POSITION) {
@@ -611,7 +598,12 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
autoScrollHandler.removeCallbacks(autoScrollRunnable)
}
private fun showNumberPickerDialog(min:Int,title: String, initValue: Int, callback: (Int) -> Unit) {
private fun showNumberPickerDialog(
min: Int,
title: String,
initValue: Int,
callback: (Int) -> Unit
) {
NumberPickerDialog(this)
.setTitle(title)
.setMaxValue(9999)