diff --git a/CHANGELOG.md b/CHANGELOG.md index b2eaa43272..ade6ce59a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,12 @@ All notable changes to this project will be documented in this file. Take a look ### Added +#### Navigator + +* The `EpubNavigatorFragment.Configuration.disablePageTurnsWhileScrolling` property disables horizontal swipes for navigating to previous or next resources when scroll mode is enabled. When set to `true`, you must implement your own mechanism to move to the next resource (contributed by [@tm-bookshop](https://github.com/readium/kotlin-toolkit/pull/624)). + +#### Streamer + * The EPUB 2 `` element is now parsed into the RWPM `landmarks` subcollection when no EPUB 3 `landmarks` navigation document is declared (contributed by [@erkasraim](https://github.com/readium/kotlin-toolkit/pull/628)). ### Changed diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/R2BasicWebView.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/R2BasicWebView.kt index 0e9df116da..2ff8bde716 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/R2BasicWebView.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/R2BasicWebView.kt @@ -116,6 +116,7 @@ internal open class R2BasicWebView(context: Context, attrs: AttributeSet) : WebV internal var isSelecting = false val scrollMode: Boolean get() = scrollModeFlow.value + var disablePageTurnsWhileScrolling: Boolean = false var callback: OnOverScrolledCallback? = null @@ -213,6 +214,9 @@ internal open class R2BasicWebView(context: Context, attrs: AttributeSet) : WebV } when { + // If the user is in scrollMode and has disabled swipe pagination, do nothing. + scrollMode && this@R2BasicWebView.disablePageTurnsWhileScrolling -> {} + scrollMode -> goRight(jump = true) @@ -244,6 +248,9 @@ internal open class R2BasicWebView(context: Context, attrs: AttributeSet) : WebV } when { + // If the user is in scrollMode and has disabled swipe pagination, do nothing. + scrollMode && this@R2BasicWebView.disablePageTurnsWhileScrolling -> {} + scrollMode -> goLeft(jump = true) @@ -392,7 +399,6 @@ internal open class R2BasicWebView(context: Context, attrs: AttributeSet) : WebV fun onDragEnd(eventJson: String): Boolean { val event = DragEvent.fromJSON(eventJson)?.takeIf { it.isValid } ?: return false - return runBlocking(uiScope.coroutineContext) { listener?.onDragEnd(event) ?: false } } diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt index 0d31c1311d..f87e1b284d 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt @@ -180,6 +180,11 @@ public class EpubNavigatorFragment internal constructor( */ var decorationTemplates: HtmlDecorationTemplates, + /** + * Indicates if a user can swipe to change resources when scroll is enabled. + */ + var disablePageTurnsWhileScrolling: Boolean, + /** * Custom [ActionMode.Callback] to be used when the user selects content. * @@ -210,12 +215,14 @@ public class EpubNavigatorFragment internal constructor( servedAssets: List = emptyList(), readiumCssRsProperties: RsProperties = RsProperties(), decorationTemplates: HtmlDecorationTemplates = HtmlDecorationTemplates.defaultTemplates(), + disablePageTurnsWhileScrolling: Boolean = false, selectionActionModeCallback: ActionMode.Callback? = null, shouldApplyInsetsPadding: Boolean? = true, ) : this( servedAssets = servedAssets, readiumCssRsProperties = readiumCssRsProperties, decorationTemplates = decorationTemplates, + disablePageTurnsWhileScrolling = disablePageTurnsWhileScrolling, selectionActionModeCallback = selectionActionModeCallback, shouldApplyInsetsPadding = shouldApplyInsetsPadding, disableSelectionWhenProtected = true, 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 6c9af28e77..1ff3524273 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 @@ -85,7 +85,6 @@ internal class EpubNavigatorViewModel( private val _settings: MutableStateFlow = MutableStateFlow(settingsPolicy.settings(initialPreferences)) - val settings: StateFlow = _settings.asStateFlow() val overflow: StateFlow = _settings 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 b4def59b42..97348b11e8 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 @@ -159,6 +159,8 @@ internal class R2EpubPageFragment : Fragment() { } } + webView.disablePageTurnsWhileScrolling = + navigator?.config?.disablePageTurnsWhileScrolling ?: false webView.settings.javaScriptEnabled = true webView.isVerticalScrollBarEnabled = false webView.isHorizontalScrollBarEnabled = false diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2RTLViewPager.java b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2RTLViewPager.java index 6c2b00e143..ed63bdbfd2 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2RTLViewPager.java +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2RTLViewPager.java @@ -31,7 +31,6 @@ import androidx.viewpager.widget.ViewPager; import org.readium.r2.navigator.preferences.ReadingProgression; -import org.readium.r2.shared.ExperimentalReadiumApi; import java.util.HashMap;