优化
This commit is contained in:
@@ -20,7 +20,6 @@ import io.legado.app.help.config.AppConfig
|
|||||||
import io.legado.app.help.coroutine.Coroutine
|
import io.legado.app.help.coroutine.Coroutine
|
||||||
import io.legado.app.help.globalExecutor
|
import io.legado.app.help.globalExecutor
|
||||||
import io.legado.app.model.webBook.WebBook
|
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.MangaChapter
|
||||||
import io.legado.app.ui.book.manga.entities.MangaContent
|
import io.legado.app.ui.book.manga.entities.MangaContent
|
||||||
import io.legado.app.ui.book.manga.entities.MangaContentData
|
import io.legado.app.ui.book.manga.entities.MangaContentData
|
||||||
@@ -589,6 +588,5 @@ object ReadManga : CoroutineScope by MainScope() {
|
|||||||
fun loadFail(msg: String)
|
fun loadFail(msg: String)
|
||||||
fun sureNewProgress(progress: BookProgress)
|
fun sureNewProgress(progress: BookProgress)
|
||||||
fun showLoading()
|
fun showLoading()
|
||||||
fun colorFilter(config: MangaColorFilterConfig)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -71,7 +71,8 @@ import kotlinx.coroutines.withContext
|
|||||||
import java.text.DecimalFormat
|
import java.text.DecimalFormat
|
||||||
|
|
||||||
class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewModel>(),
|
class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewModel>(),
|
||||||
ReadManga.Callback, ChangeBookSourceDialog.CallBack, MangaMenu.CallBack {
|
ReadManga.Callback, ChangeBookSourceDialog.CallBack, MangaMenu.CallBack,
|
||||||
|
MangaColorFilterDialog.Callback {
|
||||||
|
|
||||||
private val mLayoutManager by lazy {
|
private val mLayoutManager by lazy {
|
||||||
LinearLayoutManager(
|
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?
|
override val oldBook: Book?
|
||||||
get() = ReadManga.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")
|
@SuppressLint("StringFormatMatches")
|
||||||
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {
|
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
|
|||||||
@@ -1,13 +1,18 @@
|
|||||||
package io.legado.app.ui.book.manga.config
|
package io.legado.app.ui.book.manga.config
|
||||||
|
|
||||||
import android.os.Parcelable
|
import io.legado.app.utils.GSON
|
||||||
import kotlinx.parcelize.Parcelize
|
|
||||||
|
|
||||||
@Parcelize
|
|
||||||
data class MangaColorFilterConfig(
|
data class MangaColorFilterConfig(
|
||||||
var r: Int = 0,
|
var r: Int = 0,
|
||||||
var g: Int = 0,
|
var g: Int = 0,
|
||||||
var b: Int = 0,
|
var b: Int = 0,
|
||||||
var a: Int = 0,
|
var a: Int = 0,
|
||||||
var l: 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import io.legado.app.R
|
|||||||
import io.legado.app.base.BaseDialogFragment
|
import io.legado.app.base.BaseDialogFragment
|
||||||
import io.legado.app.databinding.DialogMangaColorFilterBinding
|
import io.legado.app.databinding.DialogMangaColorFilterBinding
|
||||||
import io.legado.app.help.config.AppConfig
|
import io.legado.app.help.config.AppConfig
|
||||||
import io.legado.app.model.ReadManga
|
|
||||||
import io.legado.app.utils.GSON
|
import io.legado.app.utils.GSON
|
||||||
import io.legado.app.utils.fromJsonObject
|
import io.legado.app.utils.fromJsonObject
|
||||||
import io.legado.app.utils.setLayout
|
import io.legado.app.utils.setLayout
|
||||||
@@ -20,6 +19,7 @@ class MangaColorFilterDialog : BaseDialogFragment(R.layout.dialog_manga_color_fi
|
|||||||
private val mConfig =
|
private val mConfig =
|
||||||
GSON.fromJsonObject<MangaColorFilterConfig>(AppConfig.mangaColorFilter).getOrNull()
|
GSON.fromJsonObject<MangaColorFilterConfig>(AppConfig.mangaColorFilter).getOrNull()
|
||||||
?: MangaColorFilterConfig()
|
?: MangaColorFilterConfig()
|
||||||
|
private val callback get() = activity as? Callback
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
@@ -46,30 +46,34 @@ class MangaColorFilterDialog : BaseDialogFragment(R.layout.dialog_manga_color_fi
|
|||||||
binding.run {
|
binding.run {
|
||||||
dsbBrightness.onChanged = {
|
dsbBrightness.onChanged = {
|
||||||
mConfig.l = it
|
mConfig.l = it
|
||||||
ReadManga.mCallback?.colorFilter(mConfig)
|
callback?.updateColorFilter(mConfig)
|
||||||
}
|
}
|
||||||
dsbR.onChanged = {
|
dsbR.onChanged = {
|
||||||
mConfig.r = it
|
mConfig.r = it
|
||||||
ReadManga.mCallback?.colorFilter(mConfig)
|
callback?.updateColorFilter(mConfig)
|
||||||
}
|
}
|
||||||
dsbG.onChanged = {
|
dsbG.onChanged = {
|
||||||
mConfig.g = it
|
mConfig.g = it
|
||||||
ReadManga.mCallback?.colorFilter(mConfig)
|
callback?.updateColorFilter(mConfig)
|
||||||
}
|
}
|
||||||
dsbB.onChanged = {
|
dsbB.onChanged = {
|
||||||
mConfig.b = it
|
mConfig.b = it
|
||||||
ReadManga.mCallback?.colorFilter(mConfig)
|
callback?.updateColorFilter(mConfig)
|
||||||
}
|
}
|
||||||
dsbA.onChanged = {
|
dsbA.onChanged = {
|
||||||
mConfig.a = it
|
mConfig.a = it
|
||||||
ReadManga.mCallback?.colorFilter(mConfig)
|
callback?.updateColorFilter(mConfig)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDismiss(dialog: DialogInterface) {
|
override fun onDismiss(dialog: DialogInterface) {
|
||||||
super.onDismiss(dialog)
|
super.onDismiss(dialog)
|
||||||
AppConfig.mangaColorFilter = GSON.toJson(mConfig)
|
AppConfig.mangaColorFilter = mConfig.toJson()
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Callback {
|
||||||
|
fun updateColorFilter(config: MangaColorFilterConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -105,23 +105,21 @@ class MangaAdapter(private val context: Context) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun setImageColorFilter() {
|
fun setImageColorFilter() {
|
||||||
binding.image.run {
|
require(
|
||||||
require(
|
mConfig.r in 0..255 &&
|
||||||
mConfig.r in 0..255 &&
|
mConfig.g in 0..255 &&
|
||||||
mConfig.g in 0..255 &&
|
mConfig.b in 0..255 &&
|
||||||
mConfig.b in 0..255 &&
|
mConfig.a in 0..255
|
||||||
mConfig.a in 0..255
|
) {
|
||||||
) {
|
"ARGB values must be between 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))
|
|
||||||
}
|
}
|
||||||
|
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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user