优化
Some checks are pending
Test Build / prepare (push) Waiting to run
Test Build / build (app, release) (push) Blocked by required conditions
Test Build / build (app, releaseA) (push) Blocked by required conditions
Test Build / prerelease (push) Blocked by required conditions
Test Build / lanzou (push) Blocked by required conditions
Test Build / test_Branch (push) Blocked by required conditions
Test Build / telegram (push) Blocked by required conditions

This commit is contained in:
Horis
2025-03-15 13:11:56 +08:00
parent 9ccd60f064
commit fdfce95013
5 changed files with 40 additions and 35 deletions

View File

@@ -20,7 +20,6 @@ import io.legado.app.help.config.AppConfig
import io.legado.app.help.coroutine.Coroutine
import io.legado.app.help.globalExecutor
import io.legado.app.model.webBook.WebBook
import io.legado.app.ui.book.manga.config.MangaColorFilterConfig
import io.legado.app.ui.book.manga.entities.MangaChapter
import io.legado.app.ui.book.manga.entities.MangaContent
import io.legado.app.ui.book.manga.entities.MangaContentData
@@ -589,6 +588,5 @@ object ReadManga : CoroutineScope by MainScope() {
fun loadFail(msg: String)
fun sureNewProgress(progress: BookProgress)
fun showLoading()
fun colorFilter(config: MangaColorFilterConfig)
}
}

View File

@@ -71,7 +71,8 @@ import kotlinx.coroutines.withContext
import java.text.DecimalFormat
class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewModel>(),
ReadManga.Callback, ChangeBookSourceDialog.CallBack, MangaMenu.CallBack {
ReadManga.Callback, ChangeBookSourceDialog.CallBack, MangaMenu.CallBack,
MangaColorFilterDialog.Callback {
private val mLayoutManager by lazy {
LinearLayoutManager(
@@ -428,11 +429,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
}
}
override fun colorFilter(config: MangaColorFilterConfig) {
mAdapter.setMangaImageColorFilter(config)
updateWindowBrightness(config.l)
}
override val oldBook: Book?
get() = ReadManga.book
@@ -445,6 +441,10 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
}
}
override fun updateColorFilter(config: MangaColorFilterConfig) {
mAdapter.setMangaImageColorFilter(config)
updateWindowBrightness(config.l)
}
@SuppressLint("StringFormatMatches")
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {

View File

@@ -1,13 +1,18 @@
package io.legado.app.ui.book.manga.config
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
import io.legado.app.utils.GSON
@Parcelize
data class MangaColorFilterConfig(
var r: Int = 0,
var g: Int = 0,
var b: Int = 0,
var a: Int = 0,
var l: Int = 0
) : Parcelable
) {
fun toJson(): String {
if (r == 0 && g == 0 && b == 0 && a == 0 && l == 0) {
return ""
}
return GSON.toJson(this)
}
}

View File

@@ -9,7 +9,6 @@ import io.legado.app.R
import io.legado.app.base.BaseDialogFragment
import io.legado.app.databinding.DialogMangaColorFilterBinding
import io.legado.app.help.config.AppConfig
import io.legado.app.model.ReadManga
import io.legado.app.utils.GSON
import io.legado.app.utils.fromJsonObject
import io.legado.app.utils.setLayout
@@ -20,6 +19,7 @@ class MangaColorFilterDialog : BaseDialogFragment(R.layout.dialog_manga_color_fi
private val mConfig =
GSON.fromJsonObject<MangaColorFilterConfig>(AppConfig.mangaColorFilter).getOrNull()
?: MangaColorFilterConfig()
private val callback get() = activity as? Callback
override fun onStart() {
super.onStart()
@@ -46,30 +46,34 @@ class MangaColorFilterDialog : BaseDialogFragment(R.layout.dialog_manga_color_fi
binding.run {
dsbBrightness.onChanged = {
mConfig.l = it
ReadManga.mCallback?.colorFilter(mConfig)
callback?.updateColorFilter(mConfig)
}
dsbR.onChanged = {
mConfig.r = it
ReadManga.mCallback?.colorFilter(mConfig)
callback?.updateColorFilter(mConfig)
}
dsbG.onChanged = {
mConfig.g = it
ReadManga.mCallback?.colorFilter(mConfig)
callback?.updateColorFilter(mConfig)
}
dsbB.onChanged = {
mConfig.b = it
ReadManga.mCallback?.colorFilter(mConfig)
callback?.updateColorFilter(mConfig)
}
dsbA.onChanged = {
mConfig.a = it
ReadManga.mCallback?.colorFilter(mConfig)
callback?.updateColorFilter(mConfig)
}
}
}
override fun onDismiss(dialog: DialogInterface) {
super.onDismiss(dialog)
AppConfig.mangaColorFilter = GSON.toJson(mConfig)
AppConfig.mangaColorFilter = mConfig.toJson()
}
interface Callback {
fun updateColorFilter(config: MangaColorFilterConfig)
}
}

View File

@@ -105,23 +105,21 @@ class MangaAdapter(private val context: Context) :
}
fun setImageColorFilter() {
binding.image.run {
require(
mConfig.r in 0..255 &&
mConfig.g in 0..255 &&
mConfig.b in 0..255 &&
mConfig.a in 0..255
) {
"ARGB values must be between 0-255"
}
val matrix = floatArrayOf(
(255 - mConfig.r) / 255f, 0f, 0f, 0f, 0f,
0f, (255 - mConfig.g) / 255f, 0f, 0f, 0f,
0f, 0f, (255 - mConfig.b) / 255f, 0f, 0f,
0f, 0f, 0f, (255 - mConfig.a) / 255f, 0f
)
colorFilter = ColorMatrixColorFilter(ColorMatrix(matrix))
require(
mConfig.r in 0..255 &&
mConfig.g in 0..255 &&
mConfig.b in 0..255 &&
mConfig.a in 0..255
) {
"ARGB values must be between 0-255"
}
val matrix = floatArrayOf(
(255 - mConfig.r) / 255f, 0f, 0f, 0f, 0f,
0f, (255 - mConfig.g) / 255f, 0f, 0f, 0f,
0f, 0f, (255 - mConfig.b) / 255f, 0f, 0f,
0f, 0f, 0f, (255 - mConfig.a) / 255f, 0f
)
binding.image.colorFilter = ColorMatrixColorFilter(ColorMatrix(matrix))
}
}