Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.into.websoso.ui.detailExplore.component

import android.view.HapticFeedbackConstants
import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.detectDragGestures
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.offset
Expand All @@ -28,6 +28,7 @@ import androidx.compose.ui.draw.shadow
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.unit.dp
import com.into.websoso.core.designsystem.theme.Primary100
import com.into.websoso.core.designsystem.theme.Primary50
Expand Down Expand Up @@ -64,6 +65,10 @@ fun RatingRangeSlider(
val latestStartCenter by rememberUpdatedState(startCenterPx)
val latestEndCenter by rememberUpdatedState(endCenterPx)

val view = LocalView.current
var lastMinSnapped by remember { mutableFloatStateOf(min) }
var lastMaxSnapped by remember { mutableFloatStateOf(max) }
Comment thread
coderabbitai[bot] marked this conversation as resolved.

fun snap(rawValue: Float): Float {
val stepped = round(rawValue / stepSize) * stepSize
return stepped.coerceIn(valueRange.start, valueRange.endInclusive)
Expand Down Expand Up @@ -94,17 +99,31 @@ fun RatingRangeSlider(
}
val newValue = valueAtX(touchX)
if (activeThumb == 1) {
onValueChange(newValue.coerceAtMost(latestMax), latestMax)
val snapped = newValue.coerceAtMost(latestMax)
lastMinSnapped = snapped
onValueChange(snapped, latestMax)
} else {
onValueChange(latestMin, newValue.coerceAtLeast(latestMin))
val snapped = newValue.coerceAtLeast(latestMin)
lastMaxSnapped = snapped
onValueChange(lastMinSnapped, snapped)
}
},
onDrag = { change, _ ->
change.consume()
val newValue = valueAtX(change.position.x)
if (activeThumb == 1) {
val snapped = newValue.coerceAtMost(latestMax)
if (snapped != lastMinSnapped) {
view.performHapticFeedback(HapticFeedbackConstants.CLOCK_TICK)
lastMinSnapped = snapped
}
onValueChange(newValue.coerceAtMost(latestMax), latestMax)
} else {
val snapped = newValue.coerceAtLeast(latestMin)
if (snapped != lastMaxSnapped) {
view.performHapticFeedback(HapticFeedbackConstants.CLOCK_TICK)
lastMaxSnapped = snapped
}
onValueChange(latestMin, newValue.coerceAtLeast(latestMin))
}
},
Expand Down
Loading