diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersAdapter.kt
index dd0fa66d8..9e696fc4f 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersAdapter.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersAdapter.kt
@@ -1,7 +1,6 @@
 package eu.kanade.tachiyomi.ui.manga.chapter
 
 import android.content.Context
-import androidx.core.content.ContextCompat
 import eu.davidea.flexibleadapter.FlexibleAdapter
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.preference.PreferencesHelper
@@ -21,7 +20,7 @@ class ChaptersAdapter(
 
     var items: List<ChapterItem> = emptyList()
 
-    val readColor = ContextCompat.getColor(context, R.color.material_on_surface_disabled)
+    val readColor = context.getResourceColor(R.attr.colorOnSurface, 0.38f)
     val unreadColor = context.getResourceColor(R.attr.colorOnSurface)
 
     val bookmarkedColor = context.getResourceColor(R.attr.colorAccent)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesHolder.kt
index 6452278c7..08a4015f1 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesHolder.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesHolder.kt
@@ -1,7 +1,6 @@
 package eu.kanade.tachiyomi.ui.recent.updates
 
 import android.view.View
-import androidx.core.content.ContextCompat
 import com.bumptech.glide.load.engine.DiskCacheStrategy
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.download.model.Download
@@ -27,7 +26,7 @@ import kotlinx.android.synthetic.main.updates_item.manga_title
 class UpdatesHolder(private val view: View, private val adapter: UpdatesAdapter) :
     BaseFlexibleViewHolder(view, adapter) {
 
-    private var readColor = ContextCompat.getColor(view.context, R.color.material_on_surface_disabled)
+    private var readColor = view.context.getResourceColor(R.attr.colorOnSurface, 0.38f)
     private var unreadColor = view.context.getResourceColor(R.attr.colorOnSurface)
 
     /**
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/SourceListHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/SourceListHolder.kt
index 7d803316c..23ff9c664 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/SourceListHolder.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/SourceListHolder.kt
@@ -1,7 +1,6 @@
 package eu.kanade.tachiyomi.ui.source.browse
 
 import android.view.View
-import androidx.core.content.ContextCompat
 import com.bumptech.glide.load.engine.DiskCacheStrategy
 import eu.davidea.flexibleadapter.FlexibleAdapter
 import eu.kanade.tachiyomi.R
@@ -23,7 +22,7 @@ import kotlinx.android.synthetic.main.source_list_item.title
 class SourceListHolder(private val view: View, adapter: FlexibleAdapter<*>) :
     SourceHolder(view, adapter) {
 
-    private val favoriteColor = ContextCompat.getColor(view.context, R.color.material_on_surface_disabled)
+    private val favoriteColor = view.context.getResourceColor(R.attr.colorOnSurface, 0.38f)
     private val unfavoriteColor = view.context.getResourceColor(R.attr.colorOnSurface)
 
     /**
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/source/filter/TriStateItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/source/filter/TriStateItem.kt
index 1237b0329..529fa935e 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/source/filter/TriStateItem.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/source/filter/TriStateItem.kt
@@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.ui.source.filter
 
 import android.view.View
 import android.widget.CheckedTextView
-import androidx.core.content.ContextCompat
 import androidx.recyclerview.widget.RecyclerView
 import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat
 import com.google.android.material.R
@@ -46,7 +45,7 @@ open class TriStateItem(val filter: Filter.TriState) : AbstractFlexibleItem<TriS
             val color = if (filter.state == Filter.TriState.STATE_INCLUDE) {
                 view.context.getResourceColor(R.attr.colorAccent)
             } else {
-                ContextCompat.getColor(view.context, R.color.material_on_background_disabled)
+                view.context.getResourceColor(R.attr.colorOnBackground, 0.38f)
             }
 
             setTint(color)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt
index a89dae8cf..8b1be0871 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt
@@ -9,11 +9,13 @@ import android.content.Intent
 import android.content.IntentFilter
 import android.content.pm.PackageManager
 import android.content.res.Resources
+import android.graphics.Color
 import android.net.ConnectivityManager
 import android.net.Uri
 import android.os.PowerManager
 import android.widget.Toast
 import androidx.annotation.AttrRes
+import androidx.annotation.ColorInt
 import androidx.annotation.StringRes
 import androidx.browser.customtabs.CustomTabsIntent
 import androidx.core.app.NotificationCompat
@@ -22,6 +24,7 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager
 import com.nononsenseapps.filepicker.FilePickerActivity
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.widget.CustomLayoutPickerActivity
+import kotlin.math.roundToInt
 
 /**
  * Display a toast in this context.
@@ -96,12 +99,22 @@ fun Context.hasPermission(permission: String) = ContextCompat.checkSelfPermissio
  * Returns the color for the given attribute.
  *
  * @param resource the attribute.
+ * @param alphaFactor the alpha number [0,1].
  */
-fun Context.getResourceColor(@AttrRes resource: Int): Int {
+@ColorInt fun Context.getResourceColor(@AttrRes resource: Int, alphaFactor: Float = 1f): Int {
     val typedArray = obtainStyledAttributes(intArrayOf(resource))
-    val attrValue = typedArray.getColor(0, 0)
+    val color = typedArray.getColor(0, 0)
     typedArray.recycle()
-    return attrValue
+
+    if (alphaFactor < 1f) {
+        val alpha = (Color.alpha(color) * alphaFactor).roundToInt()
+        val red = Color.red(color)
+        val green = Color.green(color)
+        val blue = Color.blue(color)
+        return Color.argb(alpha, red, green, blue)
+    }
+
+    return color
 }
 
 /**
diff --git a/app/src/main/java/eu/kanade/tachiyomi/widget/StateImageViewTarget.kt b/app/src/main/java/eu/kanade/tachiyomi/widget/StateImageViewTarget.kt
index 4366a94ad..7228c6d94 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/widget/StateImageViewTarget.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/widget/StateImageViewTarget.kt
@@ -4,11 +4,11 @@ import android.graphics.drawable.Drawable
 import android.view.View
 import android.widget.ImageView
 import android.widget.ImageView.ScaleType
-import androidx.core.content.ContextCompat
 import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat
 import com.bumptech.glide.request.target.ImageViewTarget
 import com.bumptech.glide.request.transition.Transition
 import eu.kanade.tachiyomi.R
+import eu.kanade.tachiyomi.util.system.getResourceColor
 import eu.kanade.tachiyomi.util.view.gone
 import eu.kanade.tachiyomi.util.view.visible
 
@@ -46,7 +46,7 @@ class StateImageViewTarget(
         view.scaleType = errorScaleType
 
         val vector = VectorDrawableCompat.create(view.context.resources, errorDrawableRes, null)
-        vector?.setTint(ContextCompat.getColor(view.context, com.google.android.material.R.color.material_on_background_disabled))
+        vector?.setTint(view.context.getResourceColor(R.attr.colorOnBackground, 0.38f))
         view.setImageDrawable(vector)
     }