mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Reader grayscale filter (closes #2822)
This commit is contained in:
		@@ -49,6 +49,8 @@ object PreferenceKeys {
 | 
			
		||||
 | 
			
		||||
    const val colorFilterMode = "color_filter_mode"
 | 
			
		||||
 | 
			
		||||
    const val grayscale = "pref_grayscale"
 | 
			
		||||
 | 
			
		||||
    const val defaultReadingMode = "pref_default_reading_mode_key"
 | 
			
		||||
 | 
			
		||||
    const val defaultOrientationType = "pref_default_orientation_type_key"
 | 
			
		||||
 
 | 
			
		||||
@@ -121,6 +121,8 @@ class PreferencesHelper(val context: Context) {
 | 
			
		||||
 | 
			
		||||
    fun colorFilterMode() = flowPrefs.getInt(Keys.colorFilterMode, 0)
 | 
			
		||||
 | 
			
		||||
    fun grayscale() = flowPrefs.getBoolean(Keys.grayscale, false)
 | 
			
		||||
 | 
			
		||||
    fun defaultReadingMode() = prefs.getInt(Keys.defaultReadingMode, ReadingModeType.RIGHT_TO_LEFT.flagValue)
 | 
			
		||||
 | 
			
		||||
    fun defaultOrientationType() = prefs.getInt(Keys.defaultOrientationType, OrientationType.FREE.flagValue)
 | 
			
		||||
 
 | 
			
		||||
@@ -8,12 +8,16 @@ import android.content.Context
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.graphics.Bitmap
 | 
			
		||||
import android.graphics.Color
 | 
			
		||||
import android.graphics.ColorMatrix
 | 
			
		||||
import android.graphics.ColorMatrixColorFilter
 | 
			
		||||
import android.graphics.Paint
 | 
			
		||||
import android.os.Build
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.view.KeyEvent
 | 
			
		||||
import android.view.Menu
 | 
			
		||||
import android.view.MenuItem
 | 
			
		||||
import android.view.MotionEvent
 | 
			
		||||
import android.view.View.LAYER_TYPE_HARDWARE
 | 
			
		||||
import android.view.WindowManager
 | 
			
		||||
import android.view.animation.Animation
 | 
			
		||||
import android.view.animation.AnimationUtils
 | 
			
		||||
@@ -789,6 +793,16 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
 | 
			
		||||
     */
 | 
			
		||||
    private inner class ReaderConfig {
 | 
			
		||||
 | 
			
		||||
        private val grayscalePaint by lazy {
 | 
			
		||||
            Paint().apply {
 | 
			
		||||
                colorFilter = ColorMatrixColorFilter(
 | 
			
		||||
                    ColorMatrix().apply {
 | 
			
		||||
                        setSaturation(0f)
 | 
			
		||||
                    }
 | 
			
		||||
                )
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Initializes the reader subscriptions.
 | 
			
		||||
         */
 | 
			
		||||
@@ -827,6 +841,10 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
 | 
			
		||||
            preferences.colorFilterMode().asFlow()
 | 
			
		||||
                .onEach { setColorFilter(preferences.colorFilter().get()) }
 | 
			
		||||
                .launchIn(lifecycleScope)
 | 
			
		||||
 | 
			
		||||
            preferences.grayscale().asFlow()
 | 
			
		||||
                .onEach { setGrayscale(it) }
 | 
			
		||||
                .launchIn(lifecycleScope)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
@@ -934,5 +952,10 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
 | 
			
		||||
            binding.colorOverlay.isVisible = true
 | 
			
		||||
            binding.colorOverlay.setFilterColor(value, preferences.colorFilterMode().get())
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private fun setGrayscale(enabled: Boolean) {
 | 
			
		||||
            val paint = if (enabled) grayscalePaint else null
 | 
			
		||||
            binding.viewerContainer.setLayerType(LAYER_TYPE_HARDWARE, paint)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ import androidx.lifecycle.lifecycleScope
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 | 
			
		||||
import eu.kanade.tachiyomi.databinding.ReaderColorFilterSettingsBinding
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
 | 
			
		||||
import eu.kanade.tachiyomi.widget.IgnoreFirstSpinnerListener
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.bindToPreference
 | 
			
		||||
import eu.kanade.tachiyomi.widget.SimpleSeekBarListener
 | 
			
		||||
import kotlinx.coroutines.flow.launchIn
 | 
			
		||||
import kotlinx.coroutines.flow.onEach
 | 
			
		||||
@@ -63,20 +63,10 @@ class ReaderColorFilterSettings @JvmOverloads constructor(context: Context, attr
 | 
			
		||||
        binding.seekbarColorFilterBlue.progress = argb[3]
 | 
			
		||||
 | 
			
		||||
        // Set listeners
 | 
			
		||||
        binding.switchColorFilter.isChecked = preferences.colorFilter().get()
 | 
			
		||||
        binding.switchColorFilter.setOnCheckedChangeListener { _, isChecked ->
 | 
			
		||||
            preferences.colorFilter().set(isChecked)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        binding.customBrightness.isChecked = preferences.customBrightness().get()
 | 
			
		||||
        binding.customBrightness.setOnCheckedChangeListener { _, isChecked ->
 | 
			
		||||
            preferences.customBrightness().set(isChecked)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        binding.colorFilterMode.onItemSelectedListener = IgnoreFirstSpinnerListener { position ->
 | 
			
		||||
            preferences.colorFilterMode().set(position)
 | 
			
		||||
        }
 | 
			
		||||
        binding.colorFilterMode.setSelection(preferences.colorFilterMode().get(), false)
 | 
			
		||||
        binding.switchColorFilter.bindToPreference(preferences.colorFilter())
 | 
			
		||||
        binding.customBrightness.bindToPreference(preferences.customBrightness())
 | 
			
		||||
        binding.colorFilterMode.bindToPreference(preferences.colorFilterMode())
 | 
			
		||||
        binding.grayscale.bindToPreference(preferences.grayscale())
 | 
			
		||||
 | 
			
		||||
        binding.seekbarColorFilterAlpha.setOnSeekBarChangeListener(
 | 
			
		||||
            object : SimpleSeekBarListener() {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user