Button for opening colour picker now tints properly, including its text and icon

This commit is contained in:
denizk0461
2023-05-16 14:14:38 +02:00
parent a573e2e071
commit 2566952d96
6 changed files with 39 additions and 9 deletions
@@ -20,6 +20,7 @@ import com.denizd.textbasic.databinding.FragmentSettingsNewBinding
import com.denizd.textbasic.db.QuoteStorage
import com.denizd.textbasic.sheet.TextSheet
import com.denizd.textbasic.util.SettingsPreference
import com.denizd.textbasic.util.getConstrast
import com.denizd.textbasic.util.viewBinding
import com.denizd.textbasic.widget.CanvasText
import com.google.android.material.button.MaterialButton
@@ -368,17 +369,27 @@ class SettingsNewFragment : BaseFragment(R.layout.fragment_settings_new) {
private fun setTextColour(colour: String) {
binding.textTextColourCode.text = "#$colour"
val newColour = Color.parseColor("#$colour")
val contrast = newColour.getConstrast()
binding.buttonTextColourDisplay.backgroundTintList = ColorStateList.valueOf(
Color.parseColor("#$colour")
newColour
)
binding.buttonTextColourDisplay.setTextColor(contrast)
binding.buttonTextColourDisplay.iconTint = ColorStateList.valueOf(contrast)
}
private fun setHighlightColour(colour: String) {
binding.textHighlightColourCode.text = "#$colour"
binding.buttonHighlightColourDisplay.backgroundTintList = ColorStateList.valueOf(
Color.parseColor("#$colour")
)
val newColour = Color.parseColor("#$colour")
val contrast = newColour.getConstrast()
binding.buttonHighlightColourDisplay.backgroundTintList = ColorStateList.valueOf(newColour)
binding.buttonHighlightColourDisplay.setTextColor(contrast)
binding.buttonHighlightColourDisplay.iconTint = ColorStateList.valueOf(contrast)
}
// TODO this should start with the current colour of the attribute that's to be changed!
@@ -390,10 +401,6 @@ class SettingsNewFragment : BaseFragment(R.layout.fragment_settings_new) {
// colour: String,
) {
ColorPickerDialog.Builder(context)
// .setInitialColor(Color.parseColor("#$colour"))
// .setPreferenceName(tag)
// .setLifecycleOwner(this)
// .build()
.setTitle(getString(title))
.setPositiveButton(getString(R.string.settings_colour_dialog_positive), object : ColorEnvelopeListener {
override fun onColorSelected(envelope: ColorEnvelope, fromUser: Boolean) {
@@ -1,6 +1,7 @@
package com.denizd.textbasic.util
import android.content.res.Resources
import android.graphics.Color
import android.util.TypedValue
import android.view.View
import androidx.annotation.AttrRes
@@ -53,4 +54,13 @@ fun Resources.Theme.showSnackBar(
// Set anchor view, if one has been passed
anchor?.let { a -> s.setAnchorView(a) }
s.show()
}
}
fun Int.getConstrast(): Int = Color.parseColor(if ((
Color.red(this) * 0.299 +
Color.green(this) * 0.587 +
Color.blue(this) * 0.114) > 186) {
"#000000"
} else {
"#ffffff"
})