Apply color config on-the-fly
This commit is contained in:
@@ -3,10 +3,12 @@ package org.koitharu.kotatsu.reader.ui.config
|
||||
import android.content.SharedPreferences
|
||||
import android.graphics.Bitmap
|
||||
import android.view.View
|
||||
import androidx.annotation.CheckResult
|
||||
import androidx.lifecycle.MediatorLiveData
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||
import com.davemorrissey.labs.subscaleview.decoder.SkiaImageDecoder
|
||||
import com.davemorrissey.labs.subscaleview.decoder.SkiaImageRegionDecoder
|
||||
import com.davemorrissey.labs.subscaleview.decoder.SkiaPooledImageRegionDecoder
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
@@ -16,6 +18,7 @@ import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.koitharu.kotatsu.core.model.ZoomMode
|
||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||
import org.koitharu.kotatsu.core.util.ext.isLowRamDevice
|
||||
import org.koitharu.kotatsu.reader.domain.ReaderColorFilter
|
||||
|
||||
class ReaderSettings(
|
||||
@@ -51,11 +54,19 @@ class ReaderSettings(
|
||||
view.background = bg.resolve(view.context)
|
||||
}
|
||||
|
||||
fun applyBitmapConfig(ssiv: SubsamplingScaleImageView) {
|
||||
@CheckResult
|
||||
fun applyBitmapConfig(ssiv: SubsamplingScaleImageView): Boolean {
|
||||
val config = bitmapConfig
|
||||
if (ssiv.regionDecoderFactory.bitmapConfig != config) {
|
||||
ssiv.regionDecoderFactory = SkiaImageRegionDecoder.Factory(config)
|
||||
return if (ssiv.regionDecoderFactory.bitmapConfig != config) {
|
||||
ssiv.regionDecoderFactory = if (ssiv.context.isLowRamDevice()) {
|
||||
SkiaImageRegionDecoder.Factory(config)
|
||||
} else {
|
||||
SkiaPooledImageRegionDecoder.Factory(config)
|
||||
}
|
||||
ssiv.bitmapDecoderFactory = SkiaImageDecoder.Factory(config)
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -84,6 +84,14 @@ class PageHolderDelegate(
|
||||
job?.cancel()
|
||||
}
|
||||
|
||||
fun reload() {
|
||||
if (state == State.SHOWN ) {
|
||||
file?.let {
|
||||
callback.onImageReady(it.toUri())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onReady() {
|
||||
state = State.SHOWING
|
||||
error = null
|
||||
|
||||
@@ -46,7 +46,10 @@ open class PageHolder(
|
||||
override fun onConfigChanged() {
|
||||
super.onConfigChanged()
|
||||
binding.zoomControl.isVisible = settings.isZoomControlsEnabled
|
||||
settings.applyBitmapConfig(binding.ssiv)
|
||||
@Suppress("SENSELESS_COMPARISON")
|
||||
if (settings.applyBitmapConfig(binding.ssiv) && delegate != null) {
|
||||
delegate.reload()
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
|
||||
@@ -40,7 +40,10 @@ class WebtoonHolder(
|
||||
|
||||
override fun onConfigChanged() {
|
||||
super.onConfigChanged()
|
||||
settings.applyBitmapConfig(binding.ssiv)
|
||||
@Suppress("SENSELESS_COMPARISON")
|
||||
if (settings.applyBitmapConfig(binding.ssiv) && delegate != null) {
|
||||
delegate.reload()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBind(data: ReaderPage) {
|
||||
|
||||
Reference in New Issue
Block a user