Horis 1 год назад
Родитель
Сommit
9005e130d1

+ 0 - 2
app/src/main/java/io/legado/app/model/ReadManga.kt

@@ -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)
     }
 }

+ 6 - 6
app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt

@@ -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 {

+ 9 - 4
app/src/main/java/io/legado/app/ui/book/manga/config/MangaColorFilterConfig.kt

@@ -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)
+    }
+}

+ 11 - 7
app/src/main/java/io/legado/app/ui/book/manga/config/MangaColorFilterDialog.kt

@@ -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)
     }
 
 }

+ 14 - 16
app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaAdapter.kt

@@ -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))
         }
     }