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