From 2fc6ab1b625947d85575e713148f666d211e928d Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Fri, 31 May 2024 06:26:49 +0700 Subject: [PATCH] feat: SliderPreferenceWidget --- .../component/preference/PreferenceItem.kt | 18 ++++------ .../widget/SliderPreferenceWidget.kt | 35 +++++++++++++++++++ 2 files changed, 42 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/dev/yokai/presentation/component/preference/widget/SliderPreferenceWidget.kt diff --git a/app/src/main/java/dev/yokai/presentation/component/preference/PreferenceItem.kt b/app/src/main/java/dev/yokai/presentation/component/preference/PreferenceItem.kt index ab94e5eb90..0e47d121b3 100644 --- a/app/src/main/java/dev/yokai/presentation/component/preference/PreferenceItem.kt +++ b/app/src/main/java/dev/yokai/presentation/component/preference/PreferenceItem.kt @@ -17,6 +17,7 @@ import dev.yokai.presentation.component.preference.widget.EditTextPreferenceWidg import dev.yokai.presentation.component.preference.widget.InfoWidget import dev.yokai.presentation.component.preference.widget.ListPreferenceWidget import dev.yokai.presentation.component.preference.widget.MultiSelectListPreferenceWidget +import dev.yokai.presentation.component.preference.widget.SliderPreferenceWidget import dev.yokai.presentation.component.preference.widget.SwitchPreferenceWidget import dev.yokai.presentation.component.preference.widget.TextPreferenceWidget import dev.yokai.presentation.component.preference.widget.TrackingPreferenceWidget @@ -78,23 +79,18 @@ internal fun PreferenceItem( ) } is Preference.PreferenceItem.SliderPreference -> { - // TODO: use different composable? - // FIXME: Add the actual thing - Text(text = "Hello World") - /* - SliderItem( - label = item.title, + SliderPreferenceWidget( + title = item.title, + subtitle = item.subtitle.takeUnless { it.isNullOrEmpty() } ?: item.value.toString(), + value = item.value, min = item.min, max = item.max, - value = item.value, - valueText = item.subtitle.takeUnless { it.isNullOrEmpty() } ?: item.value.toString(), - onChange = { + onValueChange = { scope.launch { - item.onValueChanged(it) + item.onValueChanged(it.toInt()) } }, ) - */ } is Preference.PreferenceItem.ListPreference<*> -> { val value by item.pref.collectAsState() diff --git a/app/src/main/java/dev/yokai/presentation/component/preference/widget/SliderPreferenceWidget.kt b/app/src/main/java/dev/yokai/presentation/component/preference/widget/SliderPreferenceWidget.kt new file mode 100644 index 0000000000..82b0ff0c0f --- /dev/null +++ b/app/src/main/java/dev/yokai/presentation/component/preference/widget/SliderPreferenceWidget.kt @@ -0,0 +1,35 @@ +package dev.yokai.presentation.component.preference.widget + +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Slider +import androidx.compose.material3.SliderState +import androidx.compose.material3.Switch +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector + +@Composable +fun SliderPreferenceWidget( + modifier: Modifier = Modifier, + title: String, + subtitle: String? = null, + icon: ImageVector? = null, + value: Int, + min: Int, + max: Int, + onValueChange: (Float) -> Unit, +) { + TextPreferenceWidget( + modifier = modifier, + title = title, + subtitle = subtitle, + icon = icon, + widget = { + Slider( + value = value.toFloat(), + onValueChange = onValueChange, + valueRange = min.toFloat()..max.toFloat() + ) + }, + ) +}