diff --git a/app/src/main/java/com/laseroptek/raman/ui/screens/home/dcd/DcdSettingPopup.kt b/app/src/main/java/com/laseroptek/raman/ui/screens/home/dcd/DcdSettingPopup.kt index 359e05f..5bd631c 100644 --- a/app/src/main/java/com/laseroptek/raman/ui/screens/home/dcd/DcdSettingPopup.kt +++ b/app/src/main/java/com/laseroptek/raman/ui/screens/home/dcd/DcdSettingPopup.kt @@ -334,7 +334,7 @@ fun DcdSettingPopup( modifier = Modifier .fillMaxHeight() .size(40.px.dp, 210.px.dp), - chargeRate = gasChargeRate.toInt() + chargeRate = gasChargeRate ) // Icon diff --git a/app/src/main/java/com/laseroptek/raman/ui/screens/home/dcd/GradientSlider.kt b/app/src/main/java/com/laseroptek/raman/ui/screens/home/dcd/GradientSlider.kt index 3250621..4babb62 100644 --- a/app/src/main/java/com/laseroptek/raman/ui/screens/home/dcd/GradientSlider.kt +++ b/app/src/main/java/com/laseroptek/raman/ui/screens/home/dcd/GradientSlider.kt @@ -28,14 +28,26 @@ import com.laseroptek.raman.ui.screens.main.MainViewModel import com.laseroptek.raman.utils.DefaultDispatcherProvider import com.laseroptek.raman.utils.ext.px import timber.log.Timber +import kotlin.math.abs +import kotlin.math.ceil @Composable fun GradientSlider( modifier: Modifier = Modifier, - chargeRate: Int = 0, // Value from (0 .. 100) + chargeRate: Float = 0f, ) { - val chargeIndex = ((chargeRate.coerceIn(0, 100) + 4) / 5).toInt() // 0..19 + val normalizedRate = chargeRate.coerceIn(0f, 100f) + val bucket = normalizedRate / 5f + val remainder = normalizedRate % 5f + val isExactMultiple = abs(remainder) < 0.0001f + + val chargeIndex = when { + normalizedRate == 0f -> -1 + isExactMultiple -> (bucket - 1f).toInt().coerceAtLeast(-1) + else -> (ceil(bucket.toDouble()).toInt() - 1) + }.coerceIn(-1, 19) + Timber.d("chargeRate: $chargeRate, chargeIndex: $chargeIndex") Box( @@ -103,6 +115,6 @@ fun GradientSliderPreview( //mainViewModel = mainViewModel modifier = Modifier .size(40.px.dp, 210.px.dp), - chargeRate = 20 + chargeRate = 20f ) }