mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 16:18:55 +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