From 380397321c1f199681ffb753cee60c10635eef68 Mon Sep 17 00:00:00 2001 From: darken Date: Wed, 10 Jun 2026 11:25:21 +0200 Subject: [PATCH] fix(reaction): Apply volume reduction slider only on drag release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The conversation volume slider committed a profile write on every drag frame — laggy dragging, and racing async writes persisted stale mid-drag values (observed: 78 stored while the UI showed 70). Use local state while dragging and commit on release, matching the adaptive-noise and tone-volume sliders. --- .../capod/main/ui/devicesettings/cards/ReactionsCard.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/darken/capod/main/ui/devicesettings/cards/ReactionsCard.kt b/app/src/main/java/eu/darken/capod/main/ui/devicesettings/cards/ReactionsCard.kt index a6eb9e09..494a4ad4 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/devicesettings/cards/ReactionsCard.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/devicesettings/cards/ReactionsCard.kt @@ -20,6 +20,7 @@ import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue @@ -159,11 +160,15 @@ internal fun ReactionsCard( requiresUpgrade = !isPro, ) if (reactions.conversationAction == ConversationAction.LOWER_VOLUME) { + var sliderValue by remember(reactions.conversationVolumeReduction) { + mutableIntStateOf(reactions.conversationVolumeReduction) + } SettingsSliderItem( icon = Icons.AutoMirrored.TwoTone.VolumeDown, title = stringResource(R.string.settings_conversation_volume_reduction_label), - value = reactions.conversationVolumeReduction.toFloat(), - onValueChange = { onConversationVolumeReductionChange(it.toInt()) }, + value = sliderValue.toFloat(), + onValueChange = { sliderValue = it.toInt() }, + onValueChangeFinished = { onConversationVolumeReductionChange(sliderValue) }, valueRange = ReactionConfig.MIN_CONVERSATION_VOLUME_REDUCTION.toFloat().. ReactionConfig.MAX_CONVERSATION_VOLUME_REDUCTION.toFloat(), enabled = enabled,