diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderPageImageView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderPageImageView.kt index bbbd0dc88..01d98cbbd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderPageImageView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderPageImageView.kt @@ -14,8 +14,14 @@ import androidx.annotation.CallSuper import androidx.annotation.StyleRes import androidx.appcompat.widget.AppCompatImageView import androidx.core.view.isVisible +import coil.dispose +import coil.imageLoader +import coil.request.CachePolicy +import coil.request.ImageRequest import com.github.chrisbanes.photoview.PhotoView import eu.kanade.tachiyomi.util.system.animatorDurationScale +import java.io.InputStream +import java.nio.ByteBuffer /** * A wrapper view for showing page image. @@ -77,6 +83,9 @@ open class ReaderPageImageView @JvmOverloads constructor( } fun recycle() = pageView?.let { + when (it) { + is AppCompatImageView -> it.dispose() + } it.isVisible = false } @@ -126,11 +135,30 @@ open class ReaderPageImageView @JvmOverloads constructor( if (this is PhotoView) { setZoomTransitionDuration(config.zoomDuration.getSystemScaledDuration()) } - check(image is Drawable) - setImageDrawable(image) - (image as? Animatable)?.start() - isVisible = true - onImageLoaded() + + val data = when (image) { + is Drawable -> image + is InputStream -> ByteBuffer.wrap(image.readBytes()) + else -> throw IllegalArgumentException("Not implemented for class ${image::class.simpleName}") + } + val request = ImageRequest.Builder(context) + .data(data) + .memoryCachePolicy(CachePolicy.DISABLED) + .diskCachePolicy(CachePolicy.DISABLED) + .target( + onSuccess = { result -> + setImageDrawable(result) + (result as? Animatable)?.start() + isVisible = true + this@ReaderPageImageView.onImageLoaded() + }, + onError = { + this@ReaderPageImageView.onImageLoadError() + }, + ) + .crossfade(false) + .build() + context.imageLoader.enqueue(request) } private fun Int.getSystemScaledDuration(): Int {