From 8172584c5fa18c17eeb613c7faabd67e711d05f0 Mon Sep 17 00:00:00 2001 From: Sadturtleman Date: Tue, 12 May 2026 09:47:29 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=ED=96=85=ED=8B=B1=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/RatingRangeSlider.kt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/into/websoso/ui/detailExplore/component/RatingRangeSlider.kt b/app/src/main/java/com/into/websoso/ui/detailExplore/component/RatingRangeSlider.kt index 240115325..1c6bccbed 100644 --- a/app/src/main/java/com/into/websoso/ui/detailExplore/component/RatingRangeSlider.kt +++ b/app/src/main/java/com/into/websoso/ui/detailExplore/component/RatingRangeSlider.kt @@ -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 @@ -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 @@ -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) } + fun snap(rawValue: Float): Float { val stepped = round(rawValue / stepSize) * stepSize return stepped.coerceIn(valueRange.start, valueRange.endInclusive) @@ -103,8 +108,18 @@ fun RatingRangeSlider( 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)) } }, From 6d0b10d4e8eafaaf084770091062c9b82748c895 Mon Sep 17 00:00:00 2001 From: Sadturtleman Date: Tue, 19 May 2026 23:06:46 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20snapped=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/detailExplore/component/RatingRangeSlider.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/into/websoso/ui/detailExplore/component/RatingRangeSlider.kt b/app/src/main/java/com/into/websoso/ui/detailExplore/component/RatingRangeSlider.kt index 1c6bccbed..be62d653a 100644 --- a/app/src/main/java/com/into/websoso/ui/detailExplore/component/RatingRangeSlider.kt +++ b/app/src/main/java/com/into/websoso/ui/detailExplore/component/RatingRangeSlider.kt @@ -99,9 +99,13 @@ 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, _ ->