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