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 1041a6232..ffc0d94e5 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 @@ -40,6 +40,7 @@ import eu.kanade.tachiyomi.util.system.GLUtil import eu.kanade.tachiyomi.util.system.animatorDurationScale import eu.kanade.tachiyomi.util.view.isVisibleOnScreen import okio.BufferedSource +import tachiyomi.core.common.util.system.ImageUtil /** * A wrapper view for showing page image. @@ -287,35 +288,42 @@ open class ReaderPageImageView @JvmOverloads constructor( }, ) - if (isWebtoon) { - val request = ImageRequest.Builder(context) - .data(data) - .memoryCachePolicy(CachePolicy.DISABLED) - .diskCachePolicy(CachePolicy.DISABLED) - .target( - onSuccess = { result -> - val image = result as BitmapImage - setImage(ImageSource.bitmap(image.bitmap)) - isVisible = true - }, - onError = { - this@ReaderPageImageView.onImageLoadError() - }, - ) - .size(ViewSizeResolver(this@ReaderPageImageView)) - .precision(Precision.INEXACT) - .cropBorders(config.cropBorders) - .customDecoder(true) - .crossfade(false) - .build() - context.imageLoader.enqueue(request) - } else { - when (data) { - is BitmapDrawable -> setImage(ImageSource.bitmap(data.bitmap)) - is BufferedSource -> setImage(ImageSource.inputStream(data.inputStream())) - else -> throw IllegalArgumentException("Not implemented for class ${data::class.simpleName}") + when (data) { + is BitmapDrawable -> { + setImage(ImageSource.bitmap(data.bitmap)) + isVisible = true + } + is BufferedSource -> { + if (!isWebtoon || !ImageUtil.canUseCoilToDecode(data)) { + setImage(ImageSource.inputStream(data.inputStream())) + isVisible = true + } else { + val request = ImageRequest.Builder(context) + .data(data) + .memoryCachePolicy(CachePolicy.DISABLED) + .diskCachePolicy(CachePolicy.DISABLED) + .target( + onSuccess = { result -> + val image = result as BitmapImage + setImage(ImageSource.bitmap(image.bitmap)) + isVisible = true + }, + onError = { + this@ReaderPageImageView.onImageLoadError() + }, + ) + .size(ViewSizeResolver(this@ReaderPageImageView)) + .precision(Precision.INEXACT) + .cropBorders(config.cropBorders) + .customDecoder(true) + .crossfade(false) + .build() + context.imageLoader.enqueue(request) + } + } + else -> { + throw IllegalArgumentException("Not implemented for class ${data::class.simpleName}") } - isVisible = true } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/GLUtil.kt b/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/GLUtil.kt similarity index 100% rename from app/src/main/java/eu/kanade/tachiyomi/util/system/GLUtil.kt rename to core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/GLUtil.kt diff --git a/core/common/src/main/kotlin/tachiyomi/core/common/util/system/ImageUtil.kt b/core/common/src/main/kotlin/tachiyomi/core/common/util/system/ImageUtil.kt index 9f3ed14f9..e29e15218 100644 --- a/core/common/src/main/kotlin/tachiyomi/core/common/util/system/ImageUtil.kt +++ b/core/common/src/main/kotlin/tachiyomi/core/common/util/system/ImageUtil.kt @@ -24,6 +24,7 @@ import androidx.core.graphics.green import androidx.core.graphics.red import androidx.exifinterface.media.ExifInterface import com.hippo.unifile.UniFile +import eu.kanade.tachiyomi.util.system.GLUtil import logcat.LogPriority import okio.Buffer import okio.BufferedSource @@ -359,6 +360,11 @@ object ImageUtil { val bottomOffset = topOffset + splitHeight } + fun canUseCoilToDecode(imageSource: BufferedSource): Boolean { + val options = extractImageOptions(imageSource) + return maxOf(options.outWidth, options.outHeight) <= GLUtil.maxTextureSize + } + /** * Algorithm for determining what background to accompany a comic/manga page */