@@ -91,6 +91,7 @@ class EpubNavigatorFragment internal constructor(
9191 override val publication : Publication ,
9292 private val baseUrl : String? ,
9393 private val initialLocator : Locator ? ,
94+ readingOrder : List <Link >? ,
9495 private val initialPreferences : EpubPreferences ,
9596 internal val listener : Listener ? ,
9697 internal val paginationListener : PaginationListener ? ,
@@ -274,7 +275,12 @@ class EpubNavigatorFragment internal constructor(
274275 )
275276 }
276277
277- internal lateinit var positionsByReadingOrder: List <List <Locator >>
278+ private val readingOrder: List <Link > = readingOrder ? : publication.readingOrder
279+
280+ private val positionsByReadingOrder: List <List <Locator >> =
281+ if (readingOrder != null ) emptyList()
282+ else runBlocking { publication.positionsByReadingOrder() }
283+
278284 internal lateinit var positions: List <Locator >
279285 lateinit var resourcePager: R2ViewPager
280286
@@ -306,13 +312,12 @@ class EpubNavigatorFragment internal constructor(
306312 _binding = ActivityR2ViewpagerBinding .inflate(inflater, container, false )
307313 val view = binding.root
308314
309- positionsByReadingOrder = runBlocking { publication.positionsByReadingOrder() }
310315 positions = positionsByReadingOrder.flatten()
311316 publicationIdentifier = publication.metadata.identifier ? : publication.metadata.title
312317
313318 when (viewModel.layout) {
314319 EpubLayout .REFLOWABLE -> {
315- resourcesSingle = publication. readingOrder.mapIndexed { index, link ->
320+ resourcesSingle = readingOrder.mapIndexed { index, link ->
316321 PageResource .EpubReflowable (
317322 link = link,
318323 url = viewModel.urlTo(link),
@@ -329,7 +334,7 @@ class EpubNavigatorFragment internal constructor(
329334 var doublePageLeft: Link ? = null
330335 var doublePageRight: Link ? = null
331336
332- for ((index, link) in publication. readingOrder.withIndex()) {
337+ for ((index, link) in readingOrder.withIndex()) {
333338 val url = viewModel.urlTo(link)
334339 resourcesSingle.add(PageResource .EpubFxl (leftLink = link, leftUrl = url))
335340
@@ -881,7 +886,7 @@ class EpubNavigatorFragment internal constructor(
881886 locatorToResourceAtIndex(resourcePager.currentItem + 1 )
882887
883888 private fun locatorToResourceAtIndex (index : Int ): Locator ? =
884- publication. readingOrder.getOrNull(index)
889+ readingOrder.getOrNull(index)
885890 ?.let { publication.locatorFromLink(it) }
886891
887892 private val r2PagerAdapter: R2PagerAdapter ?
@@ -919,7 +924,7 @@ class EpubNavigatorFragment internal constructor(
919924 override val currentLocator: StateFlow <Locator > get() = _currentLocator
920925 private val _currentLocator = MutableStateFlow (
921926 initialLocator
922- ? : requireNotNull(publication.locatorFromLink(publication .readingOrder.first()))
927+ ? : requireNotNull(publication.locatorFromLink(this .readingOrder.first()))
923928 )
924929
925930 /* *
@@ -930,7 +935,7 @@ class EpubNavigatorFragment internal constructor(
930935 override suspend fun firstVisibleElementLocator (): Locator ? {
931936 if (! ::resourcePager.isInitialized) return null
932937
933- val resource = publication. readingOrder[resourcePager.currentItem]
938+ val resource = readingOrder[resourcePager.currentItem]
934939 return currentReflowablePageFragment?.webView?.findFirstVisibleLocator()
935940 ?.copy(
936941 href = resource.href,
@@ -1035,21 +1040,23 @@ class EpubNavigatorFragment internal constructor(
10351040 * if you use a local HTTP server.
10361041 * @param initialLocator The first location which should be visible when rendering the
10371042 * publication. Can be used to restore the last reading location.
1043+ * @param readingOrder custom reading order
10381044 * @param listener Optional listener to implement to observe events, such as user taps.
10391045 * @param config Additional configuration.
10401046 */
10411047 fun createFactory (
10421048 publication : Publication ,
10431049 baseUrl : String? = null,
10441050 initialLocator : Locator ? = null,
1051+ readingOrder : List <Link >? = null,
10451052 listener : Listener ? = null,
10461053 paginationListener : PaginationListener ? = null,
10471054 config : Configuration = Configuration (),
10481055 initialPreferences : EpubPreferences = EpubPreferences ()
10491056 ): FragmentFactory =
10501057 createFragmentFactory {
10511058 EpubNavigatorFragment (
1052- publication, baseUrl, initialLocator, initialPreferences,
1059+ publication, baseUrl, initialLocator, readingOrder, initialPreferences,
10531060 listener, paginationListener,
10541061 epubLayout = publication.metadata.presentation.layout ? : EpubLayout .REFLOWABLE ,
10551062 defaults = EpubDefaults (),
0 commit comments