diff --git a/app/src/main/java/org/koitharu/kotatsu/core/exceptions/resolve/ExceptionResolver.kt b/app/src/main/java/org/koitharu/kotatsu/core/exceptions/resolve/ExceptionResolver.kt index 27f73e19f..8ae3565e5 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/exceptions/resolve/ExceptionResolver.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/exceptions/resolve/ExceptionResolver.kt @@ -6,9 +6,6 @@ import androidx.activity.result.ActivityResultLauncher import androidx.annotation.StringRes import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity -import kotlin.coroutines.Continuation -import kotlin.coroutines.resume -import kotlin.coroutines.suspendCoroutine import kotlinx.coroutines.suspendCancellableCoroutine import org.koitharu.kotatsu.R import org.koitharu.kotatsu.browser.BrowserActivity @@ -20,6 +17,9 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.settings.sources.auth.SourceAuthActivity import org.koitharu.kotatsu.utils.TaggedActivityResult import org.koitharu.kotatsu.utils.isSuccess +import kotlin.coroutines.Continuation +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine class ExceptionResolver private constructor( private val activity: FragmentActivity?, @@ -49,6 +49,7 @@ class ExceptionResolver private constructor( openInBrowser(e.url) false } + else -> false } diff --git a/app/src/main/java/org/koitharu/kotatsu/core/os/NetworkStateObserver.kt b/app/src/main/java/org/koitharu/kotatsu/core/os/NetworkStateObserver.kt index 6baefd34d..8450028e9 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/os/NetworkStateObserver.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/os/NetworkStateObserver.kt @@ -12,6 +12,7 @@ import kotlinx.coroutines.channels.trySendBlocking import kotlinx.coroutines.flow.FlowCollector import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.callbackFlow +import kotlinx.coroutines.flow.first import org.koitharu.kotatsu.utils.ext.connectivityManager import org.koitharu.kotatsu.utils.ext.isNetworkAvailable import javax.inject.Inject @@ -37,6 +38,13 @@ class NetworkStateObserver @Inject constructor( } } + suspend fun awaitForConnection(): Unit { + if (value) { + return + } + first { it } + } + private fun observeImpl() = callbackFlow { val request = NetworkRequest.Builder().build() val callback = FlowNetworkCallback(this) diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BasePageHolder.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BasePageHolder.kt index e8c9fcc9e..03380ff51 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BasePageHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BasePageHolder.kt @@ -5,6 +5,7 @@ import androidx.annotation.CallSuper import androidx.recyclerview.widget.RecyclerView import androidx.viewbinding.ViewBinding import org.koitharu.kotatsu.core.exceptions.resolve.ExceptionResolver +import org.koitharu.kotatsu.core.os.NetworkStateObserver import org.koitharu.kotatsu.databinding.LayoutPageInfoBinding import org.koitharu.kotatsu.reader.domain.PageLoader import org.koitharu.kotatsu.reader.ui.config.ReaderSettings @@ -13,11 +14,12 @@ abstract class BasePageHolder( protected val binding: B, loader: PageLoader, settings: ReaderSettings, + networkStateObserver: NetworkStateObserver, exceptionResolver: ExceptionResolver, ) : RecyclerView.ViewHolder(binding.root), PageHolderDelegate.Callback { @Suppress("LeakingThis") - protected val delegate = PageHolderDelegate(loader, settings, this, exceptionResolver) + protected val delegate = PageHolderDelegate(loader, settings, this, networkStateObserver, exceptionResolver) protected val bindingInfo = LayoutPageInfoBinding.bind(binding.root) val context: Context diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BaseReaderAdapter.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BaseReaderAdapter.kt index 33456c7d3..1a914b41e 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BaseReaderAdapter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BaseReaderAdapter.kt @@ -4,17 +4,19 @@ import android.view.ViewGroup import androidx.recyclerview.widget.AsyncListDiffer import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView -import kotlin.coroutines.resume -import kotlin.coroutines.suspendCoroutine import org.koitharu.kotatsu.core.exceptions.resolve.ExceptionResolver +import org.koitharu.kotatsu.core.os.NetworkStateObserver import org.koitharu.kotatsu.reader.domain.PageLoader import org.koitharu.kotatsu.reader.ui.config.ReaderSettings import org.koitharu.kotatsu.utils.ext.resetTransformations +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine @Suppress("LeakingThis") abstract class BaseReaderAdapter>( private val loader: PageLoader, private val readerSettings: ReaderSettings, + private val networkState: NetworkStateObserver, private val exceptionResolver: ExceptionResolver, ) : RecyclerView.Adapter() { @@ -56,9 +58,9 @@ abstract class BaseReaderAdapter>( final override fun onCreateViewHolder( parent: ViewGroup, viewType: Int, - ): H = onCreateViewHolder(parent, loader, readerSettings, exceptionResolver) + ): H = onCreateViewHolder(parent, loader, readerSettings, networkState, exceptionResolver) - suspend fun setItems(items: List) = suspendCoroutine { cont -> + suspend fun setItems(items: List) = suspendCoroutine { cont -> differ.submitList(items) { cont.resume(Unit) } @@ -68,6 +70,7 @@ abstract class BaseReaderAdapter>( parent: ViewGroup, loader: PageLoader, settings: ReaderSettings, + networkState: NetworkStateObserver, exceptionResolver: ExceptionResolver, ): H diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/PageHolderDelegate.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/PageHolderDelegate.kt index e29726868..27431e75b 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/PageHolderDelegate.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/PageHolderDelegate.kt @@ -17,6 +17,7 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import kotlinx.coroutines.plus import org.koitharu.kotatsu.core.exceptions.resolve.ExceptionResolver +import org.koitharu.kotatsu.core.os.NetworkStateObserver import org.koitharu.kotatsu.parsers.model.MangaPage import org.koitharu.kotatsu.reader.domain.PageLoader import org.koitharu.kotatsu.reader.ui.config.ReaderSettings @@ -27,6 +28,7 @@ class PageHolderDelegate( private val loader: PageLoader, private val readerSettings: ReaderSettings, private val callback: Callback, + private val networkState: NetworkStateObserver, private val exceptionResolver: ExceptionResolver, ) : DefaultOnImageEventListener, Observer { @@ -139,6 +141,10 @@ class PageHolderDelegate( state = State.ERROR error = e callback.onError(e) + if (e is IOException && !networkState.value) { + networkState.awaitForConnection() + retry(data) + } } } diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedPageHolder.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedPageHolder.kt index f89930ec0..8e686ae81 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedPageHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedPageHolder.kt @@ -6,6 +6,7 @@ import android.widget.FrameLayout import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView import org.koitharu.kotatsu.core.exceptions.resolve.ExceptionResolver import org.koitharu.kotatsu.core.model.ZoomMode +import org.koitharu.kotatsu.core.os.NetworkStateObserver import org.koitharu.kotatsu.databinding.ItemPageBinding import org.koitharu.kotatsu.reader.domain.PageLoader import org.koitharu.kotatsu.reader.ui.config.ReaderSettings @@ -15,8 +16,9 @@ class ReversedPageHolder( binding: ItemPageBinding, loader: PageLoader, settings: ReaderSettings, + networkState: NetworkStateObserver, exceptionResolver: ExceptionResolver, -) : PageHolder(binding, loader, settings, exceptionResolver) { +) : PageHolder(binding, loader, settings, networkState, exceptionResolver) { init { (binding.textViewNumber.layoutParams as FrameLayout.LayoutParams) @@ -35,6 +37,7 @@ class ReversedPageHolder( minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE resetScaleAndCenter() } + ZoomMode.FIT_HEIGHT -> { minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_CUSTOM minScale = height / sHeight.toFloat() @@ -43,6 +46,7 @@ class ReversedPageHolder( PointF(sWidth.toFloat(), sHeight / 2f), ) } + ZoomMode.FIT_WIDTH -> { minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_CUSTOM minScale = width / sWidth.toFloat() @@ -51,6 +55,7 @@ class ReversedPageHolder( PointF(sWidth / 2f, 0f), ) } + ZoomMode.KEEP_START -> { minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE setScaleAndCenter( diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedPagesAdapter.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedPagesAdapter.kt index 46c1f1690..d68f39334 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedPagesAdapter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedPagesAdapter.kt @@ -3,6 +3,7 @@ package org.koitharu.kotatsu.reader.ui.pager.reversed import android.view.LayoutInflater import android.view.ViewGroup import org.koitharu.kotatsu.core.exceptions.resolve.ExceptionResolver +import org.koitharu.kotatsu.core.os.NetworkStateObserver import org.koitharu.kotatsu.databinding.ItemPageBinding import org.koitharu.kotatsu.reader.domain.PageLoader import org.koitharu.kotatsu.reader.ui.config.ReaderSettings @@ -11,18 +12,21 @@ import org.koitharu.kotatsu.reader.ui.pager.BaseReaderAdapter class ReversedPagesAdapter( loader: PageLoader, settings: ReaderSettings, + networkState: NetworkStateObserver, exceptionResolver: ExceptionResolver, -) : BaseReaderAdapter(loader, settings, exceptionResolver) { +) : BaseReaderAdapter(loader, settings, networkState, exceptionResolver) { override fun onCreateViewHolder( parent: ViewGroup, loader: PageLoader, settings: ReaderSettings, + networkState: NetworkStateObserver, exceptionResolver: ExceptionResolver, ) = ReversedPageHolder( binding = ItemPageBinding.inflate(LayoutInflater.from(parent.context), parent, false), loader = loader, settings = settings, + networkState = networkState, exceptionResolver = exceptionResolver, ) } diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedReaderFragment.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedReaderFragment.kt index 9a1c297f2..df4a739ac 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedReaderFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedReaderFragment.kt @@ -7,8 +7,8 @@ import android.view.View import android.view.ViewGroup import androidx.core.view.children import dagger.hilt.android.AndroidEntryPoint -import kotlin.math.absoluteValue import kotlinx.coroutines.async +import org.koitharu.kotatsu.core.os.NetworkStateObserver import org.koitharu.kotatsu.databinding.FragmentReaderStandardBinding import org.koitharu.kotatsu.reader.ui.ReaderState import org.koitharu.kotatsu.reader.ui.pager.BaseReader @@ -19,10 +19,15 @@ import org.koitharu.kotatsu.utils.ext.doOnPageChanged import org.koitharu.kotatsu.utils.ext.recyclerView import org.koitharu.kotatsu.utils.ext.resetTransformations import org.koitharu.kotatsu.utils.ext.viewLifecycleScope +import javax.inject.Inject +import kotlin.math.absoluteValue @AndroidEntryPoint class ReversedReaderFragment : BaseReader() { + @Inject + lateinit var networkStateObserver: NetworkStateObserver + private var pagerAdapter: ReversedPagesAdapter? = null override fun onInflateView( @@ -33,7 +38,12 @@ class ReversedReaderFragment : BaseReader() { @SuppressLint("NotifyDataSetChanged") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - pagerAdapter = ReversedPagesAdapter(viewModel.pageLoader, viewModel.readerSettings, exceptionResolver) + pagerAdapter = ReversedPagesAdapter( + viewModel.pageLoader, + viewModel.readerSettings, + networkStateObserver, + exceptionResolver, + ) with(binding.pager) { adapter = pagerAdapter offscreenPageLimit = 2 @@ -44,8 +54,8 @@ class ReversedReaderFragment : BaseReader() { val transformer = if (it) ReversedPageAnimTransformer() else null binding.pager.setPageTransformer(transformer) if (transformer == null) { - binding.pager.recyclerView?.children?.forEach { - it.resetTransformations() + binding.pager.recyclerView?.children?.forEach { v -> + v.resetTransformations() } } } diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt index 713bfe306..b56163f54 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt @@ -10,6 +10,7 @@ import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.exceptions.resolve.ExceptionResolver import org.koitharu.kotatsu.core.model.ZoomMode +import org.koitharu.kotatsu.core.os.NetworkStateObserver import org.koitharu.kotatsu.databinding.ItemPageBinding import org.koitharu.kotatsu.reader.domain.PageLoader import org.koitharu.kotatsu.reader.ui.config.ReaderSettings @@ -21,8 +22,9 @@ open class PageHolder( binding: ItemPageBinding, loader: PageLoader, settings: ReaderSettings, + networkState: NetworkStateObserver, exceptionResolver: ExceptionResolver, -) : BasePageHolder(binding, loader, settings, exceptionResolver), +) : BasePageHolder(binding, loader, settings, networkState, exceptionResolver), View.OnClickListener { init { @@ -74,6 +76,7 @@ open class PageHolder( binding.ssiv.minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE binding.ssiv.resetScaleAndCenter() } + ZoomMode.FIT_HEIGHT -> { binding.ssiv.minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_CUSTOM binding.ssiv.minScale = binding.ssiv.height / binding.ssiv.sHeight.toFloat() @@ -82,6 +85,7 @@ open class PageHolder( PointF(0f, binding.ssiv.sHeight / 2f), ) } + ZoomMode.FIT_WIDTH -> { binding.ssiv.minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_CUSTOM binding.ssiv.minScale = binding.ssiv.width / binding.ssiv.sWidth.toFloat() @@ -90,6 +94,7 @@ open class PageHolder( PointF(binding.ssiv.sWidth / 2f, 0f), ) } + ZoomMode.KEEP_START -> { binding.ssiv.minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE binding.ssiv.setScaleAndCenter( diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagerReaderFragment.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagerReaderFragment.kt index a7d526d95..889f5189f 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagerReaderFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagerReaderFragment.kt @@ -7,8 +7,8 @@ import android.view.View import android.view.ViewGroup import androidx.core.view.children import dagger.hilt.android.AndroidEntryPoint -import kotlin.math.absoluteValue import kotlinx.coroutines.async +import org.koitharu.kotatsu.core.os.NetworkStateObserver import org.koitharu.kotatsu.databinding.FragmentReaderStandardBinding import org.koitharu.kotatsu.reader.ui.ReaderState import org.koitharu.kotatsu.reader.ui.pager.BaseReader @@ -18,10 +18,15 @@ import org.koitharu.kotatsu.utils.ext.doOnPageChanged import org.koitharu.kotatsu.utils.ext.recyclerView import org.koitharu.kotatsu.utils.ext.resetTransformations import org.koitharu.kotatsu.utils.ext.viewLifecycleScope +import javax.inject.Inject +import kotlin.math.absoluteValue @AndroidEntryPoint class PagerReaderFragment : BaseReader() { + @Inject + lateinit var networkStateObserver: NetworkStateObserver + private var pagesAdapter: PagesAdapter? = null override fun onInflateView( @@ -32,7 +37,12 @@ class PagerReaderFragment : BaseReader() { @SuppressLint("NotifyDataSetChanged") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - pagesAdapter = PagesAdapter(viewModel.pageLoader, viewModel.readerSettings, exceptionResolver) + pagesAdapter = PagesAdapter( + viewModel.pageLoader, + viewModel.readerSettings, + networkStateObserver, + exceptionResolver, + ) with(binding.pager) { adapter = pagesAdapter offscreenPageLimit = 2 diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagesAdapter.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagesAdapter.kt index 57badce92..293ca6273 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagesAdapter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagesAdapter.kt @@ -3,6 +3,7 @@ package org.koitharu.kotatsu.reader.ui.pager.standard import android.view.LayoutInflater import android.view.ViewGroup import org.koitharu.kotatsu.core.exceptions.resolve.ExceptionResolver +import org.koitharu.kotatsu.core.os.NetworkStateObserver import org.koitharu.kotatsu.databinding.ItemPageBinding import org.koitharu.kotatsu.reader.domain.PageLoader import org.koitharu.kotatsu.reader.ui.config.ReaderSettings @@ -11,18 +12,21 @@ import org.koitharu.kotatsu.reader.ui.pager.BaseReaderAdapter class PagesAdapter( loader: PageLoader, settings: ReaderSettings, + networkStateObserver: NetworkStateObserver, exceptionResolver: ExceptionResolver, -) : BaseReaderAdapter(loader, settings, exceptionResolver) { +) : BaseReaderAdapter(loader, settings, networkStateObserver, exceptionResolver) { override fun onCreateViewHolder( parent: ViewGroup, loader: PageLoader, settings: ReaderSettings, + networkState: NetworkStateObserver, exceptionResolver: ExceptionResolver, ) = PageHolder( binding = ItemPageBinding.inflate(LayoutInflater.from(parent.context), parent, false), loader = loader, settings = settings, + networkState = networkState, exceptionResolver = exceptionResolver, ) } diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonAdapter.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonAdapter.kt index ea76b62f8..6d92ff321 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonAdapter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonAdapter.kt @@ -3,7 +3,7 @@ package org.koitharu.kotatsu.reader.ui.pager.webtoon import android.view.LayoutInflater import android.view.ViewGroup import org.koitharu.kotatsu.core.exceptions.resolve.ExceptionResolver -import org.koitharu.kotatsu.core.prefs.AppSettings +import org.koitharu.kotatsu.core.os.NetworkStateObserver import org.koitharu.kotatsu.databinding.ItemPageWebtoonBinding import org.koitharu.kotatsu.reader.domain.PageLoader import org.koitharu.kotatsu.reader.ui.config.ReaderSettings @@ -12,13 +12,15 @@ import org.koitharu.kotatsu.reader.ui.pager.BaseReaderAdapter class WebtoonAdapter( loader: PageLoader, settings: ReaderSettings, + networkState: NetworkStateObserver, exceptionResolver: ExceptionResolver, -) : BaseReaderAdapter(loader, settings, exceptionResolver) { +) : BaseReaderAdapter(loader, settings, networkState, exceptionResolver) { override fun onCreateViewHolder( parent: ViewGroup, loader: PageLoader, settings: ReaderSettings, + networkState: NetworkStateObserver, exceptionResolver: ExceptionResolver, ) = WebtoonHolder( binding = ItemPageWebtoonBinding.inflate( @@ -28,6 +30,7 @@ class WebtoonAdapter( ), loader = loader, settings = settings, + networkState = networkState, exceptionResolver = exceptionResolver, ) } diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonHolder.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonHolder.kt index 264f21fe7..086081097 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonHolder.kt @@ -8,20 +8,26 @@ import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView import com.davemorrissey.labs.subscaleview.decoder.SkiaPooledImageRegionDecoder import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.exceptions.resolve.ExceptionResolver +import org.koitharu.kotatsu.core.os.NetworkStateObserver import org.koitharu.kotatsu.databinding.ItemPageWebtoonBinding import org.koitharu.kotatsu.reader.domain.PageLoader import org.koitharu.kotatsu.reader.ui.config.ReaderSettings import org.koitharu.kotatsu.reader.ui.pager.BasePageHolder import org.koitharu.kotatsu.reader.ui.pager.ReaderPage import org.koitharu.kotatsu.utils.GoneOnInvisibleListener -import org.koitharu.kotatsu.utils.ext.* +import org.koitharu.kotatsu.utils.ext.getDisplayMessage +import org.koitharu.kotatsu.utils.ext.hideCompat +import org.koitharu.kotatsu.utils.ext.ifZero +import org.koitharu.kotatsu.utils.ext.setProgressCompat +import org.koitharu.kotatsu.utils.ext.showCompat class WebtoonHolder( binding: ItemPageWebtoonBinding, loader: PageLoader, settings: ReaderSettings, + networkState: NetworkStateObserver, exceptionResolver: ExceptionResolver, -) : BasePageHolder(binding, loader, settings, exceptionResolver), +) : BasePageHolder(binding, loader, settings, networkState, exceptionResolver), View.OnClickListener { private var scrollToRestore = 0 diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonReaderFragment.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonReaderFragment.kt index 79a4e8927..7fe5fb1f4 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonReaderFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonReaderFragment.kt @@ -7,6 +7,7 @@ import android.view.ViewGroup import android.view.animation.AccelerateDecelerateInterpolator import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.async +import org.koitharu.kotatsu.core.os.NetworkStateObserver import org.koitharu.kotatsu.databinding.FragmentReaderWebtoonBinding import org.koitharu.kotatsu.reader.ui.ReaderState import org.koitharu.kotatsu.reader.ui.pager.BaseReader @@ -15,10 +16,14 @@ import org.koitharu.kotatsu.reader.ui.pager.ReaderPage import org.koitharu.kotatsu.utils.ext.findCenterViewPosition import org.koitharu.kotatsu.utils.ext.firstVisibleItemPosition import org.koitharu.kotatsu.utils.ext.viewLifecycleScope +import javax.inject.Inject @AndroidEntryPoint class WebtoonReaderFragment : BaseReader() { + @Inject + lateinit var networkStateObserver: NetworkStateObserver + private val scrollInterpolator = AccelerateDecelerateInterpolator() private var webtoonAdapter: WebtoonAdapter? = null @@ -29,7 +34,12 @@ class WebtoonReaderFragment : BaseReader() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - webtoonAdapter = WebtoonAdapter(viewModel.pageLoader, viewModel.readerSettings, exceptionResolver) + webtoonAdapter = WebtoonAdapter( + viewModel.pageLoader, + viewModel.readerSettings, + networkStateObserver, + exceptionResolver, + ) with(binding.recyclerView) { setHasFixedSize(true) adapter = webtoonAdapter