mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +01:00 
			
		
		
		
	minor reader bugs: (#2491)
- fix preload on last page for R2L reader
 - page 3 bug
(cherry picked from commit 8b0458cdf6)
			
			
This commit is contained in:
		| @@ -70,14 +70,7 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer { | ||||
|         pager.adapter = adapter | ||||
|         pager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() { | ||||
|             override fun onPageSelected(position: Int) { | ||||
|                 val page = adapter.items.getOrNull(position) | ||||
|                 if (page != null && currentPage != page) { | ||||
|                     currentPage = page | ||||
|                     when (page) { | ||||
|                         is ReaderPage -> onPageSelected(page, position) | ||||
|                         is ChapterTransition -> onTransitionSelected(page) | ||||
|                     } | ||||
|                 } | ||||
|                 onPageChange(position) | ||||
|             } | ||||
|  | ||||
|             override fun onPageScrollStateChanged(state: Int) { | ||||
| @@ -129,25 +122,38 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer { | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Called from the ViewPager listener when a [page] is marked as active. It notifies the | ||||
|      * activity of the change and requests the preload of the next chapter if this is the last page. | ||||
|      * Called when a new page (either a [ReaderPage] or [ChapterTransition]) is marked as active | ||||
|      */ | ||||
|     private fun onPageSelected(page: ReaderPage, position: Int) { | ||||
|         val pages = page.chapter.pages!! // Won't be null because it's the loaded chapter | ||||
|         Timber.d("onPageSelected: ${page.number}/${pages.size}") | ||||
|         activity.onPageSelected(page) | ||||
|  | ||||
|         if (page === pages.last()) { | ||||
|             Timber.d("Request preload next chapter because we're at the last page") | ||||
|             val transition = adapter.items.getOrNull(position + 1) as? ChapterTransition.Next | ||||
|             if (transition?.to != null) { | ||||
|                 activity.requestPreloadChapter(transition.to) | ||||
|     private fun onPageChange(position: Int) { | ||||
|         val page = adapter.items.getOrNull(position) | ||||
|         if (page != null && currentPage != page) { | ||||
|             currentPage = page | ||||
|             when (page) { | ||||
|                 is ReaderPage -> onReaderPageSelected(page) | ||||
|                 is ChapterTransition -> onTransitionSelected(page) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Called from the ViewPager listener when a [transition] is marked as active. It request the | ||||
|      * Called when a [ReaderPage] is marked as active. It notifies the | ||||
|      * activity of the change and requests the preload of the next chapter if this is the last page. | ||||
|      */ | ||||
|     private fun onReaderPageSelected(page: ReaderPage) { | ||||
|         val pages = page.chapter.pages!! // Won't be null because it's the loaded chapter | ||||
|         Timber.d("onReaderPageSelected: ${page.number}/${pages.size}") | ||||
|         activity.onPageSelected(page) | ||||
|  | ||||
|         if (page === pages.last()) { | ||||
|             Timber.d("Request preload next chapter because we're at the last page") | ||||
|             adapter.nextTransition?.to?.let { | ||||
|                 activity.requestPreloadChapter(it) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Called when a [ChapterTransition] is marked as active. It request the | ||||
|      * preload of the destination chapter of the transition. | ||||
|      */ | ||||
|     private fun onTransitionSelected(transition: ChapterTransition) { | ||||
| @@ -194,10 +200,15 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer { | ||||
|      * Tells this viewer to move to the given [page]. | ||||
|      */ | ||||
|     override fun moveToPage(page: ReaderPage) { | ||||
|         Timber.d("moveToPage") | ||||
|         Timber.d("moveToPage ${page.number}") | ||||
|         val position = adapter.items.indexOf(page) | ||||
|         if (position != -1) { | ||||
|             val currentPosition = pager.currentItem | ||||
|             pager.setCurrentItem(position, true) | ||||
|             // manually call onPageChange since ViewPager listener is not triggered in this case | ||||
|             if (currentPosition == position) { | ||||
|                 onPageChange(position) | ||||
|             } | ||||
|         } else { | ||||
|             Timber.d("Page $page not found in adapter") | ||||
|         } | ||||
|   | ||||
| @@ -20,6 +20,9 @@ class PagerViewerAdapter(private val viewer: PagerViewer) : ViewPagerAdapter() { | ||||
|     var items: List<Any> = emptyList() | ||||
|         private set | ||||
|  | ||||
|     var nextTransition: ChapterTransition.Next? = null | ||||
|         private set | ||||
|  | ||||
|     /** | ||||
|      * Updates this adapter with the given [chapters]. It handles setting a few pages of the | ||||
|      * next/previous chapter to allow seamless transitions and inverting the pages if the viewer | ||||
| @@ -46,7 +49,8 @@ class PagerViewerAdapter(private val viewer: PagerViewer) : ViewPagerAdapter() { | ||||
|         } | ||||
|  | ||||
|         // Add next chapter transition and pages. | ||||
|         newItems.add(ChapterTransition.Next(chapters.currChapter, chapters.nextChapter)) | ||||
|         nextTransition = ChapterTransition.Next(chapters.currChapter, chapters.nextChapter) | ||||
|                 .also { newItems.add(it) } | ||||
|         if (chapters.nextChapter != null) { | ||||
|             // Add at most two pages, because this chapter will be selected before the user can | ||||
|             // swap more pages. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user