/* Copyright (C) 2024 Severin von Wnuck-Lipinski
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see . */
package nodomain.freeyourgadget.gadgetbridge.devices.soundcore.motion300;
import android.os.Parcel;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.SeekBarPreference;
import java.util.Collections;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsCustomizer;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsHandler;
import nodomain.freeyourgadget.gadgetbridge.service.devices.soundcore.motion300.SoundcoreMotion300Protocol;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.*;
public class SoundcoreMotion300SettingsCustomizer implements DeviceSpecificSettingsCustomizer {
public static final Creator CREATOR = new Creator() {
@Override
public SoundcoreMotion300SettingsCustomizer createFromParcel(final Parcel in) {
return new SoundcoreMotion300SettingsCustomizer();
}
@Override
public SoundcoreMotion300SettingsCustomizer[] newArray(final int size) {
return new SoundcoreMotion300SettingsCustomizer[size];
}
};
@Override
public void onPreferenceChange(final Preference preference, final DeviceSpecificSettingsHandler handler) {
if (!preference.getKey().equals(PREF_SOUNDCORE_EQUALIZER_PRESET))
return;
CharSequence preset = ((ListPreference)preference).getEntry();
if (preset == null)
return;
Preference pref = handler.findPreference(PREF_SOUNDCORE_EQUALIZER_CUSTOM);
boolean customEnabled = preset.toString().equals(handler.getContext().getString(R.string.custom));
if (pref != null)
pref.setEnabled(customEnabled);
}
@Override
public void customizeSettings(final DeviceSpecificSettingsHandler handler, final Prefs prefs, final String rootKey) {
ListPreference equalizerDirection = handler.findPreference(PREF_SOUNDCORE_EQUALIZER_DIRECTION);
if (equalizerDirection != null) {
boolean enabled = prefs.getBoolean(PREF_SOUNDCORE_ADAPTIVE_DIRECTION, true);
equalizerDirection.setVisible(enabled);
}
Preference equalizerReset = handler.findPreference(PREF_SOUNDCORE_EQUALIZER_RESET);
if (equalizerReset != null)
equalizerReset.setOnPreferenceClickListener(pref -> resetEqualizer(handler));
}
private boolean resetEqualizer(final DeviceSpecificSettingsHandler handler) {
// Reset all bands to default settings
for (int i = 0; i < SoundcoreMotion300Protocol.EQUALIZER_PREFS_FREQ.length; i++) {
ListPreference prefFreq = handler.findPreference(SoundcoreMotion300Protocol.EQUALIZER_PREFS_FREQ[i]);
SeekBarPreference prefValue = handler.findPreference(SoundcoreMotion300Protocol.EQUALIZER_PREFS_VALUE[i]);
// Neutral configuration
prefValue.setValue(60);
// Default configuration: 80 Hz, 150 Hz, 300 Hz, 600 Hz, 1.2 kHz, 2.5 kHz, 5 kHz, 9 kHz, 13 kHz
if (i < 7)
prefFreq.setValue("7");
else if (i == 7)
prefFreq.setValue("6");
else if (i == 8)
prefFreq.setValue("1");
}
// Send updated equalizer configuration
handler.notifyPreferenceChanged(PREF_SOUNDCORE_EQUALIZER_BAND9_FREQ);
return true;
}
@Override
public Set getPreferenceKeysWithSummary() {
return Collections.emptySet();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(final Parcel dest, final int flags) {}
}