Redmi Buds 8 Active: Add device support

This commit is contained in:
iNeedADoctor
2026-03-25 21:03:13 +01:00
parent 00dd7cb99b
commit d6a4aad588
11 changed files with 612 additions and 2 deletions
@@ -475,6 +475,18 @@ public class DeviceSettingsPreferenceConst {
public static final String PREF_REDMI_BUDS_6_ACTIVE_CONTROL_LONG_TAP_MODE_RIGHT="pref_redmi_buds_6_active_control_long_tap_mode_right";
public static final String PREF_REDMI_BUDS_6_ACTIVE_EQUALIZER_PRESET="pref_redmi_buds_6_active_equalizer_preset";
public static final String PREF_REDMI_BUDS_8_ACTIVE_CONTROL_SINGLE_TAP_LEFT="pref_redmi_buds_8_active_control_single_tap_left";
public static final String PREF_REDMI_BUDS_8_ACTIVE_CONTROL_SINGLE_TAP_RIGHT="pref_redmi_buds_8_active_control_single_tap_right";
public static final String PREF_REDMI_BUDS_8_ACTIVE_CONTROL_DOUBLE_TAP_LEFT="pref_redmi_buds_8_active_control_double_tap_left";
public static final String PREF_REDMI_BUDS_8_ACTIVE_CONTROL_DOUBLE_TAP_RIGHT="pref_redmi_buds_8_active_control_double_tap_right";
public static final String PREF_REDMI_BUDS_8_ACTIVE_CONTROL_TRIPLE_TAP_LEFT="pref_redmi_buds_8_active_control_triple_tap_left";
public static final String PREF_REDMI_BUDS_8_ACTIVE_CONTROL_TRIPLE_TAP_RIGHT="pref_redmi_buds_8_active_control_triple_tap_right";
public static final String PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_LEFT="pref_redmi_buds_8_active_control_long_tap_mode_left";
public static final String PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_RIGHT="pref_redmi_buds_8_active_control_long_tap_mode_right";
public static final String PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_SETTINGS_LEFT ="pref_redmi_buds_8_active_control_long_tap_settings_left";
public static final String PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_SETTINGS_RIGHT ="pref_redmi_buds_8_active_control_long_tap_settings_right";
public static final String PREF_REDMI_BUDS_8_ACTIVE_EQUALIZER_PRESET="pref_redmi_buds_8_active_equalizer_preset";
public static final String PREF_SONY_AUDIO_CODEC = "pref_sony_audio_codec";
public static final String PREF_SONY_PROTOCOL_VERSION = "pref_protocol_version";
public static final String PREF_SONY_ACTUAL_PROTOCOL_VERSION = "pref_actual_protocol_version";
@@ -813,10 +813,20 @@ public class DeviceSpecificSettingsFragment extends AbstractPreferenceFragment i
addPreferenceHandlerFor(PREF_REDMI_BUDS_6_ACTIVE_CONTROL_DOUBLE_TAP_RIGHT);
addPreferenceHandlerFor(PREF_REDMI_BUDS_6_ACTIVE_CONTROL_TRIPLE_TAP_LEFT);
addPreferenceHandlerFor(PREF_REDMI_BUDS_6_ACTIVE_CONTROL_TRIPLE_TAP_RIGHT);
addPreferenceHandlerFor(PREF_REDMI_BUDS_6_ACTIVE_CONTROL_LONG_TAP_MODE_LEFT );
addPreferenceHandlerFor(PREF_REDMI_BUDS_6_ACTIVE_CONTROL_LONG_TAP_MODE_RIGHT );
addPreferenceHandlerFor(PREF_REDMI_BUDS_6_ACTIVE_CONTROL_LONG_TAP_MODE_LEFT);
addPreferenceHandlerFor(PREF_REDMI_BUDS_6_ACTIVE_CONTROL_LONG_TAP_MODE_RIGHT);
addPreferenceHandlerFor(PREF_REDMI_BUDS_6_ACTIVE_EQUALIZER_PRESET);
addPreferenceHandlerFor(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_SINGLE_TAP_LEFT);
addPreferenceHandlerFor(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_SINGLE_TAP_RIGHT);
addPreferenceHandlerFor(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_DOUBLE_TAP_LEFT);
addPreferenceHandlerFor(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_DOUBLE_TAP_RIGHT);
addPreferenceHandlerFor(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_TRIPLE_TAP_LEFT);
addPreferenceHandlerFor(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_TRIPLE_TAP_RIGHT);
addPreferenceHandlerFor(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_LEFT);
addPreferenceHandlerFor(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_RIGHT);
addPreferenceHandlerFor(PREF_REDMI_BUDS_8_ACTIVE_EQUALIZER_PRESET);
addPreferenceHandlerFor(PREF_SONY_AMBIENT_SOUND_CONTROL);
addPreferenceHandlerFor(PREF_SONY_AMBIENT_SOUND_CONTROL_BUTTON_MODE);
addPreferenceHandlerFor(PREF_SONY_FOCUS_VOICE);
@@ -0,0 +1,46 @@
package nodomain.freeyourgadget.gadgetbridge.devices.redmibuds;
import androidx.annotation.NonNull;
import java.util.regex.Pattern;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettings;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsCustomizer;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsScreen;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.redmibuds.RedmiBuds8ActiveDeviceSupport;
public class RedmiBuds8ActiveCoordinator extends AbstractRedmiBudsCoordinator {
@Override
public int getDeviceNameResource() {
return R.string.devicetype_redmi_buds_8_active;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("REDMI Buds 8 Active");
}
@NonNull
@Override
public Class<? extends DeviceSupport> getDeviceSupportClass(final GBDevice device) {
return RedmiBuds8ActiveDeviceSupport.class;
}
@Override
public DeviceSpecificSettings getDeviceSpecificSettings(final GBDevice device) {
final DeviceSpecificSettings deviceSpecificSettings = new DeviceSpecificSettings();
deviceSpecificSettings.addRootScreen(R.xml.devicesettings_redmibuds8active_sound);
deviceSpecificSettings.addRootScreen(R.xml.devicesettings_redmibuds8active_gestures);
deviceSpecificSettings.addSubScreen(DeviceSpecificSettingsScreen.CALLS_AND_NOTIFICATIONS);
return deviceSpecificSettings;
}
@Override
public DeviceSpecificSettingsCustomizer getDeviceSpecificSettingsCustomizer(final GBDevice device) {
return new RedmiBuds8ActiveSettingsCustomizer(device);
}
}
@@ -0,0 +1,84 @@
package nodomain.freeyourgadget.gadgetbridge.devices.redmibuds;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import java.util.Arrays;
import java.util.List;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsHandler;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class RedmiBuds8ActiveSettingsCustomizer extends RedmiBudsSettingsCustomizer {
public RedmiBuds8ActiveSettingsCustomizer(final GBDevice device) {
super(device);
}
@Override
public void customizeSettings(DeviceSpecificSettingsHandler handler, Prefs prefs, String rootKey) {
final ListPreference longPressLeft = handler.findPreference(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_LEFT);
final ListPreference longPressRight = handler.findPreference(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_RIGHT);
final Preference longPressLeftSettings = handler.findPreference(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_SETTINGS_LEFT);
final Preference longPressRightSettings = handler.findPreference(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_SETTINGS_RIGHT);
final ListPreference equalizerPreset = handler.findPreference(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_EQUALIZER_PRESET);
if (longPressLeft != null) {
final Preference.OnPreferenceChangeListener longPressLeftButtonListener = (preference, newVal) -> {
String mode = newVal.toString();
if (longPressLeftSettings != null) {
longPressLeftSettings.setVisible(mode.equals("6"));
}
return true;
};
longPressLeftButtonListener.onPreferenceChange(longPressLeft, prefs.getString(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_LEFT, "6"));
handler.addPreferenceHandlerFor(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_LEFT, longPressLeftButtonListener);
}
if (longPressRight != null) {
final Preference.OnPreferenceChangeListener longPressRightButtonListener = (preference, newVal) -> {
String mode = newVal.toString();
if (longPressRightSettings != null) {
longPressRightSettings.setVisible(mode.equals("6"));
}
return true;
};
longPressRightButtonListener.onPreferenceChange(longPressRight, prefs.getString(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_RIGHT, "6"));
handler.addPreferenceHandlerFor(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_RIGHT, longPressRightButtonListener);
}
if (equalizerPreset != null) {
final Preference.OnPreferenceChangeListener equalizerPresetListener = (preference, newVal) -> {
final List<Preference> prefsToDisable = Arrays.asList(
handler.findPreference(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_62),
handler.findPreference(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_125),
handler.findPreference(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_250),
handler.findPreference(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_500),
handler.findPreference(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_1k),
handler.findPreference(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_2k),
handler.findPreference(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_4k),
handler.findPreference(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_8k),
handler.findPreference(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_12k),
handler.findPreference(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_16k)
);
String mode = newVal.toString();
for (Preference pref : prefsToDisable) {
if (pref != null) {
pref.setEnabled(mode.equals("10"));
}
}
return true;
};
equalizerPresetListener.onPreferenceChange(equalizerPreset, prefs.getString(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_EQUALIZER_PRESET, "0"));
handler.addPreferenceHandlerFor(DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_EQUALIZER_PRESET, equalizerPresetListener);
}
}
}
@@ -378,6 +378,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.redmibuds.RedmiBuds4ActiveCo
import nodomain.freeyourgadget.gadgetbridge.devices.redmibuds.RedmiBuds5ProCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.redmibuds.RedmiBuds6ActiveCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.redmibuds.RedmiBuds6ProCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.redmibuds.RedmiBuds8ActiveCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.roidmi.Roidmi1Coordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.roidmi.Roidmi3Coordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.sbm_67.SanitasSBM67Coordinator;
@@ -530,6 +531,7 @@ public enum DeviceType {
REDMIBUDS5PRO(RedmiBuds5ProCoordinator.class),
REDMIBUDS6ACTIVE(RedmiBuds6ActiveCoordinator.class),
REDMIBUDS6PRO(RedmiBuds6ProCoordinator.class),
REDMIBUDS8ACTIVE(RedmiBuds8ActiveCoordinator.class),
REDMIWATCH3ACTIVE(RedmiWatch3ActiveCoordinator.class),
REDMIWATCH3(RedmiWatch3Coordinator.class),
REDMISMARTBAND2(RedmiSmartBand2Coordinator.class),
@@ -0,0 +1,10 @@
package nodomain.freeyourgadget.gadgetbridge.service.devices.redmibuds;
import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceIoThread;
public class RedmiBuds8ActiveDeviceSupport extends RedmiBudsDeviceSupport {
@Override
protected RedmiBuds8ActiveProtocol createDeviceProtocol() {
return new RedmiBuds8ActiveProtocol(getDevice());
}
}
@@ -0,0 +1,158 @@
package nodomain.freeyourgadget.gadgetbridge.service.devices.redmibuds;
// EQ_PRESET
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_EQUALIZER_PRESET;
// EQ_CURVE
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_62;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_125;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_250;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_500;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_1k;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_2k;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_4k;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_8k;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_12k;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_16k;
// DOUBLE_CONNECTION
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_DOUBLE_CONNECTION;
// ADAPTIVE_SOUND
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_5_PRO_ADAPTIVE_SOUND;
// SINGLE_TAP
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_SINGLE_TAP_LEFT;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_SINGLE_TAP_RIGHT;
// DOUBLE_TAP
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_DOUBLE_TAP_LEFT;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_DOUBLE_TAP_RIGHT;
// TRIPLE_TAP
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_TRIPLE_TAP_LEFT;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_TRIPLE_TAP_RIGHT;
// LONG_TAP
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_LEFT;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_RIGHT;
import static nodomain.freeyourgadget.gadgetbridge.util.GB.hexdump;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import nodomain.freeyourgadget.gadgetbridge.devices.redmibuds.prefs.Configuration;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.devices.redmibuds.prefs.Gestures.InteractionType;
import nodomain.freeyourgadget.gadgetbridge.devices.redmibuds.prefs.Gestures.Position;
import nodomain.freeyourgadget.gadgetbridge.devices.redmibuds.prefs.Configuration.Config;
public class RedmiBuds8ActiveProtocol extends RedmiBudsProtocol {
private static final Logger LOG = LoggerFactory.getLogger(RedmiBuds8ActiveProtocol.class);
protected RedmiBuds8ActiveProtocol(GBDevice device) {
super(device);
}
@Override
public byte[] encodeSendConfiguration(String config) {
switch (config) {
// GESTURE
case PREF_REDMI_BUDS_8_ACTIVE_CONTROL_SINGLE_TAP_LEFT:
return encodeSetGesture(config, InteractionType.SINGLE, Position.LEFT);
case PREF_REDMI_BUDS_8_ACTIVE_CONTROL_SINGLE_TAP_RIGHT:
return encodeSetGesture(config, InteractionType.SINGLE, Position.RIGHT);
case PREF_REDMI_BUDS_8_ACTIVE_CONTROL_DOUBLE_TAP_LEFT:
return encodeSetGesture(config, InteractionType.DOUBLE, Position.LEFT);
case PREF_REDMI_BUDS_8_ACTIVE_CONTROL_DOUBLE_TAP_RIGHT:
return encodeSetGesture(config, InteractionType.DOUBLE, Position.RIGHT);
case PREF_REDMI_BUDS_8_ACTIVE_CONTROL_TRIPLE_TAP_LEFT:
return encodeSetGesture(config, InteractionType.TRIPLE, Position.LEFT);
case PREF_REDMI_BUDS_8_ACTIVE_CONTROL_TRIPLE_TAP_RIGHT:
return encodeSetGesture(config, InteractionType.TRIPLE, Position.RIGHT);
case PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_LEFT:
return encodeSetGesture(config, InteractionType.LONG, Position.LEFT);
case PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_RIGHT:
return encodeSetGesture(config, InteractionType.LONG, Position.RIGHT);
// EQ_PRESET
case PREF_REDMI_BUDS_8_ACTIVE_EQUALIZER_PRESET:
return encodeSetIntegerConfig(config, Config.EQ_PRESET);
// EQ_CURVE
case PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_62:
case PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_125:
case PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_250:
case PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_500:
case PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_1k:
case PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_2k:
case PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_4k:
case PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_8k:
case PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_12k:
case PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_16k:
return encodeSetCustomEqualizer();
// DOUBLE_CONNECTION
case PREF_REDMI_BUDS_5_PRO_DOUBLE_CONNECTION:
return encodeSetBooleanConfig(config, Config.DOUBLE_CONNECTION);
// ADAPTIVE_SOUND
case PREF_REDMI_BUDS_5_PRO_ADAPTIVE_SOUND:
return encodeSetBooleanConfig(config, Config.ADAPTIVE_SOUND);
default:
LOG.debug("Unsupported config: {}", config);
return null;
}
}
@Override
public void decodeGetConfig(byte[] configPayload) {
if (configPayload.length < 3)
return;
SharedPreferences preferences = getDevicePrefs().getPreferences();
SharedPreferences.Editor editor = preferences.edit();
Configuration.Config config = Configuration.Config.fromCode(configPayload[2]);
switch (config) {
case GESTURES:
// SINGLE_TAP
editor.putString(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_SINGLE_TAP_LEFT, Integer.toString(configPayload[4]));
editor.putString(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_SINGLE_TAP_RIGHT, Integer.toString(configPayload[5]));
// DOUBLE_TAP
editor.putString(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_DOUBLE_TAP_LEFT, Integer.toString(configPayload[7]));
editor.putString(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_DOUBLE_TAP_RIGHT, Integer.toString(configPayload[8]));
// TRIPLE_TAP
editor.putString(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_TRIPLE_TAP_LEFT, Integer.toString(configPayload[10]));
editor.putString(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_TRIPLE_TAP_RIGHT, Integer.toString(configPayload[11]));
// LONG_TAP
editor.putString(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_LEFT, Integer.toString(configPayload[13]));
editor.putString(PREF_REDMI_BUDS_8_ACTIVE_CONTROL_LONG_TAP_MODE_RIGHT, Integer.toString(configPayload[14]));
break;
case EQ_PRESET:
editor.putString(PREF_REDMI_BUDS_8_ACTIVE_EQUALIZER_PRESET, Integer.toString(configPayload[3]));
break;
case EQ_CURVE:
editor.putString(PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_62, Integer.toString(configPayload[12] & 0xFF));
editor.putString(PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_125, Integer.toString(configPayload[15] & 0xFF));
editor.putString(PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_250, Integer.toString(configPayload[18] & 0xFF));
editor.putString(PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_500, Integer.toString(configPayload[21] & 0xFF));
editor.putString(PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_1k, Integer.toString(configPayload[24] & 0xFF));
editor.putString(PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_2k, Integer.toString(configPayload[27] & 0xFF));
editor.putString(PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_4k, Integer.toString(configPayload[30] & 0xFF));
editor.putString(PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_8k, Integer.toString(configPayload[33] & 0xFF));
editor.putString(PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_12k, Integer.toString(configPayload[36] & 0xFF));
editor.putString(PREF_REDMI_BUDS_5_PRO_EQUALIZER_BAND_16k, Integer.toString(configPayload[39] & 0xFF));
break;
case DOUBLE_CONNECTION:
editor.putBoolean(PREF_REDMI_BUDS_5_PRO_DOUBLE_CONNECTION, configPayload[3] == 0x01);
break;
case ADAPTIVE_SOUND:
editor.putBoolean(PREF_REDMI_BUDS_5_PRO_ADAPTIVE_SOUND, configPayload[3] == 0x01);
break;
default:
LOG.debug("Unhandled device update: {}", hexdump(configPayload));
}
editor.apply();
}
}
+62
View File
@@ -4014,6 +4014,68 @@
<item>7</item>
</string-array>
<string-array name="redmi_buds_8_active_single_button_function_names">
<item>@string/none</item>
<item>@string/pref_media_playpause</item>
<item>@string/pref_media_previous</item>
<item>@string/pref_media_next</item>
<item>@string/pref_media_volumeup</item>
<item>@string/pref_media_volumedown</item>
</string-array>
<string-array name="redmi_buds_8_active_single_button_function_values">
<item>8</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
</string-array>
<string-array name="redmi_buds_8_active_button_function_names">
<item>@string/pref_media_playpause</item>
<item>@string/pref_media_previous</item>
<item>@string/pref_media_next</item>
<item>@string/pref_media_volumeup</item>
<item>@string/pref_media_volumedown</item>
</string-array>
<string-array name="redmi_buds_8_active_button_function_values">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
</string-array>
<string-array name="redmi_buds_8_active_long_button_mode_names">
<item>@string/none</item>
<item>@string/pref_title_touch_voice_assistant</item>
</string-array>
<string-array name="redmi_buds_8_active_long_button_mode_values">
<item>8</item>
<item>0</item>
</string-array>
<string-array name="redmi_buds_8_active_equalizer_presets_names">
<item>@string/redmi_buds_5_pro_anc_balanced</item>
<item>@string/redmi_buds_5_pro_equalizer_preset_treble</item>
<item>@string/redmi_buds_5_pro_equalizer_preset_bass</item>
<item>@string/redmi_buds_5_pro_equalizer_preset_voice</item>
<item>@string/redmi_buds_6_active_equalizer_preset_volume</item>
<item>@string/redmi_buds_5_pro_equalizer_preset_custom</item>
</string-array>
<string-array name="redmi_buds_8_active_equalizer_presets_values">
<item>21</item>
<item>6</item>
<item>5</item>
<item>1</item>
<item>7</item>
<item>10</item>
</string-array>
<string-array name="earfun_ambient_sound_control_names">
<item>@string/sony_ambient_sound_off</item>
<item>@string/sony_ambient_sound_noise_cancelling</item>
+1
View File
@@ -2179,6 +2179,7 @@
<string name="devicetype_redmi_buds_5_pro" translatable="false">Redmi Buds 5 Pro</string>
<string name="devicetype_redmi_buds_6_active" translatable="false">Redmi Buds 6 Active</string>
<string name="devicetype_redmi_buds_6_pro" translatable="false">Redmi Buds 6 Pro</string>
<string name="devicetype_redmi_buds_8_active" translatable="false">Redmi Buds 8 Active</string>
<string name="devicetype_redmi_smart_band_2" translatable="false">Redmi Smart Band 2</string>
<string name="devicetype_redmi_smart_band_3" translatable="false">Redmi Smart Band 3</string>
<string name="devicetype_redmi_watch_2" translatable="false">Redmi Watch 2</string>
@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory
android:key="pref_key_header_redmibuds8active_system"
android:title="@string/pref_header_system">
<PreferenceScreen
android:icon="@drawable/ic_touch"
android:key="pref_screen_redmibuds8active_touch_options"
android:persistent="false"
android:title="@string/prefs_galaxy_touch_options">
<PreferenceCategory android:title="@string/single_tap">
<ListPreference
android:entries="@array/redmi_buds_8_active_single_button_function_names"
android:entryValues="@array/redmi_buds_8_active_single_button_function_values"
android:icon="@drawable/ic_filter_1"
android:defaultValue="8"
android:key="pref_redmi_buds_8_active_control_single_tap_left"
app:useSimpleSummaryProvider="true"
android:title="@string/prefs_left" />
<ListPreference
android:entries="@array/redmi_buds_8_active_single_button_function_names"
android:entryValues="@array/redmi_buds_8_active_single_button_function_values"
android:defaultValue="8"
android:key="pref_redmi_buds_8_active_control_single_tap_right"
app:useSimpleSummaryProvider="true"
android:title="@string/prefs_right" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/double_tap">
<ListPreference
android:entries="@array/redmi_buds_8_active_button_function_names"
android:entryValues="@array/redmi_buds_8_active_button_function_values"
android:icon="@drawable/ic_filter_2"
android:defaultValue="1"
android:key="pref_redmi_buds_8_active_control_double_tap_left"
app:useSimpleSummaryProvider="true"
android:title="@string/prefs_left" />
<ListPreference
android:entries="@array/redmi_buds_8_active_button_function_names"
android:entryValues="@array/redmi_buds_8_active_button_function_values"
android:defaultValue="1"
android:key="pref_redmi_buds_8_active_control_double_tap_right"
app:useSimpleSummaryProvider="true"
android:title="@string/prefs_right" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/triple_tap">
<ListPreference
android:entries="@array/redmi_buds_8_active_button_function_names"
android:entryValues="@array/redmi_buds_8_active_button_function_values"
android:icon="@drawable/ic_filter_3"
android:defaultValue="3"
android:key="pref_redmi_buds_8_active_control_triple_tap_left"
app:useSimpleSummaryProvider="true"
android:title="@string/prefs_left" />
<ListPreference
android:entries="@array/redmi_buds_8_active_button_function_names"
android:entryValues="@array/redmi_buds_8_active_button_function_values"
android:defaultValue="3"
android:key="pref_redmi_buds_8_active_control_triple_tap_right"
app:useSimpleSummaryProvider="true"
android:title="@string/prefs_right" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/long_press">
<ListPreference
android:entries="@array/redmi_buds_8_active_long_button_mode_names"
android:entryValues="@array/redmi_buds_8_active_long_button_mode_values"
android:icon="@drawable/ic_touch"
android:defaultValue="0"
android:key="pref_redmi_buds_8_active_control_long_tap_mode_left"
app:useSimpleSummaryProvider="true"
android:title="@string/sony_button_mode_left" />
<ListPreference
android:entries="@array/redmi_buds_8_active_long_button_mode_names"
android:entryValues="@array/redmi_buds_8_active_long_button_mode_values"
android:icon="@drawable/ic_touch"
android:defaultValue="0"
android:key="pref_redmi_buds_8_active_control_long_tap_mode_right"
app:useSimpleSummaryProvider="true"
android:title="@string/sony_button_mode_right" />
</PreferenceCategory>
</PreferenceScreen>
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="pref_redmi_buds_5_pro_double_connection"
android:summary="@string/redmi_buds_5_pro_double_connection_description"
android:title="@string/redmi_buds_5_pro_double_connection"/>
</PreferenceCategory>
</androidx.preference.PreferenceScreen>
@@ -0,0 +1,130 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory
android:key="pref_key_header_redmibuds8active_sound"
android:title="@string/pref_header_sound">
<PreferenceScreen
android:icon="@drawable/ic_graphic_eq"
android:key="pref_sony_equalizer"
android:persistent="false"
android:title="@string/pref_header_equalizer">
<ListPreference
android:entries="@array/redmi_buds_8_active_equalizer_presets_names"
android:entryValues="@array/redmi_buds_8_active_equalizer_presets_values"
android:icon="@drawable/ic_graphic_eq"
android:defaultValue="21"
android:key="pref_redmi_buds_8_active_equalizer_preset"
app:useSimpleSummaryProvider="true"
android:title="@string/prefs_equalizer_preset" />
<PreferenceCategory
android:key="pref_key_header_redmibuds8active_custom_equalizer"
android:title="@string/soundcore_equalizer_custom_title">
<ListPreference
android:entries="@array/redmi_buds_5_pro_equalizer_offsets_names"
android:entryValues="@array/redmi_buds_5_pro_equalizer_offsets_values"
android:icon="@drawable/ic_graphic_eq"
android:defaultValue="0"
android:key="pref_redmi_buds_5_pro_equalizer_band_62"
app:useSimpleSummaryProvider="true"
android:title="@string/redmi_buds_5_pro_equalizer_band_62" />
<ListPreference
android:entries="@array/redmi_buds_5_pro_equalizer_offsets_names"
android:entryValues="@array/redmi_buds_5_pro_equalizer_offsets_values"
android:icon="@drawable/ic_graphic_eq"
android:defaultValue="0"
android:key="pref_redmi_buds_5_pro_equalizer_band_125"
app:useSimpleSummaryProvider="true"
android:title="@string/redmi_buds_5_pro_equalizer_band_125" />
<ListPreference
android:entries="@array/redmi_buds_5_pro_equalizer_offsets_names"
android:entryValues="@array/redmi_buds_5_pro_equalizer_offsets_values"
android:icon="@drawable/ic_graphic_eq"
android:defaultValue="0"
android:key="pref_redmi_buds_5_pro_equalizer_band_250"
app:useSimpleSummaryProvider="true"
android:title="@string/redmi_buds_5_pro_equalizer_band_250" />
<ListPreference
android:entries="@array/redmi_buds_5_pro_equalizer_offsets_names"
android:entryValues="@array/redmi_buds_5_pro_equalizer_offsets_values"
android:icon="@drawable/ic_graphic_eq"
android:defaultValue="0"
android:key="pref_redmi_buds_5_pro_equalizer_band_500"
app:useSimpleSummaryProvider="true"
android:title="@string/redmi_buds_5_pro_equalizer_band_500" />
<ListPreference
android:entries="@array/redmi_buds_5_pro_equalizer_offsets_names"
android:entryValues="@array/redmi_buds_5_pro_equalizer_offsets_values"
android:icon="@drawable/ic_graphic_eq"
android:defaultValue="0"
android:key="pref_redmi_buds_5_pro_equalizer_band_1k"
app:useSimpleSummaryProvider="true"
android:title="@string/redmi_buds_5_pro_equalizer_band_1k" />
<ListPreference
android:entries="@array/redmi_buds_5_pro_equalizer_offsets_names"
android:entryValues="@array/redmi_buds_5_pro_equalizer_offsets_values"
android:icon="@drawable/ic_graphic_eq"
android:defaultValue="0"
android:key="pref_redmi_buds_5_pro_equalizer_band_2k"
app:useSimpleSummaryProvider="true"
android:title="@string/redmi_buds_5_pro_equalizer_band_2k" />
<ListPreference
android:entries="@array/redmi_buds_5_pro_equalizer_offsets_names"
android:entryValues="@array/redmi_buds_5_pro_equalizer_offsets_values"
android:icon="@drawable/ic_graphic_eq"
android:defaultValue="0"
android:key="pref_redmi_buds_5_pro_equalizer_band_4k"
app:useSimpleSummaryProvider="true"
android:title="@string/redmi_buds_5_pro_equalizer_band_4k" />
<ListPreference
android:entries="@array/redmi_buds_5_pro_equalizer_offsets_names"
android:entryValues="@array/redmi_buds_5_pro_equalizer_offsets_values"
android:icon="@drawable/ic_graphic_eq"
android:defaultValue="0"
android:key="pref_redmi_buds_5_pro_equalizer_band_8k"
app:useSimpleSummaryProvider="true"
android:title="@string/redmi_buds_5_pro_equalizer_band_8k" />
<ListPreference
android:entries="@array/redmi_buds_5_pro_equalizer_offsets_names"
android:entryValues="@array/redmi_buds_5_pro_equalizer_offsets_values"
android:icon="@drawable/ic_graphic_eq"
android:defaultValue="0"
android:key="pref_redmi_buds_5_pro_equalizer_band_12k"
app:useSimpleSummaryProvider="true"
android:title="@string/redmi_buds_5_pro_equalizer_band_12k" />
<ListPreference
android:entries="@array/redmi_buds_5_pro_equalizer_offsets_names"
android:entryValues="@array/redmi_buds_5_pro_equalizer_offsets_values"
android:icon="@drawable/ic_graphic_eq"
android:defaultValue="0"
android:key="pref_redmi_buds_5_pro_equalizer_band_16k"
app:useSimpleSummaryProvider="true"
android:title="@string/redmi_buds_5_pro_equalizer_band_16k" />
</PreferenceCategory>
</PreferenceScreen>
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="pref_redmi_buds_5_pro_adaptive_sound"
android:layout="@layout/preference_checkbox"
android:summary="@string/redmi_buds_5_pro_adaptive_sound_description"
android:title="@string/redmi_buds_5_pro_adaptive_sound" />
</PreferenceCategory>
</androidx.preference.PreferenceScreen>