Skip to content

Commit 1236e3b

Browse files
committed
Replace bubble calculation with position label text field
1 parent 1beeb13 commit 1236e3b

File tree

2 files changed

+14
-48
lines changed

2 files changed

+14
-48
lines changed

datacapture/src/main/java/com/google/android/fhir/datacapture/views/compose/SliderItem.kt

Lines changed: 13 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -16,80 +16,48 @@
1616

1717
package com.google.android.fhir.datacapture.views.compose
1818

19-
import androidx.compose.foundation.interaction.MutableInteractionSource
20-
import androidx.compose.foundation.interaction.collectIsDraggedAsState
21-
import androidx.compose.foundation.layout.Box
19+
import androidx.compose.foundation.layout.Column
20+
import androidx.compose.foundation.layout.Spacer
2221
import androidx.compose.foundation.layout.fillMaxWidth
23-
import androidx.compose.foundation.layout.height
24-
import androidx.compose.foundation.layout.padding
2522
import androidx.compose.material3.MaterialTheme
2623
import androidx.compose.material3.Slider
27-
import androidx.compose.material3.Surface
2824
import androidx.compose.material3.Text
2925
import androidx.compose.runtime.Composable
3026
import androidx.compose.runtime.getValue
3127
import androidx.compose.runtime.mutableFloatStateOf
3228
import androidx.compose.runtime.remember
3329
import androidx.compose.runtime.setValue
3430
import androidx.compose.ui.Modifier
35-
import androidx.compose.ui.layout.layout
3631
import androidx.compose.ui.platform.testTag
37-
import androidx.compose.ui.unit.dp
32+
import androidx.compose.ui.text.font.FontWeight
3833
import kotlin.math.roundToInt
3934

4035
@Composable
4136
fun SliderItem(
42-
startPosition: Float,
37+
position: Float,
4338
steps: Int,
4439
valueRange: ClosedFloatingPointRange<Float>,
4540
enabled: Boolean,
4641
onPositionChanged: (Float) -> Unit,
4742
) {
48-
var sliderPosition by remember(startPosition) { mutableFloatStateOf(startPosition) }
49-
val interactionSource =
50-
remember(startPosition, steps, valueRange, enabled) { MutableInteractionSource() }
51-
val isDragged by interactionSource.collectIsDraggedAsState()
52-
53-
Box {
54-
if (isDragged) {
55-
Surface(
56-
modifier =
57-
Modifier.layout { measurable, constraints ->
58-
val placeable = measurable.measure(constraints)
59-
val sliderWidth = constraints.maxWidth
60-
val sliderValueNormalized =
61-
(sliderPosition - valueRange.start) / (valueRange.endInclusive - valueRange.start)
62-
val textX =
63-
(sliderWidth * sliderValueNormalized - placeable.width / 2).coerceIn(
64-
0f,
65-
(sliderWidth - placeable.width).toFloat(),
66-
)
67-
val bottomPadding = 16.dp.toPx().roundToInt()
68-
layout(placeable.width, placeable.height - bottomPadding) {
69-
placeable.placeRelative(textX.roundToInt(), -bottomPadding)
70-
}
71-
},
72-
shape = MaterialTheme.shapes.small,
73-
color = MaterialTheme.colorScheme.primary,
74-
) {
75-
Text(
76-
text = sliderPosition.roundToInt().toString(),
77-
color = MaterialTheme.colorScheme.onPrimary,
78-
modifier = Modifier.padding(horizontal = 8.dp, vertical = 4.dp),
79-
)
80-
}
81-
}
43+
var sliderPosition by remember(position) { mutableFloatStateOf(position) }
8244

45+
Column {
8346
Slider(
8447
value = sliderPosition,
8548
onValueChange = { sliderPosition = it },
8649
onValueChangeFinished = { onPositionChanged(sliderPosition) },
8750
steps = steps,
8851
valueRange = valueRange,
89-
interactionSource = interactionSource,
90-
modifier = Modifier.padding(top = 16.dp).fillMaxWidth().testTag(SLIDER_TAG),
52+
modifier = Modifier.fillMaxWidth().testTag(SLIDER_TAG),
9153
enabled = enabled,
9254
)
55+
Spacer(modifier = Modifier)
56+
Text(
57+
text = sliderPosition.roundToInt().toString(),
58+
style = MaterialTheme.typography.displaySmall,
59+
fontWeight = FontWeight.ExtraLight,
60+
)
9361
}
9462
}
9563

datacapture/src/main/java/com/google/android/fhir/datacapture/views/factories/SliderViewHolderFactory.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,8 @@ import androidx.compose.foundation.layout.Column
2020
import androidx.compose.foundation.layout.fillMaxWidth
2121
import androidx.compose.foundation.layout.padding
2222
import androidx.compose.runtime.Composable
23-
import androidx.compose.runtime.getValue
2423
import androidx.compose.runtime.remember
2524
import androidx.compose.runtime.rememberCoroutineScope
26-
import androidx.compose.runtime.setValue
2725
import androidx.compose.ui.Modifier
2826
import androidx.compose.ui.res.dimensionResource
2927
import com.google.android.fhir.datacapture.R
@@ -83,7 +81,7 @@ internal object SliderViewHolderFactory : QuestionnaireItemComposeViewHolderFact
8381
Header(questionnaireViewItem, showRequiredOrOptionalText = true)
8482
questionnaireViewItem.questionnaireItem.itemMedia?.let { MediaItem(it) }
8583
SliderItem(
86-
startPosition = questionnaireViewItemAnswerValue,
84+
position = questionnaireViewItemAnswerValue,
8785
steps = steps,
8886
valueRange = minValue..maxValue,
8987
enabled = !readOnly,

0 commit comments

Comments
 (0)