@@ -2,13 +2,15 @@ package io.github.sds100.keymapper.groups
22
33import androidx.compose.foundation.BorderStroke
44import androidx.compose.foundation.layout.Arrangement
5+ import androidx.compose.foundation.layout.BoxWithConstraints
56import androidx.compose.foundation.layout.FlowRow
67import androidx.compose.foundation.layout.Row
78import androidx.compose.foundation.layout.Spacer
89import androidx.compose.foundation.layout.heightIn
910import androidx.compose.foundation.layout.padding
1011import androidx.compose.foundation.layout.size
1112import androidx.compose.foundation.layout.width
13+ import androidx.compose.foundation.layout.widthIn
1214import androidx.compose.foundation.rememberScrollState
1315import androidx.compose.foundation.verticalScroll
1416import androidx.compose.material.icons.Icons
@@ -29,8 +31,10 @@ import androidx.compose.ui.Alignment
2931import androidx.compose.ui.Modifier
3032import androidx.compose.ui.graphics.Color
3133import androidx.compose.ui.platform.LocalContext
34+ import androidx.compose.ui.platform.LocalDensity
3235import androidx.compose.ui.res.pluralStringResource
3336import androidx.compose.ui.res.stringResource
37+ import androidx.compose.ui.text.style.TextOverflow
3438import androidx.compose.ui.tooling.preview.Preview
3539import androidx.compose.ui.unit.dp
3640import com.google.accompanist.drawablepainter.rememberDrawablePainter
@@ -54,88 +58,96 @@ fun GroupConstraintRow(
5458 onFixConstraintClick : (Error ) -> Unit = {},
5559 enabled : Boolean = true,
5660) {
57- FlowRow (
58- modifier.verticalScroll(rememberScrollState()),
59- verticalArrangement = Arrangement .spacedBy(8 .dp),
60- horizontalArrangement = Arrangement .spacedBy(8 .dp),
61- itemVerticalAlignment = Alignment .CenterVertically ,
62- ) {
63- NewConstraintButton (
64- onClick = onNewConstraintClick,
65- showText = constraints.isEmpty(),
66- enabled = enabled,
67- )
61+ BoxWithConstraints (modifier = modifier) {
62+ val maxChipWidth = LocalDensity .current.run {
63+ (this @BoxWithConstraints.constraints.maxWidth / 2 ).toDp()
64+ }
65+
66+ FlowRow (
67+ Modifier .verticalScroll(rememberScrollState()),
68+ verticalArrangement = Arrangement .spacedBy(8 .dp),
69+ horizontalArrangement = Arrangement .spacedBy(8 .dp),
70+ itemVerticalAlignment = Alignment .CenterVertically ,
71+ ) {
72+ NewConstraintButton (
73+ onClick = onNewConstraintClick,
74+ showText = constraints.isEmpty(),
75+ enabled = enabled,
76+ )
6877
69- for ((index, constraint) in constraints.withIndex()) {
70- when (constraint) {
71- is ComposeChipModel .Normal ->
72- CompositionLocalProvider (LocalContentColor provides MaterialTheme .colorScheme.onSurface) {
73- ConstraintButton (
74- text = constraint.text,
75- onRemoveClick = { onRemoveConstraintClick(constraint.id) },
76- // Only allow clicking on error chips
77- enabled = enabled,
78- icon = {
79- if (constraint.icon is ComposeIconInfo .Vector ) {
80- Icon (
81- modifier = Modifier
82- .size(24 .dp)
83- .padding(end = 8 .dp),
84- imageVector = constraint.icon.imageVector,
85- contentDescription = null ,
86- )
87- } else if (constraint.icon is ComposeIconInfo .Drawable ) {
88- Icon (
89- modifier = Modifier
90- .size(24 .dp)
91- .padding(end = 8 .dp),
92- painter = rememberDrawablePainter(constraint.icon.drawable),
93- contentDescription = null ,
94- tint = Color .Unspecified ,
95- )
96- }
97- },
78+ for ((index, constraint) in constraints.withIndex()) {
79+ when (constraint) {
80+ is ComposeChipModel .Normal ->
81+ CompositionLocalProvider (LocalContentColor provides MaterialTheme .colorScheme.onSurface) {
82+ ConstraintButton (
83+ modifier = Modifier .widthIn(max = maxChipWidth),
84+ text = constraint.text,
85+ onRemoveClick = { onRemoveConstraintClick(constraint.id) },
86+ // Only allow clicking on error chips
87+ enabled = enabled,
88+ icon = {
89+ if (constraint.icon is ComposeIconInfo .Vector ) {
90+ Icon (
91+ modifier = Modifier
92+ .size(24 .dp)
93+ .padding(end = 8 .dp),
94+ imageVector = constraint.icon.imageVector,
95+ contentDescription = null ,
96+ )
97+ } else if (constraint.icon is ComposeIconInfo .Drawable ) {
98+ Icon (
99+ modifier = Modifier
100+ .size(24 .dp)
101+ .padding(end = 8 .dp),
102+ painter = rememberDrawablePainter(constraint.icon.drawable),
103+ contentDescription = null ,
104+ tint = Color .Unspecified ,
105+ )
106+ }
107+ },
108+ )
109+ }
110+
111+ is ComposeChipModel .Error ->
112+ CompositionLocalProvider (LocalContentColor provides MaterialTheme .colorScheme.onErrorContainer) {
113+ ConstraintErrorButton (
114+ modifier = Modifier .widthIn(max = maxChipWidth),
115+ text = constraint.text,
116+ onClick = { onFixConstraintClick(constraint.error) },
117+ onRemoveClick = { onRemoveConstraintClick(constraint.id) },
118+ // Only allow clicking on error chips
119+ enabled = enabled,
120+ )
121+ }
122+ }
123+
124+ if (index < constraints.lastIndex) {
125+ when (mode) {
126+ ConstraintMode .AND -> Text (
127+ text = stringResource(R .string.constraint_mode_and),
128+ style = MaterialTheme .typography.labelMedium,
98129 )
99- }
100130
101- is ComposeChipModel .Error ->
102- CompositionLocalProvider (LocalContentColor provides MaterialTheme .colorScheme.onErrorContainer) {
103- ConstraintErrorButton (
104- text = constraint.text,
105- onClick = { onFixConstraintClick(constraint.error) },
106- onRemoveClick = { onRemoveConstraintClick(constraint.id) },
107- // Only allow clicking on error chips
108- enabled = enabled,
131+ ConstraintMode .OR -> Text (
132+ text = stringResource(R .string.constraint_mode_or),
133+ style = MaterialTheme .typography.labelMedium,
109134 )
110135 }
111- }
112-
113- if (index < constraints.lastIndex) {
114- when (mode) {
115- ConstraintMode .AND -> Text (
116- text = stringResource(R .string.constraint_mode_and),
117- style = MaterialTheme .typography.labelMedium,
118- )
119-
120- ConstraintMode .OR -> Text (
121- text = stringResource(R .string.constraint_mode_or),
122- style = MaterialTheme .typography.labelMedium,
123- )
124136 }
125137 }
126- }
127138
128- if (parentConstraintCount > 0 ) {
129- Text (
130- modifier = Modifier
131- .padding(horizontal = 8 .dp),
132- text = pluralStringResource(
133- R .plurals.home_groups_inherited_constraints,
134- parentConstraintCount,
135- parentConstraintCount,
136- ),
137- style = MaterialTheme .typography.labelMedium,
138- )
139+ if (parentConstraintCount > 0 ) {
140+ Text (
141+ modifier = Modifier
142+ .padding(horizontal = 8 .dp),
143+ text = pluralStringResource(
144+ R .plurals.home_groups_inherited_constraints,
145+ parentConstraintCount,
146+ parentConstraintCount,
147+ ),
148+ style = MaterialTheme .typography.labelMedium,
149+ )
150+ }
139151 }
140152 }
141153}
@@ -205,9 +217,11 @@ private fun ConstraintButton(
205217 icon()
206218
207219 Text (
220+ modifier = Modifier .weight(1f , fill = false ),
208221 text = text,
209222 maxLines = 1 ,
210223 style = MaterialTheme .typography.titleSmall,
224+ overflow = TextOverflow .Ellipsis ,
211225 )
212226
213227 Spacer (modifier = Modifier .width(4 .dp))
@@ -260,9 +274,11 @@ private fun ConstraintErrorButton(
260274 )
261275
262276 Text (
277+ modifier = Modifier .weight(1f , fill = false ),
263278 text = text,
264279 maxLines = 1 ,
265280 style = MaterialTheme .typography.titleSmall,
281+ overflow = TextOverflow .Ellipsis ,
266282 )
267283
268284 Spacer (modifier = Modifier .width(4 .dp))
0 commit comments