Refactor reader
parent
e6befc57e0
commit
de9e773d2c
@ -0,0 +1,34 @@
|
|||||||
|
package org.koitharu.kotatsu.ui.reader
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import androidx.annotation.LayoutRes
|
||||||
|
import org.koitharu.kotatsu.core.model.MangaPage
|
||||||
|
import org.koitharu.kotatsu.ui.common.BaseFragment
|
||||||
|
|
||||||
|
abstract class BaseReaderFragment(@LayoutRes contentLayoutId: Int) : BaseFragment(contentLayoutId), ReaderView {
|
||||||
|
|
||||||
|
abstract val hasItems: Boolean
|
||||||
|
|
||||||
|
abstract val currentPageIndex: Int
|
||||||
|
|
||||||
|
abstract val pages: List<MangaPage>
|
||||||
|
|
||||||
|
abstract fun setCurrentPage(index: Int, smooth: Boolean)
|
||||||
|
|
||||||
|
val currentPage get() = pages.getOrNull(currentPageIndex)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handled by activity
|
||||||
|
*/
|
||||||
|
override fun onLoadingStateChanged(isLoading: Boolean) = Unit
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handled by activity
|
||||||
|
*/
|
||||||
|
override fun onError(e: Exception) = Unit
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handled by activity
|
||||||
|
*/
|
||||||
|
override fun onPageSaved(uri: Uri?) = Unit
|
||||||
|
}
|
||||||
@ -1,12 +1,14 @@
|
|||||||
package org.koitharu.kotatsu.ui.reader
|
package org.koitharu.kotatsu.ui.reader.standard
|
||||||
|
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import org.koitharu.kotatsu.core.model.MangaPage
|
import org.koitharu.kotatsu.core.model.MangaPage
|
||||||
import org.koitharu.kotatsu.ui.common.list.BaseRecyclerAdapter
|
import org.koitharu.kotatsu.ui.common.list.BaseRecyclerAdapter
|
||||||
|
import org.koitharu.kotatsu.ui.reader.PageLoader
|
||||||
|
|
||||||
class PagesAdapter(private val loader: PageLoader) : BaseRecyclerAdapter<MangaPage, Unit>() {
|
class PagesAdapter(private val loader: PageLoader) : BaseRecyclerAdapter<MangaPage, Unit>() {
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup) = PageHolder(parent, loader)
|
override fun onCreateViewHolder(parent: ViewGroup) =
|
||||||
|
PageHolder(parent, loader)
|
||||||
|
|
||||||
override fun onGetItemId(item: MangaPage) = item.id
|
override fun onGetItemId(item: MangaPage) = item.id
|
||||||
|
|
||||||
@ -0,0 +1,56 @@
|
|||||||
|
package org.koitharu.kotatsu.ui.reader.standard
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import kotlinx.android.synthetic.main.fragment_reader_standard.*
|
||||||
|
import moxy.ktx.moxyPresenter
|
||||||
|
import org.koitharu.kotatsu.R
|
||||||
|
import org.koitharu.kotatsu.core.model.MangaPage
|
||||||
|
import org.koitharu.kotatsu.ui.reader.BaseReaderFragment
|
||||||
|
import org.koitharu.kotatsu.ui.reader.PageLoader
|
||||||
|
import org.koitharu.kotatsu.ui.reader.ReaderPresenter
|
||||||
|
|
||||||
|
class StandardReaderFragment : BaseReaderFragment(R.layout.fragment_reader_standard) {
|
||||||
|
|
||||||
|
private val presenter by moxyPresenter(factory = ReaderPresenter.Companion::getInstance)
|
||||||
|
|
||||||
|
private var adapter: PagesAdapter? = null
|
||||||
|
private lateinit var loader: PageLoader
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
loader = PageLoader()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
adapter = PagesAdapter(loader)
|
||||||
|
pager.adapter = adapter
|
||||||
|
pager.offscreenPageLimit = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPagesReady(pages: List<MangaPage>, index: Int) {
|
||||||
|
adapter?.let {
|
||||||
|
it.replaceData(pages)
|
||||||
|
pager.setCurrentItem(index, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroy() {
|
||||||
|
loader.dispose()
|
||||||
|
super.onDestroy()
|
||||||
|
}
|
||||||
|
|
||||||
|
override val hasItems: Boolean
|
||||||
|
get() = adapter?.hasItems == true
|
||||||
|
|
||||||
|
override val currentPageIndex: Int
|
||||||
|
get() = pager.currentItem
|
||||||
|
|
||||||
|
override val pages: List<MangaPage>
|
||||||
|
get() = adapter?.items.orEmpty()
|
||||||
|
|
||||||
|
override fun setCurrentPage(index: Int, smooth: Boolean) {
|
||||||
|
pager.setCurrentItem(index, smooth)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.viewpager2.widget.ViewPager2
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/pager"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" />
|
||||||
Loading…
Reference in New Issue