From 2d727a0da8b6942e7ddb9e1beb7326fc6cce5274 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Mon, 12 Sep 2022 15:43:42 +0300 Subject: [PATCH] Prevent GoneOnInvisibleListener leak --- .../kotatsu/reader/ui/pager/BasePageHolder.kt | 6 ++++-- .../kotatsu/reader/ui/pager/webtoon/WebtoonHolder.kt | 12 +++++++++++- .../kotatsu/utils/GoneOnInvisibleListener.kt | 7 ++++++- 3 files changed, 21 insertions(+), 4 deletions(-) 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 0f752c861..e8c9fcc9e 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 @@ -37,11 +37,13 @@ abstract class BasePageHolder( protected abstract fun onBind(data: ReaderPage) - fun onAttachedToWindow() { + @CallSuper + open fun onAttachedToWindow() { delegate.onAttachedToWindow() } - fun onDetachedFromWindow() { + @CallSuper + open fun onDetachedFromWindow() { delegate.onDetachedFromWindow() } 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 da78b6615..264f21fe7 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,12 +25,12 @@ class WebtoonHolder( View.OnClickListener { private var scrollToRestore = 0 + private val goneOnInvisibleListener = GoneOnInvisibleListener(bindingInfo.progressBar) init { binding.ssiv.regionDecoderFactory = SkiaPooledImageRegionDecoder.Factory() binding.ssiv.addOnImageEventListener(delegate) bindingInfo.buttonRetry.setOnClickListener(this) - GoneOnInvisibleListener(bindingInfo.progressBar).attach() } override fun onBind(data: ReaderPage) { @@ -42,6 +42,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) + } +}