ソースを参照

Added grayscale filter for images in dark mode

Vadik Sirekanyan 7 年 前
コミット
462c657b9d

+ 24 - 21
app/src/main/java/com/sirekanyan/knigopis/common/extensions/image_view.kt

@@ -1,6 +1,8 @@
 package com.sirekanyan.knigopis.common.extensions
 
 import android.content.Context
+import android.graphics.ColorMatrix
+import android.graphics.ColorMatrixColorFilter
 import android.graphics.drawable.Drawable
 import android.widget.ImageView
 import com.bumptech.glide.Glide
@@ -11,35 +13,36 @@ import com.bumptech.glide.request.RequestListener
 import com.bumptech.glide.request.RequestOptions
 import com.bumptech.glide.request.target.Target
 import com.sirekanyan.knigopis.R
+import com.sirekanyan.knigopis.repository.isDarkConfiguration
 
-fun ImageView.setCircleImage(url: String?, isDark: Boolean = false) {
+private const val DARK_SATURATION = 0.33f
+
+private fun ImageView.setImage(url: String?, requestOptions: RequestOptions, placeholder: Int) {
+    if (isDarkConfiguration) {
+        val colorMatrix = ColorMatrix().apply { setSaturation(DARK_SATURATION) }
+        colorFilter = ColorMatrixColorFilter(colorMatrix)
+    }
     Glide.with(context)
         .load(url)
-        .apply(
-            RequestOptions.circleCropTransform()
-                .placeholder(
-                    if (isDark) {
-                        R.drawable.oval_dark_placeholder_background
-                    } else {
-                        R.drawable.oval_placeholder_background
-                    }
-                )
-                .theme(context.theme)
-        )
+        .apply(requestOptions.placeholder(placeholder).theme(context.theme))
         .transition(DrawableTransitionOptions.withCrossFade())
         .into(this)
 }
 
+fun ImageView.setCircleImage(url: String?, placeholder: Int? = null) {
+    setImage(
+        url,
+        RequestOptions.circleCropTransform(),
+        placeholder ?: R.drawable.oval_placeholder_background
+    )
+}
+
 fun ImageView.setSquareImage(url: String?) {
-    Glide.with(context)
-        .load(url)
-        .apply(
-            RequestOptions.centerCropTransform()
-                .placeholder(R.drawable.rectangle_placeholder_background)
-                .theme(context.theme)
-        )
-        .transition(DrawableTransitionOptions.withCrossFade())
-        .into(this)
+    setImage(
+        url,
+        RequestOptions.centerCropTransform(),
+        R.drawable.rectangle_placeholder_background
+    )
 }
 
 fun Context.preloadImage(url: String?, onSuccess: () -> Unit, onError: () -> Unit) {

+ 4 - 1
app/src/main/java/com/sirekanyan/knigopis/feature/user/UserActivity.kt

@@ -49,7 +49,10 @@ class UserActivity : AppCompatActivity() {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.user_activity)
         toolbar.title = intent.getStringExtra(EXTRA_USER_NAME)
-        toolbarImage.setCircleImage(intent.getStringExtra(EXTRA_USER_PHOTO), isDark = true)
+        toolbarImage.setCircleImage(
+            intent.getStringExtra(EXTRA_USER_PHOTO),
+            R.drawable.oval_dark_placeholder_background
+        )
         toolbarImage.setElevationRes(R.dimen.image_view_elevation)
         setSupportActionBar(toolbar)
         fab.setOnClickListener { view ->

+ 7 - 0
app/src/main/java/com/sirekanyan/knigopis/repository/Configuration.kt

@@ -2,6 +2,8 @@ package com.sirekanyan.knigopis.repository
 
 import android.content.Context
 
+var isDarkConfiguration = false
+
 private const val PREFS_NAME = "knigopis-dev"
 private const val DEV_MODE_KEY = "dev-mode"
 private const val DARK_THEME_KEY = "dark-theme"
@@ -21,6 +23,10 @@ class ConfigurationImpl(context: Context) : Configuration {
 
     private val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
 
+    init {
+        isDarkConfiguration = isDarkTheme
+    }
+
     override var isDevMode: Boolean
         get() = prefs.getBoolean(DEV_MODE_KEY, false)
         set(enabled) {
@@ -30,6 +36,7 @@ class ConfigurationImpl(context: Context) : Configuration {
     override var isDarkTheme: Boolean
         get() = prefs.getBoolean(DARK_THEME_KEY, false)
         set(enabled) {
+            isDarkConfiguration = enabled
             prefs.edit().putBoolean(DARK_THEME_KEY, enabled).apply()
         }