diff --git a/CHANGELOG.md b/CHANGELOG.md index 54cac75544..c1f1de4426 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,6 +55,7 @@ All notable changes to this project will be documented in this file. Take a look * `paragraphSpacing` - Vertical margins for paragraphs. * `hyphens` - Enable hyphenation. * `ligatures` - Enable ligatures in Arabic. +* Fixed scroll inertia when scrolling an EPUB. ### Changed diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/R2WebView.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/R2WebView.kt index 4c5029b173..a4aa642e2a 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/R2WebView.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/R2WebView.kt @@ -186,6 +186,8 @@ class R2WebView(context: Context, attrs: AttributeSet) : R2BasicWebView(context, private var mScrollState = SCROLL_STATE_IDLE + internal var useLegacySettings = false + private fun initWebPager() { setWillNotDraw(false) descendantFocusability = ViewGroup.FOCUS_AFTER_DESCENDANTS @@ -550,6 +552,10 @@ class R2WebView(context: Context, attrs: AttributeSet) : R2BasicWebView(context, } override fun computeScroll() { + if (!useLegacySettings && scrollMode) { + return super.computeScroll() + } + mIsScrollStarted = true if (!mScroller!!.isFinished && mScroller!!.computeScrollOffset()) { val oldX = scrollX diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorViewModel.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorViewModel.kt index 22db459060..144f38e70b 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorViewModel.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorViewModel.kt @@ -234,7 +234,11 @@ internal class EpubNavigatorViewModel( oldSettings.readingProgression != newSettings.readingProgression || oldSettings.language != newSettings.language || oldSettings.verticalText != newSettings.verticalText || - oldSettings.spread != newSettings.spread + oldSettings.spread != newSettings.spread || + // We need to invalidate the resource pager when changing from scroll mode to + // paginated, otherwise the horizontal scroll will be broken. + // See https://github.com/readium/kotlin-toolkit/pull/304 + oldSettings.scroll != newSettings.scroll ) if (needsInvalidation) { diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt index 74f3ff71cf..785fd5850c 100755 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt @@ -139,6 +139,7 @@ class R2EpubPageFragment : Fragment() { @Suppress("DEPRECATION") webView.setScrollMode(preferences.getBoolean(SCROLL_REF, false)) } + webView.useLegacySettings = viewModel.useLegacySettings webView.settings.javaScriptEnabled = true webView.isVerticalScrollBarEnabled = false webView.isHorizontalScrollBarEnabled = false