From 8229163f703100bb211999f0a01657bef04dabfd Mon Sep 17 00:00:00 2001 From: darken Date: Tue, 14 Apr 2026 14:57:37 +0200 Subject: [PATCH] fix(settings): Gate Adaptive Audio Noise slider on Adaptive noise mode --- .../main/ui/devicesettings/DeviceSettingsScreen.kt | 11 +++++++++-- .../capod/pods/core/apple/aap/protocol/AapSetting.kt | 3 +++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/darken/capod/main/ui/devicesettings/DeviceSettingsScreen.kt b/app/src/main/java/eu/darken/capod/main/ui/devicesettings/DeviceSettingsScreen.kt index a5674928..93932e40 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/devicesettings/DeviceSettingsScreen.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/devicesettings/DeviceSettingsScreen.kt @@ -477,6 +477,7 @@ fun DeviceSettingsScreen( level = adaptiveNoise.level, onLevelChange = onAdaptiveAudioNoiseChange, enabled = enabled, + isAdaptiveMode = ancMode.current == AapSetting.AncMode.Value.ADAPTIVE, ) } if (features.hasNcOneAirpod && ncOneAirpod != null) { @@ -722,18 +723,24 @@ private fun AdaptiveNoiseSlider( level: Int, onLevelChange: (Int) -> Unit, enabled: Boolean, + isAdaptiveMode: Boolean, ) { var sliderValue by remember(level) { mutableIntStateOf(level) } + val subtitleRes = if (isAdaptiveMode) { + R.string.device_settings_adaptive_noise_description + } else { + R.string.device_settings_adaptive_noise_requires_adaptive + } SettingsSliderItem( icon = Icons.TwoTone.GraphicEq, title = stringResource(R.string.device_settings_adaptive_noise_label), - subtitle = stringResource(R.string.device_settings_adaptive_noise_description), + subtitle = stringResource(subtitleRes), value = sliderValue.toFloat(), onValueChange = { sliderValue = it.toInt() }, onValueChangeFinished = { onLevelChange(sliderValue) }, valueRange = 0f..100f, steps = 99, - enabled = enabled, + enabled = enabled && isAdaptiveMode, valueLabel = { "${it.toInt()}%" }, ) } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/aap/protocol/AapSetting.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/aap/protocol/AapSetting.kt index e81d328a..cf7da789 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/aap/protocol/AapSetting.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/aap/protocol/AapSetting.kt @@ -93,6 +93,9 @@ sealed class AapSetting { val enabled: Boolean, ) : AapSetting() + // Wire format matches librepods spec (tested on AirPods Pro 2). On AirPods Pro 3 the device + // accepts and echoes the value but no audible effect has been observed — may need additional + // enable packet or different handling. Requires more investigation. data class AdaptiveAudioNoise( val level: Int, ) : AapSetting() diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 11baee98..ac3fbcb1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -453,6 +453,7 @@ Volume of confirmation sounds and ringtones Adaptive Audio Noise How much environmental noise is allowed through + Requires Adaptive noise control Press Speed How quickly you need to press for multi-press gestures Default