From b95ad084d6cbb7002eb9bfab9b3937819633f7fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Sun, 19 Apr 2026 16:16:09 +0100 Subject: [PATCH] Sony WH-1000XM3: Disable unsupported preferences when Audio HD enabled --- .../headphones/SonyHeadphonesCoordinator.java | 2 +- .../SonyHeadphonesSettingsCustomizer.java | 32 +++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + ...evicesettings_sony_headphones_audio_hd.xml | 1 + 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/headphones/SonyHeadphonesCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/headphones/SonyHeadphonesCoordinator.java index fcbf149260..414ad7daa3 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/headphones/SonyHeadphonesCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/headphones/SonyHeadphonesCoordinator.java @@ -145,8 +145,8 @@ public abstract class SonyHeadphonesCoordinator extends AbstractBLClassicDeviceC } addSettingsUnderHeader(deviceSpecificSettings, device, R.xml.devicesettings_header_other, new LinkedHashMap<>() {{ - put(SonyHeadphonesCapabilities.AudioSettingsOnlyOnSbcCodec, R.xml.devicesettings_sony_warning_wh1000xm3); put(SonyHeadphonesCapabilities.AudioLDAC, R.xml.devicesettings_sony_headphones_audio_hd); + put(SonyHeadphonesCapabilities.AudioSettingsOnlyOnSbcCodec, R.xml.devicesettings_sony_warning_wh1000xm3); put(SonyHeadphonesCapabilities.EqualizerSimple, R.xml.devicesettings_sony_headphones_equalizer); put(SonyHeadphonesCapabilities.EqualizerWithCustomBands, R.xml.devicesettings_sony_headphones_equalizer_with_custom_bands); put(SonyHeadphonesCapabilities.SoundPosition, R.xml.devicesettings_sony_headphones_sound_position); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/headphones/SonyHeadphonesSettingsCustomizer.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/headphones/SonyHeadphonesSettingsCustomizer.java index 3ac0a3c372..24b8a61748 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/headphones/SonyHeadphonesSettingsCustomizer.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/headphones/SonyHeadphonesSettingsCustomizer.java @@ -40,11 +40,13 @@ import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.os.Parcel; +import android.ranging.oob.DeviceHandle; import androidx.preference.EditTextPreference; import androidx.preference.ListPreference; import androidx.preference.MultiSelectListPreference; import androidx.preference.Preference; +import androidx.preference.SwitchPreferenceCompat; import com.google.android.material.dialog.MaterialAlertDialogBuilder; @@ -55,6 +57,7 @@ import java.util.Locale; import java.util.Set; import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsCustomizer; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsHandler; import nodomain.freeyourgadget.gadgetbridge.devices.sony.headphones.prefs.AmbientSoundControl; @@ -116,6 +119,35 @@ public class SonyHeadphonesSettingsCustomizer implements DeviceSpecificSettingsC } } } + + final Preference prefSonyWarningSbcCodec = handler.findPreference("pref_sony_warning_sbc_codec_1"); + if (prefSonyWarningSbcCodec != null) { + final SwitchPreferenceCompat prefAudioHd = handler.findPreference(DeviceSettingsPreferenceConst.PREF_SONY_AUDIO_HD); + if (prefAudioHd != null) { + prefAudioHd.setOnPreferenceChangeListener((ignored, newValue) -> { + handleScbWarning((boolean) newValue, handler); + return true; + }); + handleScbWarning(prefAudioHd.isChecked(), handler); + } + } + } + + private void handleScbWarning(final boolean hdEnabled, final DeviceSpecificSettingsHandler handler) { + final Preference prefSonyWarningSbcCodec = handler.findPreference("pref_sony_warning_sbc_codec_1"); + if (prefSonyWarningSbcCodec != null) { + prefSonyWarningSbcCodec.setVisible(hdEnabled); + } + final Preference[] prefsToToggle = new Preference[]{ + handler.findPreference(PREF_SONY_EQUALIZER), + handler.findPreference(PREF_SONY_SOUND_POSITION), + handler.findPreference(PREF_SONY_SURROUND_MODE) + }; + for (Preference preference : prefsToToggle) { + if (preference != null) { + preference.setEnabled(!hdEnabled); + } + } } @Override diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 29d1ca673a..9fa69e1111 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3385,6 +3385,7 @@ 16k Clear Bass Audio HD + Enable higher quality audio codec (LDAC) Audio Upsampling NC/Ambient Button Function Switch ambient sound diff --git a/app/src/main/res/xml/devicesettings_sony_headphones_audio_hd.xml b/app/src/main/res/xml/devicesettings_sony_headphones_audio_hd.xml index f73cb7e0c2..268c9a9e1b 100644 --- a/app/src/main/res/xml/devicesettings_sony_headphones_audio_hd.xml +++ b/app/src/main/res/xml/devicesettings_sony_headphones_audio_hd.xml @@ -5,5 +5,6 @@ android:icon="@drawable/ic_extension" android:key="pref_sony_audio_hd" android:layout="@layout/preference_checkbox" + android:summary="@string/sony_audio_hd_summary" android:title="@string/sony_audio_hd" />