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 d3980c687..c1538dfb5 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 @@ -13,7 +13,7 @@ abstract class BasePageHolder( protected val binding: B, loader: PageLoader, settings: AppSettings, - exceptionResolver: ExceptionResolver + exceptionResolver: ExceptionResolver, ) : RecyclerView.ViewHolder(binding.root), PageHolderDelegate.Callback { @Suppress("LeakingThis") @@ -37,6 +37,14 @@ abstract class BasePageHolder( protected abstract fun onBind(data: ReaderPage) + @CallSuper + open fun onAttachedToWindow() { + } + + @CallSuper + open fun onDetachedFromWindow() { + } + @CallSuper open fun onRecycled() { delegate.onRecycle() 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 d097c1bc2..9a3e98c92 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,12 +4,12 @@ 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.prefs.AppSettings import org.koitharu.kotatsu.reader.domain.PageLoader import org.koitharu.kotatsu.utils.ext.resetTransformations -import kotlin.coroutines.resume -import kotlin.coroutines.suspendCoroutine @Suppress("LeakingThis") abstract class BaseReaderAdapter>( @@ -35,6 +35,16 @@ abstract class BaseReaderAdapter>( super.onViewRecycled(holder) } + override fun onViewAttachedToWindow(holder: H) { + super.onViewAttachedToWindow(holder) + holder.onAttachedToWindow() + } + + override fun onViewDetachedFromWindow(holder: H) { + super.onViewDetachedFromWindow(holder) + holder.onDetachedFromWindow() + } + open fun getItem(position: Int): ReaderPage = differ.currentList[position] open fun getItemOrNull(position: Int) = differ.currentList.getOrNull(position) @@ -45,7 +55,7 @@ abstract class BaseReaderAdapter>( final override fun onCreateViewHolder( parent: ViewGroup, - viewType: Int + viewType: Int, ): H = onCreateViewHolder(parent, loader, settings, exceptionResolver) suspend fun setItems(items: List) = suspendCoroutine { cont -> @@ -58,7 +68,7 @@ abstract class BaseReaderAdapter>( parent: ViewGroup, loader: PageLoader, settings: AppSettings, - exceptionResolver: ExceptionResolver + exceptionResolver: ExceptionResolver, ): H private class DiffCallback : DiffUtil.ItemCallback() { @@ -70,6 +80,5 @@ abstract class BaseReaderAdapter>( override fun areContentsTheSame(oldItem: ReaderPage, newItem: ReaderPage): Boolean { return oldItem == newItem } - } } \ No newline at end of file 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 4d9fc1ed8..c25b701a9 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 @@ -25,11 +25,11 @@ class WebtoonHolder( View.OnClickListener { private var scrollToRestore = 0 + private val goneOnInvisibleListener = GoneOnInvisibleListener(bindingInfo.progressBar) init { binding.ssiv.setOnImageEventListener(delegate) bindingInfo.buttonRetry.setOnClickListener(this) - GoneOnInvisibleListener(bindingInfo.progressBar).attach() } override fun onBind(data: ReaderPage) { @@ -41,6 +41,16 @@ class WebtoonHolder( binding.ssiv.recycle() } + override fun onAttachedToWindow() { + super.onAttachedToWindow() + goneOnInvisibleListener.attach() + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + goneOnInvisibleListener.detach() + } + override fun onLoadingStarted() { bindingInfo.layoutError.isVisible = false bindingInfo.progressBar.showCompat() diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/GoneOnInvisibleListener.kt b/app/src/main/java/org/koitharu/kotatsu/utils/GoneOnInvisibleListener.kt index da4fe3f3f..46de769c6 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/GoneOnInvisibleListener.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/GoneOnInvisibleListener.kt @@ -19,5 +19,10 @@ class GoneOnInvisibleListener( fun attach() { view.viewTreeObserver.addOnGlobalLayoutListener(this) + onGlobalLayout() } -} \ No newline at end of file + + fun detach() { + view.viewTreeObserver.removeOnGlobalLayoutListener(this) + } +}