Skip to content

Commit 2e4513c

Browse files
authored
Merge pull request #11 from KvColorPalette/feature/update-color-palette-library
Update KvColorPalette-Android v3.2.0 version
2 parents b448347 + a8cbf77 commit 2e4513c

File tree

8 files changed

+172
-106
lines changed

8 files changed

+172
-106
lines changed

gradle/version-catalog/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ composeBom = "2025.02.00"
1616
appcompat = "1.7.0"
1717
material = "1.12.0"
1818
composeMaterial = "1.7.8"
19-
kvColorPalette = "2.1.1"
19+
kvColorPalette = "3.2.0"
2020

2121
[libraries]
2222
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }

kv-color-picker/gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
kvColorPaletteGroupId=com.github.KvColorPalette
22
kvColorPickerArtifactId=KvColorPicker-Android
3-
kvColorPickerVersion=2.1.0
3+
kvColorPickerVersion=2.2.0

kv-color-picker/src/main/kotlin/com/kavi/droid/color/picker/ui/KvColorPickerBottomSheet.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import com.kavi.droid.color.picker.ui.pickers.RGBAColorPicker
4747
* RGBAColorPicker: This a color picker with RGB and Alpha values. Consumer can create their own color by changing
4848
* RED, GREEN and BLUE values in a color.
4949
*
50+
* @param lastSelectedColor: Color: variable to pass last selected color.
5051
* @param showSheet: MutableState<Boolean>: State variable to show and hide bottom sheet.
5152
* @param sheetState: SheetState: State variable to control the bottom sheet.
5253
* @param onColorSelected: (selectedColor: Color) -> Unit: Callback to invoke when a color is selected.
@@ -55,16 +56,21 @@ import com.kavi.droid.color.picker.ui.pickers.RGBAColorPicker
5556
*/
5657
@OptIn(ExperimentalMaterial3Api::class)
5758
@Composable
58-
fun KvColorPickerBottomSheet(showSheet: MutableState<Boolean>, sheetState: SheetState, onColorSelected: (selectedColor: Color) -> Unit) {
59+
fun KvColorPickerBottomSheet(
60+
lastSelectedColor: Color = Color.White,
61+
showSheet: MutableState<Boolean>,
62+
sheetState: SheetState,
63+
onColorSelected: (selectedColor: Color) -> Unit) {
5964
ModalBottomSheet (
6065
onDismissRequest = {
6166
showSheet.value = false
6267
},
6368
sheetState = sheetState,
64-
containerColor = MaterialTheme.colorScheme.background
69+
containerColor = MaterialTheme.colorScheme.background,
70+
scrimColor = MaterialTheme.colorScheme.onSurface.copy(alpha = .5f)
6571
) {
6672
Column {
67-
var selectedColor by remember { mutableStateOf(Color.Black) }
73+
var selectedColor by remember { mutableStateOf(lastSelectedColor) }
6874
val colorHex = remember { mutableStateOf(TextFieldValue("#000000")) }
6975
var tabIndex by remember { mutableIntStateOf(0) }
7076
val tabs = listOf(
@@ -114,20 +120,23 @@ fun KvColorPickerBottomSheet(showSheet: MutableState<Boolean>, sheetState: Sheet
114120
when(tabIndex) {
115121
0 -> RGBAColorPicker(
116122
modifier = Modifier.padding(16.dp),
123+
lastSelectedColor = selectedColor,
117124
onColorSelected = {
118125
selectedColor = it
119126
colorHex.value = TextFieldValue(ColorUtil.getHex(it))
120127
}
121128
)
122129
1 -> GridColorPicker(
123130
modifier = Modifier.padding(16.dp),
131+
lastSelectedColor = selectedColor,
124132
onColorSelected = {
125133
selectedColor = it
126134
colorHex.value = TextFieldValue(ColorUtil.getHex(it))
127135
}
128136
)
129137
2 -> HSLAColorPicker(
130138
modifier = Modifier.padding(16.dp),
139+
lastSelectedColor = selectedColor,
131140
onColorSelected = {
132141
selectedColor = it
133142
colorHex.value = TextFieldValue(ColorUtil.getHex(it))

kv-color-picker/src/main/kotlin/com/kavi/droid/color/picker/ui/common/CommonUI.kt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import androidx.compose.ui.text.TextStyle
3939
import androidx.compose.ui.text.input.KeyboardType
4040
import androidx.compose.ui.text.input.TextFieldValue
4141
import androidx.compose.ui.text.style.TextAlign
42+
import androidx.compose.ui.unit.Dp
4243
import androidx.compose.ui.unit.dp
4344
import androidx.compose.ui.unit.sp
4445
import com.kavi.droid.color.palette.KvColorPalette
@@ -307,24 +308,35 @@ internal fun SelectedColorDetail(color: Color, colorHex: MutableState<TextFieldV
307308
* @param onSelect: (color: Color) -> Unit: Callback to invoke when a color is selected.
308309
*/
309310
@Composable
310-
internal fun ColorColum(givenColor: KvColor, selectedColor: Color, onSelect: (color: Color) -> Unit) {
311+
internal fun ColorColum(
312+
boxSize: Dp,
313+
givenColor: KvColor,
314+
selectedColor: Color,
315+
onSelect: (color: Color) -> Unit
316+
) {
311317
val colors = KvColorPalette.instance.generateColorPalette(givenColor = givenColor)
312318
Column {
313319
colors.forEach {
314-
ColorBox(givenColor = it, selectedColor = selectedColor, onSelect = onSelect)
320+
ColorBox(
321+
boxSize = boxSize,
322+
givenColor = it,
323+
selectedColor = selectedColor,
324+
onSelect = onSelect
325+
)
315326
}
316327
}
317328
}
318329

319330
/**
320331
* A composable function that displays a single color box.
321332
*
333+
* @param boxSize: Dp: Size of the color box.
322334
* @param givenColor: Color: The color to display.
323335
* @param selectedColor: Color: The selected color to highlight.
324336
* @param onSelect: (color: Color) -> Unit: Callback to invoke when a color is selected.
325337
*/
326338
@Composable
327-
internal fun ColorBox(givenColor: Color, selectedColor: Color?, onSelect: (color: Color) -> Unit) {
339+
internal fun ColorBox(boxSize: Dp = 24.dp, givenColor: Color, selectedColor: Color?, onSelect: (color: Color) -> Unit) {
328340
var isSelected by remember { mutableStateOf(false) }
329341

330342
selectedColor?.let {
@@ -333,8 +345,8 @@ internal fun ColorBox(givenColor: Color, selectedColor: Color?, onSelect: (color
333345

334346
Box(
335347
modifier = Modifier
336-
.width(24.dp)
337-
.height(24.dp)
348+
.width(boxSize)
349+
.height(boxSize)
338350
.background(givenColor, RectangleShape)
339351
.clickable {
340352
isSelected = true

kv-color-picker/src/main/kotlin/com/kavi/droid/color/picker/ui/pickers/GridColorPicker.kt

Lines changed: 113 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.kavi.droid.color.picker.ui.pickers
22

3+
import android.annotation.SuppressLint
34
import androidx.compose.foundation.background
45
import androidx.compose.foundation.border
56
import androidx.compose.foundation.layout.Arrangement
7+
import androidx.compose.foundation.layout.BoxWithConstraints
68
import androidx.compose.foundation.layout.Column
79
import androidx.compose.foundation.layout.Row
810
import androidx.compose.foundation.layout.fillMaxWidth
@@ -35,15 +37,21 @@ import com.kavi.droid.color.picker.ui.common.ColorColum
3537
* 16 predefined major colors and those color's 10 color variances.
3638
*
3739
* @param modifier: Modifier: The modifier to apply to this layout.
40+
* @param lastSelectedColor: Color: variable to pass last selected color.
3841
* @param onColorSelected: (selectedColor: Color) -> Unit: Callback to invoke when a color is selected.
3942
*
4043
* @return @Composable: A grid UI to select colors.
4144
*/
45+
@SuppressLint("UnusedBoxWithConstraintsScope")
4246
@Composable
43-
fun GridColorPicker(modifier: Modifier = Modifier, onColorSelected: (selectedColor: Color) -> Unit) {
47+
fun GridColorPicker(
48+
modifier: Modifier = Modifier,
49+
lastSelectedColor: Color = Color.White,
50+
onColorSelected: (selectedColor: Color) -> Unit
51+
) {
4452

45-
var selectedColor by remember { mutableStateOf(Color.White) }
46-
val colorHex = remember { mutableStateOf(TextFieldValue("#ffffff")) }
53+
var selectedColor by remember { mutableStateOf(lastSelectedColor) }
54+
val colorHex = remember { mutableStateOf(TextFieldValue(ColorUtil.getHex(lastSelectedColor))) }
4755

4856
val onSelectColor: (color: Color) -> Unit = {
4957
selectedColor = it
@@ -76,88 +84,108 @@ fun GridColorPicker(modifier: Modifier = Modifier, onColorSelected: (selectedCol
7684
fontSize = 12.sp
7785
)
7886

79-
Row(
80-
modifier = Modifier
81-
.fillMaxWidth()
82-
.padding(top = 16.dp, start = 4.dp, end = 4.dp, bottom = 12.dp),
83-
verticalAlignment = Alignment.CenterVertically,
84-
horizontalArrangement = Arrangement.Center
85-
) {
86-
ColorColum(
87-
givenColor = MatPackage.MatRed,
88-
selectedColor = selectedColor,
89-
onSelect = onSelectColor
90-
)
91-
ColorColum(
92-
givenColor = MatPackage.MatRose,
93-
selectedColor = selectedColor,
94-
onSelect = onSelectColor
95-
)
96-
ColorColum(
97-
givenColor = MatPackage.MatLPurple,
98-
selectedColor = selectedColor,
99-
onSelect = onSelectColor
100-
)
101-
ColorColum(
102-
givenColor = MatPackage.MatDPurple,
103-
selectedColor = selectedColor,
104-
onSelect = onSelectColor
105-
)
106-
ColorColum(
107-
givenColor = MatPackage.MatDBlue,
108-
selectedColor = selectedColor,
109-
onSelect = onSelectColor
110-
)
111-
ColorColum(
112-
givenColor = MatPackage.MatLBlue,
113-
selectedColor = selectedColor,
114-
onSelect = onSelectColor
115-
)
116-
ColorColum(
117-
givenColor = MatPackage.MatLLBlue,
118-
selectedColor = selectedColor,
119-
onSelect = onSelectColor
120-
)
121-
ColorColum(
122-
givenColor = MatPackage.MatLCyan,
123-
selectedColor = selectedColor,
124-
onSelect = onSelectColor
125-
)
126-
ColorColum(
127-
givenColor = MatPackage.MatDCyan,
128-
selectedColor = selectedColor,
129-
onSelect = onSelectColor
130-
)
131-
ColorColum(
132-
givenColor = MatPackage.MatDGreen,
133-
selectedColor = selectedColor,
134-
onSelect = onSelectColor
135-
)
136-
ColorColum(
137-
givenColor = MatPackage.MatLGreen,
138-
selectedColor = selectedColor,
139-
onSelect = onSelectColor
140-
)
141-
ColorColum(
142-
givenColor = MatPackage.MatLLGreen,
143-
selectedColor = selectedColor,
144-
onSelect = onSelectColor
145-
)
146-
ColorColum(
147-
givenColor = MatPackage.MatYellow,
148-
selectedColor = selectedColor,
149-
onSelect = onSelectColor
150-
)
151-
ColorColum(
152-
givenColor = MatPackage.MatGold,
153-
selectedColor = selectedColor,
154-
onSelect = onSelectColor
155-
)
156-
ColorColum(
157-
givenColor = MatPackage.MatOrange,
158-
selectedColor = selectedColor,
159-
onSelect = onSelectColor
160-
)
87+
BoxWithConstraints {
88+
val screenWidth = maxWidth
89+
val boxSize = screenWidth * .065f
90+
91+
Row(
92+
modifier = Modifier
93+
.fillMaxWidth()
94+
.padding(top = 16.dp, start = 4.dp, end = 4.dp, bottom = 12.dp),
95+
verticalAlignment = Alignment.CenterVertically,
96+
horizontalArrangement = Arrangement.Center
97+
) {
98+
ColorColum(
99+
boxSize = boxSize,
100+
givenColor = MatPackage.MatRed,
101+
selectedColor = selectedColor,
102+
onSelect = onSelectColor
103+
)
104+
ColorColum(
105+
boxSize = boxSize,
106+
givenColor = MatPackage.MatRose,
107+
selectedColor = selectedColor,
108+
onSelect = onSelectColor
109+
)
110+
ColorColum(
111+
boxSize = boxSize,
112+
givenColor = MatPackage.MatLPurple,
113+
selectedColor = selectedColor,
114+
onSelect = onSelectColor
115+
)
116+
ColorColum(
117+
boxSize = boxSize,
118+
givenColor = MatPackage.MatDPurple,
119+
selectedColor = selectedColor,
120+
onSelect = onSelectColor
121+
)
122+
ColorColum(
123+
boxSize = boxSize,
124+
givenColor = MatPackage.MatDBlue,
125+
selectedColor = selectedColor,
126+
onSelect = onSelectColor
127+
)
128+
ColorColum(
129+
boxSize = boxSize,
130+
givenColor = MatPackage.MatLBlue,
131+
selectedColor = selectedColor,
132+
onSelect = onSelectColor
133+
)
134+
ColorColum(
135+
boxSize = boxSize,
136+
givenColor = MatPackage.MatLLBlue,
137+
selectedColor = selectedColor,
138+
onSelect = onSelectColor
139+
)
140+
ColorColum(
141+
boxSize = boxSize,
142+
givenColor = MatPackage.MatLCyan,
143+
selectedColor = selectedColor,
144+
onSelect = onSelectColor
145+
)
146+
ColorColum(
147+
boxSize = boxSize,
148+
givenColor = MatPackage.MatDCyan,
149+
selectedColor = selectedColor,
150+
onSelect = onSelectColor
151+
)
152+
ColorColum(
153+
boxSize = boxSize,
154+
givenColor = MatPackage.MatDGreen,
155+
selectedColor = selectedColor,
156+
onSelect = onSelectColor
157+
)
158+
ColorColum(
159+
boxSize = boxSize,
160+
givenColor = MatPackage.MatLGreen,
161+
selectedColor = selectedColor,
162+
onSelect = onSelectColor
163+
)
164+
ColorColum(
165+
boxSize = boxSize,
166+
givenColor = MatPackage.MatLLGreen,
167+
selectedColor = selectedColor,
168+
onSelect = onSelectColor
169+
)
170+
ColorColum(
171+
boxSize = boxSize,
172+
givenColor = MatPackage.MatYellow,
173+
selectedColor = selectedColor,
174+
onSelect = onSelectColor
175+
)
176+
ColorColum(
177+
boxSize = boxSize,
178+
givenColor = MatPackage.MatGold,
179+
selectedColor = selectedColor,
180+
onSelect = onSelectColor
181+
)
182+
ColorColum(
183+
boxSize = boxSize,
184+
givenColor = MatPackage.MatOrange,
185+
selectedColor = selectedColor,
186+
onSelect = onSelectColor
187+
)
188+
}
161189
}
162190
}
163191
}

kv-color-picker/src/main/kotlin/com/kavi/droid/color/picker/ui/pickers/HSLAColorPicker.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,22 @@ import com.kavi.droid.color.picker.ui.common.SliderHue
4040
* By adjusting these values, consumer can select or generate their desired color.
4141
*
4242
* @param modifier: Modifier: The modifier to apply to this layout.
43+
* @param lastSelectedColor: Color: variable to pass last selected color.
4344
* @param onColorSelected: (selectedColor: Color) -> Unit: Callback to invoke when a color is selected.
4445
*
4546
* @return @Composable: A color picker UI for selecting HSL-A colors.
4647
*/
4748
@Composable
48-
fun HSLAColorPicker(modifier: Modifier = Modifier, onColorSelected: (selectedColor: Color) -> Unit) {
49-
49+
fun HSLAColorPicker(
50+
modifier: Modifier = Modifier,
51+
lastSelectedColor: Color = Color.White,
52+
onColorSelected: (selectedColor: Color) -> Unit
53+
) {
5054
// State variables for HSL-A values
51-
val hue = rememberSaveable { mutableFloatStateOf(0f) }
52-
val saturation = rememberSaveable { mutableFloatStateOf(0f) }
53-
val lightness = rememberSaveable { mutableFloatStateOf(0.5f) }
54-
val alpha = rememberSaveable { mutableFloatStateOf(1f) }
55+
val hue = rememberSaveable { mutableFloatStateOf(lastSelectedColor.hsl.hue) }
56+
val saturation = rememberSaveable { mutableFloatStateOf(lastSelectedColor.hsl.saturation) }
57+
val lightness = rememberSaveable { mutableFloatStateOf(lastSelectedColor.hsl.lightness) }
58+
val alpha = rememberSaveable { mutableFloatStateOf(lastSelectedColor.alpha) }
5559

5660
val colorHex = remember { mutableStateOf(TextFieldValue("")) }
5761

0 commit comments

Comments
 (0)