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 org.koitharu.kotatsu.core.model.MangaPage
|
||||
import org.koitharu.kotatsu.ui.common.list.BaseRecyclerAdapter
|
||||
import org.koitharu.kotatsu.ui.reader.PageLoader
|
||||
|
||||
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
|
||||
|
||||
@ -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