diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseRecyclerAdapter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseRecyclerAdapter.kt index 1b026e504..686873a91 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseRecyclerAdapter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseRecyclerAdapter.kt @@ -80,6 +80,10 @@ abstract class BaseRecyclerAdapter(private val onItemClickListener: OnRecy onDataSetChanged() } + override fun onViewRecycled(holder: BaseViewHolder) { + holder.onRecycled() + } + final override fun getItemCount() = dataSet.size final override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder { diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseViewHolder.kt b/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseViewHolder.kt index e6cd0421b..c74b343e0 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseViewHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseViewHolder.kt @@ -40,5 +40,7 @@ abstract class BaseViewHolder protected constructor(view: View) : return this } + open fun onRecycled() = Unit + abstract fun onBind(data: T, extra: E) } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaGridHolder.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaGridHolder.kt index 250bc86b1..66b37b573 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaGridHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaGridHolder.kt @@ -1,8 +1,8 @@ package org.koitharu.kotatsu.ui.main.list import android.view.ViewGroup +import coil.api.clear import coil.api.load -import coil.request.RequestDisposable import kotlinx.android.synthetic.main.item_manga_grid.* import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.model.Manga @@ -11,16 +11,17 @@ import org.koitharu.kotatsu.ui.common.list.BaseViewHolder class MangaGridHolder(parent: ViewGroup) : BaseViewHolder(parent, R.layout.item_manga_grid) { - private var coverRequest: RequestDisposable? = null - override fun onBind(data: Manga, extra: MangaHistory?) { - coverRequest?.dispose() - imageView_cover.setImageDrawable(null) + imageView_cover.clear() textView_title.text = data.title - coverRequest = imageView_cover.load(data.coverUrl) { + imageView_cover.load(data.coverUrl) { placeholder(R.drawable.ic_placeholder) fallback(R.drawable.ic_placeholder) error(R.drawable.ic_placeholder) } } + + override fun onRecycled() { + imageView_cover.clear() + } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListDetailsHolder.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListDetailsHolder.kt index a3cd38e86..b08fcf226 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListDetailsHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListDetailsHolder.kt @@ -3,8 +3,8 @@ package org.koitharu.kotatsu.ui.main.list import android.annotation.SuppressLint import android.view.ViewGroup import androidx.core.view.isVisible +import coil.api.clear import coil.api.load -import coil.request.RequestDisposable import kotlinx.android.synthetic.main.item_manga_list_details.* import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.model.Manga @@ -15,14 +15,12 @@ import kotlin.math.roundToInt class MangaListDetailsHolder(parent: ViewGroup) : BaseViewHolder(parent, R.layout.item_manga_list_details) { - private var coverRequest: RequestDisposable? = null - @SuppressLint("SetTextI18n") override fun onBind(data: Manga, extra: MangaHistory?) { - coverRequest?.dispose() + imageView_cover.clear() textView_title.text = data.title textView_subtitle.textAndVisible = data.altTitle - coverRequest = imageView_cover.load(data.coverUrl) { + imageView_cover.load(data.coverUrl) { placeholder(R.drawable.ic_placeholder) fallback(R.drawable.ic_placeholder) error(R.drawable.ic_placeholder) @@ -37,4 +35,8 @@ class MangaListDetailsHolder(parent: ViewGroup) : BaseViewHolder(parent, R.layout.item_manga_list) { - private var coverRequest: RequestDisposable? = null - override fun onBind(data: Manga, extra: MangaHistory?) { - coverRequest?.dispose() + imageView_cover.clear() textView_title.text = data.title textView_subtitle.textAndVisible = data.tags.joinToString(", ") { it.title } - coverRequest = imageView_cover.load(data.coverUrl) { + imageView_cover.load(data.coverUrl) { placeholder(R.drawable.ic_placeholder) fallback(R.drawable.ic_placeholder) error(R.drawable.ic_placeholder) } } + + override fun onRecycled() { + imageView_cover.clear() + } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/reader/standard/PageHolder.kt b/app/src/main/java/org/koitharu/kotatsu/ui/reader/standard/PageHolder.kt index 755e3510e..2de37a7b3 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/reader/standard/PageHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/reader/standard/PageHolder.kt @@ -30,6 +30,11 @@ class PageHolder(parent: ViewGroup, private val loader: PageLoader) : doLoad(data, force = false) } + override fun onRecycled() { + job?.cancel() + ssiv.recycle() + } + private fun doLoad(data: MangaPage, force: Boolean) { job?.cancel() job = launch { diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PageThumbnailHolder.kt b/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PageThumbnailHolder.kt index aaed480f7..da83cc3fb 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PageThumbnailHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PageThumbnailHolder.kt @@ -50,4 +50,9 @@ class PageThumbnailHolder(parent: ViewGroup, private val scope: CoroutineScope) } } } + + override fun onRecycled() { + job?.cancel() + imageView_thumb.setImageDrawable(null) + } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/reader/wetoon/WebtoonHolder.kt b/app/src/main/java/org/koitharu/kotatsu/ui/reader/wetoon/WebtoonHolder.kt index bb1c79667..4181a9797 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/reader/wetoon/WebtoonHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/reader/wetoon/WebtoonHolder.kt @@ -6,7 +6,7 @@ import androidx.core.net.toUri import androidx.core.view.isVisible import com.davemorrissey.labs.subscaleview.ImageSource import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView -import kotlinx.android.synthetic.main.item_page.* +import kotlinx.android.synthetic.main.item_page_webtoon.* import kotlinx.coroutines.* import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.model.MangaPage @@ -53,6 +53,11 @@ class WebtoonHolder(parent: ViewGroup, private val loader: PageLoader) : } } + override fun onRecycled() { + job?.cancel() + ssiv.recycle() + } + fun getScrollY() = ssiv.center?.y ?: 0f fun restoreScroll(scroll: Float) {