Skip to content

Commit 361fa48

Browse files
committed
@composable fun ColorPickerDialog added.
1 parent 725e2df commit 361fa48

File tree

5 files changed

+156
-10
lines changed

5 files changed

+156
-10
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package io.syslogic.colorpicker.compose
2+
3+
import androidx.compose.material.MaterialTheme
4+
import androidx.compose.runtime.Composable
5+
import androidx.compose.ui.graphics.Color
6+
import androidx.compose.ui.tooling.preview.Preview
7+
8+
/**
9+
* ColorPickerDialog Preview
10+
*
11+
* @author Martin Zeitler
12+
*/
13+
@Preview(
14+
name = "ColorPickerDialog",
15+
showBackground = true
16+
)
17+
@Composable
18+
fun ColorPickerDialogPreview() {
19+
MaterialTheme {
20+
ColorPickerDialog(
21+
initialColor = Color(0xD31A3D9A),
22+
onColorChanged = null,
23+
showAlpha = true,
24+
showARGB = false,
25+
showHSV = false,
26+
showHex = true,
27+
showDialog = {
28+
29+
}
30+
)
31+
}
32+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package io.syslogic.colorpicker.compose
2+
3+
import androidx.compose.foundation.clickable
4+
import androidx.compose.foundation.layout.*
5+
import androidx.compose.foundation.shape.RoundedCornerShape
6+
7+
import androidx.compose.material.*
8+
import androidx.compose.material.icons.Icons
9+
import androidx.compose.material.icons.filled.Close
10+
11+
import androidx.compose.runtime.*
12+
13+
import androidx.compose.ui.Alignment
14+
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.graphics.Color
16+
import androidx.compose.ui.platform.LocalContext
17+
import androidx.compose.ui.platform.LocalDensity
18+
import androidx.compose.ui.res.dimensionResource
19+
import androidx.compose.ui.text.TextStyle
20+
import androidx.compose.ui.text.font.FontFamily
21+
import androidx.compose.ui.text.font.FontWeight
22+
import androidx.compose.ui.unit.Dp
23+
import androidx.compose.ui.window.Dialog
24+
25+
import io.syslogic.colorpicker.OnColorChangedListener
26+
import io.syslogic.colorpicker.R
27+
28+
@Composable
29+
fun toSp(dp: Dp) = with(LocalDensity.current) { dp.toSp() }
30+
31+
@Composable
32+
fun ColorPickerDialog(
33+
dialogTitle: String = LocalContext.current.getString(R.string.text_select_color),
34+
initialColor: Color = Color.Unspecified,
35+
onColorChanged: OnColorChangedListener?,
36+
showAlpha: Boolean = true,
37+
showHSV: Boolean = true,
38+
showARGB: Boolean = true,
39+
showHex: Boolean = true,
40+
showDialog: (Boolean) -> Unit
41+
) {
42+
43+
/* The value is being initialized by the `initialColor`. */
44+
val currentColor: Int by remember { mutableStateOf(initialColor.hashCode()) }
45+
46+
Dialog(onDismissRequest = { showDialog(false) }) {
47+
Surface(
48+
shape = RoundedCornerShape(dimensionResource(R.dimen.compose_dialog_border_radius)),
49+
color = Color.White
50+
) {
51+
Box(
52+
contentAlignment = Alignment.Center
53+
) {
54+
Column(
55+
modifier = Modifier
56+
.padding(dimensionResource(R.dimen.compose_dialog_column_padding))
57+
) {
58+
59+
Row(
60+
modifier = Modifier.fillMaxWidth(),
61+
horizontalArrangement = Arrangement.SpaceBetween,
62+
verticalAlignment = Alignment.CenterVertically
63+
) {
64+
Text(
65+
text = dialogTitle,
66+
style = TextStyle(
67+
fontSize = toSp(dp = dimensionResource(R.dimen.compose_dialog_title_font_size)),
68+
fontFamily = FontFamily.Default,
69+
fontWeight = FontWeight.Bold
70+
)
71+
)
72+
Icon(
73+
imageVector = Icons.Filled.Close,
74+
contentDescription = "",
75+
tint = Color.DarkGray,
76+
modifier = Modifier
77+
.width(dimensionResource(R.dimen.compose_dialog_close_icon_size))
78+
.height(dimensionResource(R.dimen.compose_dialog_close_icon_size))
79+
.clickable { showDialog(false) }
80+
)
81+
}
82+
83+
Spacer(
84+
modifier = Modifier.height(dimensionResource(R.dimen.compose_dialog_spacer_height))
85+
)
86+
87+
ColorPickerComponent(
88+
initialColor = Color(currentColor),
89+
onColorChanged = onColorChanged,
90+
showAlpha = showAlpha,
91+
showARGB = showARGB,
92+
showHSV = showHSV,
93+
showHex = showHex
94+
)
95+
}
96+
}
97+
}
98+
}
99+
}

library/src/main/res/values/dimens.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,11 @@
1717
<dimen name="compose_hsv_label_padding_end">4dp</dimen>
1818
<dimen name="compose_argb_value_min_width">30dp</dimen>
1919

20+
<!-- ColorPickerDialog -->
21+
<dimen name="compose_dialog_border_radius">16dp</dimen>
22+
<dimen name="compose_dialog_column_padding">20dp</dimen>
23+
<dimen name="compose_dialog_spacer_height">20dp</dimen>
24+
<dimen name="compose_dialog_close_icon_size">30dp</dimen>
25+
<dimen name="compose_dialog_title_font_size">24dp</dimen>
26+
2027
</resources>

library/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<resources>
33
<string name="text_color_picker_dialog">Color Picker</string>
44
<string name="text_hexadecimal_value">Hex Value</string>
5+
<string name="text_select_color">Select Color</string>
56

67
<string name="text_label_hue">Hue:</string>
78
<string name="text_label_sat">Sat:</string>

mobile/src/main/java/io/syslogic/demo/colorpicker/activity/ComposeActivity.kt

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
package io.syslogic.demo.colorpicker.activity
22

33
import android.content.SharedPreferences
4-
54
import android.os.Bundle
5+
66
import androidx.activity.ComponentActivity
77
import androidx.activity.compose.setContent
8+
import androidx.compose.foundation.layout.fillMaxSize
89
import androidx.compose.material.MaterialTheme
10+
import androidx.compose.material.Surface
11+
import androidx.compose.ui.Modifier
912
import androidx.compose.ui.graphics.Color
1013
import androidx.preference.PreferenceManager
1114

1215
import io.syslogic.colorpicker.OnColorChangedListener
13-
1416
import io.syslogic.colorpicker.compose.ColorPickerComponent
1517

1618
/**
@@ -30,14 +32,19 @@ class ComposeActivity : ComponentActivity(), OnColorChangedListener {
3032

3133
this.setContent {
3234
MaterialTheme {
33-
ColorPickerComponent(
34-
onColorChanged = this@ComposeActivity,
35-
initialColor = Color(initialColor),
36-
showAlpha = true,
37-
showHSV = true,
38-
showARGB = true,
39-
showHex = true
40-
)
35+
Surface(
36+
modifier = Modifier.fillMaxSize(),
37+
color = MaterialTheme.colors.background
38+
) {
39+
ColorPickerComponent(
40+
onColorChanged = this@ComposeActivity,
41+
initialColor = Color(initialColor),
42+
showAlpha = true,
43+
showHSV = true,
44+
showARGB = true,
45+
showHex = true
46+
)
47+
}
4148
}
4249
}
4350
}

0 commit comments

Comments
 (0)