Fix long strip images not loading in some old devices

Fixes #1398

(cherry picked from commit 06efc3b25c5af51f42448af27a269ee459d9093d)

# Conflicts:
#	CHANGELOG.md
This commit is contained in:
AntsyLich 2024-10-31 18:25:34 +06:00 committed by Jobobby04
parent 226321f334
commit e3dae57e0b
3 changed files with 42 additions and 28 deletions

View File

@ -40,6 +40,7 @@ import eu.kanade.tachiyomi.util.system.GLUtil
import eu.kanade.tachiyomi.util.system.animatorDurationScale import eu.kanade.tachiyomi.util.system.animatorDurationScale
import eu.kanade.tachiyomi.util.view.isVisibleOnScreen import eu.kanade.tachiyomi.util.view.isVisibleOnScreen
import okio.BufferedSource import okio.BufferedSource
import tachiyomi.core.common.util.system.ImageUtil
/** /**
* A wrapper view for showing page image. * A wrapper view for showing page image.
@ -287,35 +288,42 @@ open class ReaderPageImageView @JvmOverloads constructor(
}, },
) )
if (isWebtoon) { when (data) {
val request = ImageRequest.Builder(context) is BitmapDrawable -> {
.data(data) setImage(ImageSource.bitmap(data.bitmap))
.memoryCachePolicy(CachePolicy.DISABLED) isVisible = true
.diskCachePolicy(CachePolicy.DISABLED) }
.target( is BufferedSource -> {
onSuccess = { result -> if (!isWebtoon || !ImageUtil.canUseCoilToDecode(data)) {
val image = result as BitmapImage setImage(ImageSource.inputStream(data.inputStream()))
setImage(ImageSource.bitmap(image.bitmap)) isVisible = true
isVisible = true } else {
}, val request = ImageRequest.Builder(context)
onError = { .data(data)
this@ReaderPageImageView.onImageLoadError() .memoryCachePolicy(CachePolicy.DISABLED)
}, .diskCachePolicy(CachePolicy.DISABLED)
) .target(
.size(ViewSizeResolver(this@ReaderPageImageView)) onSuccess = { result ->
.precision(Precision.INEXACT) val image = result as BitmapImage
.cropBorders(config.cropBorders) setImage(ImageSource.bitmap(image.bitmap))
.customDecoder(true) isVisible = true
.crossfade(false) },
.build() onError = {
context.imageLoader.enqueue(request) this@ReaderPageImageView.onImageLoadError()
} else { },
when (data) { )
is BitmapDrawable -> setImage(ImageSource.bitmap(data.bitmap)) .size(ViewSizeResolver(this@ReaderPageImageView))
is BufferedSource -> setImage(ImageSource.inputStream(data.inputStream())) .precision(Precision.INEXACT)
else -> throw IllegalArgumentException("Not implemented for class ${data::class.simpleName}") .cropBorders(config.cropBorders)
.customDecoder(true)
.crossfade(false)
.build()
context.imageLoader.enqueue(request)
}
}
else -> {
throw IllegalArgumentException("Not implemented for class ${data::class.simpleName}")
} }
isVisible = true
} }
} }

View File

@ -24,6 +24,7 @@ import androidx.core.graphics.green
import androidx.core.graphics.red import androidx.core.graphics.red
import androidx.exifinterface.media.ExifInterface import androidx.exifinterface.media.ExifInterface
import com.hippo.unifile.UniFile import com.hippo.unifile.UniFile
import eu.kanade.tachiyomi.util.system.GLUtil
import logcat.LogPriority import logcat.LogPriority
import okio.Buffer import okio.Buffer
import okio.BufferedSource import okio.BufferedSource
@ -359,6 +360,11 @@ object ImageUtil {
val bottomOffset = topOffset + splitHeight 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 * Algorithm for determining what background to accompany a comic/manga page
*/ */