Skip to content

Commit 1fecb39

Browse files
committed
Fix interval configuration row alignment
1 parent 113749b commit 1fecb39

File tree

2 files changed

+51
-34
lines changed

2 files changed

+51
-34
lines changed

app/src/main/kotlin/com/w2sv/wifiwidget/ui/screens/widgetconfiguration/components/configuration/CheckRowColumn.kt

Lines changed: 46 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package com.w2sv.wifiwidget.ui.screens.widgetconfiguration.components.configuration
22

3+
import androidx.annotation.StringRes
34
import androidx.compose.animation.AnimatedVisibility
4-
import androidx.compose.animation.animateContentSize
55
import androidx.compose.foundation.layout.Box
66
import androidx.compose.foundation.layout.Column
77
import androidx.compose.foundation.layout.Row
8+
import androidx.compose.foundation.layout.RowScope
89
import androidx.compose.foundation.layout.Spacer
910
import androidx.compose.foundation.layout.fillMaxWidth
1011
import androidx.compose.foundation.layout.heightIn
@@ -51,6 +52,7 @@ import com.w2sv.wifiwidget.ui.designsystem.KeyboardArrowRightIcon
5152
import com.w2sv.wifiwidget.ui.designsystem.SubPropertyKeyboardArrowRightIcon
5253
import com.w2sv.wifiwidget.ui.designsystem.nestedContentBackground
5354
import com.w2sv.wifiwidget.ui.theme.onSurfaceVariantLowAlpha
55+
import com.w2sv.wifiwidget.ui.utils.ShakeController
5456
import com.w2sv.wifiwidget.ui.utils.alphaDecreased
5557
import com.w2sv.wifiwidget.ui.utils.contentDescription
5658
import com.w2sv.wifiwidget.ui.utils.offsetClip
@@ -223,7 +225,6 @@ private fun SubPropertyColumn(elements: ImmutableList<ConfigurationColumnElement
223225
.padding(start = 24.dp) // Make background start at the indentation of CheckRowBase label
224226
.nestedContentBackground()
225227
.padding(start = SubPropertyColumnDefaults.startPadding)
226-
.animateContentSize()
227228
) {
228229
elements.forEach { element ->
229230
when (element) {
@@ -266,46 +267,68 @@ private fun CheckRowBase(
266267
leadingIcon: (@Composable () -> Unit)? = null
267268
) {
268269
val label = stringResource(id = data.property.labelRes)
269-
val checkBoxCD = stringResource(id = R.string.set_unset, label)
270+
PropertyConfigurationRow(
271+
data.property.labelRes,
272+
modifier = modifier.then(data.modifier),
273+
fontSize = fontSize,
274+
labelColor = labelColor,
275+
shakeController = data.shakeController,
276+
explanationRes = data.explanation,
277+
leadingIcon = leadingIcon
278+
) {
279+
data.showInfoDialog?.let {
280+
InfoIconButton(
281+
onClick = it,
282+
contentDescription = stringResource(id = R.string.info_icon_cd, label)
283+
)
284+
}
285+
Checkbox(
286+
checked = data.isChecked(),
287+
onCheckedChange = { data.onCheckedChange(it) },
288+
modifier = Modifier.contentDescription(stringResource(id = R.string.set_unset, label))
289+
)
290+
}
291+
}
270292

271-
Column {
293+
@Composable
294+
fun PropertyConfigurationRow(
295+
@StringRes labelRes: Int,
296+
modifier: Modifier = Modifier,
297+
fontSize: TextUnit = TextUnit.Unspecified,
298+
labelColor: Color = MaterialTheme.colorScheme.onBackground,
299+
shakeController: ShakeController? = null,
300+
@StringRes explanationRes: Int? = null,
301+
leadingIcon: (@Composable () -> Unit)? = null,
302+
endContent: @Composable RowScope.() -> Unit
303+
) {
304+
Column(
305+
modifier = modifier
306+
.fillMaxWidth()
307+
.padding(start = CheckRowDefaults.startPadding)
308+
.thenIfNotNull(shakeController) { shake(it) }) {
272309
Row(
273310
verticalAlignment = Alignment.CenterVertically,
274-
modifier = modifier
275-
.fillMaxWidth()
276-
.padding(start = CheckRowDefaults.startPadding)
277-
.then(data.modifier)
278-
.thenIfNotNull(data.shakeController) { shake(it) }
311+
modifier = Modifier.fillMaxWidth()
279312
) {
280313
leadingIcon?.run {
281314
invoke()
282315
Spacer(Modifier.width(CheckRowDefaults.leadingIconLabelGap))
283316
}
284317
Text(
285-
text = label,
318+
text = stringResource(id = labelRes),
286319
modifier = Modifier.weight(1.0f),
287320
fontSize = fontSize,
288321
color = labelColor
289322
)
290-
data.showInfoDialog?.let {
291-
InfoIconButton(
292-
onClick = it,
293-
contentDescription = stringResource(id = R.string.info_icon_cd, label)
294-
)
295-
}
296-
Checkbox(
297-
checked = data.isChecked(),
298-
onCheckedChange = { data.onCheckedChange(it) },
299-
modifier = Modifier.contentDescription(checkBoxCD)
300-
)
323+
endContent()
301324
}
302-
data.explanation?.let {
325+
explanationRes?.let {
303326
Text(
304327
stringResource(it),
305328
color = MaterialTheme.colorScheme.onSurfaceVariantLowAlpha,
306329
fontSize = 13.sp,
307330
modifier = Modifier
308-
.padding(start = 56.dp)
331+
.padding(start = 52.dp) // Align with label above
309332
.offsetClip(dy = (-10).dp) // Shift explanation up a bit to increase its visual coherence with the main row
310333
)
311334
}

app/src/main/kotlin/com/w2sv/wifiwidget/ui/screens/widgetconfiguration/components/configuration/RefreshingConfiguration.kt

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,15 @@
11
package com.w2sv.wifiwidget.ui.screens.widgetconfiguration.components.configuration
22

3-
import androidx.compose.foundation.layout.Row
4-
import androidx.compose.foundation.layout.Spacer
53
import androidx.compose.foundation.layout.fillMaxWidth
64
import androidx.compose.foundation.layout.padding
75
import androidx.compose.foundation.layout.size
86
import androidx.compose.material3.FilledTonalIconButton
97
import androidx.compose.material3.Icon
10-
import androidx.compose.material3.IconButton
118
import androidx.compose.material3.MaterialTheme
129
import androidx.compose.material3.Text
1310
import androidx.compose.runtime.Composable
1411
import androidx.compose.runtime.getValue
1512
import androidx.compose.runtime.remember
16-
import androidx.compose.ui.Alignment
1713
import androidx.compose.ui.Modifier
1814
import androidx.compose.ui.res.painterResource
1915
import androidx.compose.ui.res.stringResource
@@ -84,14 +80,12 @@ private fun RefreshIntervalConfigurationRow(
8480
showConfigurationDialog: () -> Unit,
8581
modifier: Modifier = Modifier
8682
) {
87-
Row(
83+
PropertyConfigurationRow(
84+
R.string.interval,
8885
modifier = modifier,
89-
verticalAlignment = Alignment.CenterVertically
86+
fontSize = SubPropertyColumnDefaults.fontSize,
87+
leadingIcon = { SubPropertyKeyboardArrowRightIcon() }
9088
) {
91-
SubPropertyKeyboardArrowRightIcon(modifier = Modifier.padding(end = CheckRowDefaults.leadingIconLabelGap))
92-
Text(text = stringResource(R.string.interval))
93-
Spacer(modifier = Modifier.weight(1f))
94-
9589
Text(
9690
text = remember(interval) {
9791
interval.run {
@@ -106,7 +100,7 @@ private fun RefreshIntervalConfigurationRow(
106100
FilledTonalIconButton(
107101
onClick = showConfigurationDialog,
108102
modifier = Modifier
109-
.padding(horizontal = 4.dp)
103+
.padding(start = 8.dp, end = 4.dp)
110104
.size(38.dp)
111105
) {
112106
Icon(

0 commit comments

Comments
 (0)