Skip to content

Commit

Permalink
Set tick color per color card
Browse files Browse the repository at this point in the history
Added fix for white tick on white color issue

#12
  • Loading branch information
Dhaval2404 committed Nov 23, 2020
1 parent e2cc292 commit 4e14e94
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class MaterialColorPickerBottomSheet : BottomSheetDialogFragment() {
private var colorShape: ColorShape = ColorShape.CIRCLE
private var colorSwatch: ColorSwatch = ColorSwatch._300
private var colors: List<String>? = null
private var isTickColorPerCard: Boolean = false

companion object {

Expand All @@ -44,6 +45,7 @@ class MaterialColorPickerBottomSheet : BottomSheetDialogFragment() {
private const val EXTRA_COLOR_SHAPE = "extra.color_shape"
private const val EXTRA_COLOR_SWATCH = "extra.color_swatch"
private const val EXTRA_COLORS = "extra.colors"
private const val EXTRA_IS_TICK_COLOR_PER_CARD = "extra.is_tick_color_per_card"

fun getInstance(dialog: MaterialColorPickerDialog): MaterialColorPickerBottomSheet {
val bundle = Bundle().apply {
Expand All @@ -54,6 +56,7 @@ class MaterialColorPickerBottomSheet : BottomSheetDialogFragment() {
putString(EXTRA_DEFAULT_COLOR, dialog.defaultColor)
putParcelable(EXTRA_COLOR_SWATCH, dialog.colorSwatch)
putParcelable(EXTRA_COLOR_SHAPE, dialog.colorShape)
putBoolean(EXTRA_IS_TICK_COLOR_PER_CARD, dialog.isTickColorPerCard)

var list: ArrayList<String>? = null
if (dialog.colors != null) {
Expand Down Expand Up @@ -99,6 +102,7 @@ class MaterialColorPickerBottomSheet : BottomSheetDialogFragment() {
colorShape = it.getParcelable(EXTRA_COLOR_SHAPE)!!

colors = it.getStringArrayList(EXTRA_COLORS)
isTickColorPerCard = it.getBoolean(EXTRA_IS_TICK_COLOR_PER_CARD)
}

title?.let { titleTxt.text = it }
Expand All @@ -108,6 +112,7 @@ class MaterialColorPickerBottomSheet : BottomSheetDialogFragment() {
val colorList = colors ?: ColorUtil.getColors(context!!, colorSwatch.value)
val adapter = MaterialColorPickerAdapter(colorList)
adapter.setColorShape(colorShape)
adapter.setTickColorPerCard(isTickColorPerCard)
if (!defaultColor.isNullOrBlank()) {
adapter.setDefaultColor(defaultColor!!)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ class MaterialColorPickerDialog private constructor(
val defaultColor: String?,
val colorSwatch: ColorSwatch,
var colorShape: ColorShape,
val colors: List<String>? = null
val colors: List<String>? = null,
var isTickColorPerCard: Boolean = false
) {

class Builder(val context: Context) {
Expand All @@ -48,6 +49,7 @@ class MaterialColorPickerDialog private constructor(
private var colorSwatch: ColorSwatch = ColorSwatch._300
private var colorShape: ColorShape = ColorShape.CIRCLE
private var colors: List<String>? = null
private var isTickColorPerCard: Boolean = false

/**
* Set Dialog Title
Expand Down Expand Up @@ -233,6 +235,30 @@ class MaterialColorPickerDialog private constructor(
return this
}


/**
* Set tick icon color, Default will be false
*
* If false,
* First the majority of color(dark/light) will be calculated
* If dark color count > light color count
* tick color will be WHITE
* else
* tick color will be BLACK
* Here, Tick color will be same card,
* Which might create issue with black and white color in list
*
* If true,
* based on the each color(dark/light) the card tick color will be decided
* Here, Tick color will be different for each card
*
* @param tickColorPerCard Boolean
*/
fun setTickColorPerCard(tickColorPerCard: Boolean): Builder {
this.isTickColorPerCard = tickColorPerCard
return this
}

/**
* Creates an {@link MaterialColorPickerDialog} with the arguments supplied to this
* builder.
Expand All @@ -252,7 +278,8 @@ class MaterialColorPickerDialog private constructor(
defaultColor = defaultColor,
colorShape = colorShape,
colorSwatch = colorSwatch,
colors = colors
colors = colors,
isTickColorPerCard = isTickColorPerCard
)
}

Expand Down Expand Up @@ -299,6 +326,7 @@ class MaterialColorPickerDialog private constructor(
val colorList = colors ?: ColorUtil.getColors(context, colorSwatch.value)
val adapter = MaterialColorPickerAdapter(colorList)
adapter.setColorShape(colorShape)
adapter.setTickColorPerCard(isTickColorPerCard)
if (!defaultColor.isNullOrBlank()) {
adapter.setDefaultColor(defaultColor)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.github.dhaval2404.colorpicker.adapter
import android.graphics.Color
import android.view.View
import android.view.ViewGroup
import android.widget.Chronometer
import androidx.recyclerview.widget.RecyclerView
import com.github.dhaval2404.colorpicker.model.ColorShape
import com.github.dhaval2404.colorpicker.util.ColorUtil
Expand All @@ -22,6 +23,7 @@ class MaterialColorPickerAdapter(private val colors: List<String>) :
private var isDarkColor = false
private var color = ""
private var colorShape = ColorShape.CIRCLE
private var isTickColorPerCard = false

init {
val darkColors = colors.count { ColorUtil.isDarkColor(it) }
Expand All @@ -36,6 +38,10 @@ class MaterialColorPickerAdapter(private val colors: List<String>) :
this.color = color
}

fun setTickColorPerCard(tickColorPerCard: Boolean) {
this.isTickColorPerCard = tickColorPerCard
}

fun getSelectedColor() = color

fun getItem(position: Int) = colors[position]
Expand Down Expand Up @@ -80,7 +86,13 @@ class MaterialColorPickerAdapter(private val colors: List<String>) :

val isChecked = color == this@MaterialColorPickerAdapter.color
checkIcon.setVisibility(isChecked)
checkIcon.setColorFilter(if (isDarkColor) Color.WHITE else Color.BLACK)

var darkColor = isDarkColor
if (isTickColorPerCard) {
darkColor = ColorUtil.isDarkColor(color)
}

checkIcon.setColorFilter(if (darkColor) Color.WHITE else Color.BLACK)
}

}
Expand Down

0 comments on commit 4e14e94

Please sign in to comment.