Fossil Q: Move vibration strength preference into device prefs

This commit is contained in:
Arjan Schrijver
2026-04-05 14:18:10 +02:00
committed by Arjan Schrijver
parent d243b82761
commit 65b95a9eeb
8 changed files with 20 additions and 101 deletions
@@ -284,30 +284,6 @@ public class QHybridConfigActivity extends AbstractGBActivity {
LocalBroadcastManager.getInstance(QHybridConfigActivity.this).sendBroadcast(notificationIntent);
}
});
SeekBar vibeBar = findViewById(R.id.vibrationStrengthBar);
vibeBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int start;
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
start = seekBar.getProgress();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
int progress;
if ((progress = seekBar.getProgress()) == start) return;
String[] values = {"25", "50", "100"};
device.addDeviceInfo(new GenericItem(QHybridSupport.ITEM_VIBRATION_STRENGTH, values[progress]));
Intent intent = new Intent(QHybridSupport.QHYBRID_COMMAND_UPDATE_SETTINGS);
intent.putExtra("EXTRA_SETTING", QHybridSupport.ITEM_VIBRATION_STRENGTH);
LocalBroadcastManager.getInstance(QHybridConfigActivity.this).sendBroadcast(intent);
}
});
if (device.getType() == DeviceType.FOSSILQHYBRID && device.isInitialized() && device.getFirmwareVersion().charAt(2) == '0') {
updateSettings();
@@ -350,17 +326,6 @@ public class QHybridConfigActivity extends AbstractGBActivity {
@Override
public void run() {
final String extendedVibrationSupport = getDeviceInfoDetails(QHybridSupport.ITEM_EXTENDED_VIBRATION_SUPPORT);
final String vibrationStrength = getDeviceInfoDetails(QHybridSupport.ITEM_VIBRATION_STRENGTH);
if ("true".equals(extendedVibrationSupport) && !vibrationStrength.isEmpty()) {
final int strengthProgress = (int) (Math.log(Double.parseDouble(vibrationStrength) / 25) / Math.log(2));
setSettingsEnabled(true);
SeekBar seekBar = findViewById(R.id.vibrationStrengthBar);
seekBar.setProgress(strengthProgress);
} else {
findViewById(R.id.vibrationStrengthBar).setEnabled(false);
findViewById(R.id.vibrationStrengthLayout).setAlpha(0.5f);
}
CheckBox activityHandCheckbox = findViewById(R.id.checkBoxUserActivityHand);
if (getDeviceInfoDetails(QHybridSupport.ITEM_HAS_ACTIVITY_HAND).equals("true")) {
if (getDeviceInfoDetails(QHybridSupport.ITEM_USE_ACTIVITY_HAND).equals("true")) {
@@ -369,18 +334,11 @@ public class QHybridConfigActivity extends AbstractGBActivity {
activityHandCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(@NonNull CompoundButton buttonView, boolean checked) {
if (!getDeviceInfoDetails(QHybridSupport.ITEM_STEP_GOAL).equals("1000000")) {
new MaterialAlertDialogBuilder(QHybridConfigActivity.this)
.setMessage(getString(R.string.qhybrid_prompt_million_steps))
.setPositiveButton("ok", null)
.show();
buttonView.setChecked(false);
return;
}
device.addDeviceInfo(new GenericItem(QHybridSupport.ITEM_USE_ACTIVITY_HAND, String.valueOf(checked)));
Intent intent = new Intent(QHybridSupport.QHYBRID_COMMAND_UPDATE_SETTINGS);
intent.putExtra("EXTRA_SETTING", QHybridSupport.ITEM_USE_ACTIVITY_HAND);
LocalBroadcastManager.getInstance(QHybridConfigActivity.this).sendBroadcast(intent);
}
});
} else {
@@ -266,6 +266,8 @@ public class QHybridCoordinator extends AbstractBLEDeviceCoordinator {
final DeviceSpecificSettings deviceSpecificSettings = new DeviceSpecificSettings();
if (!isHybridHR(device)) {
deviceSpecificSettings.addRootScreen(R.xml.devicesettings_fossilqhybrid_legacy);
deviceSpecificSettings.addRootScreen(R.xml.devicesettings_fossilhybridhr_vibration);
// deviceSpecificSettings.addRootScreen(R.xml.devicesettings_fossilhybridhr_calibration); // TODO
return deviceSpecificSettings;
}
final List<Integer> generic = deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.GENERIC);
@@ -123,9 +123,7 @@ public class QHybridSupport extends QHybridBaseSupport {
public static final String QHYBRID_EVENT_MULTI_BUTTON_PRESS = "nodomain.freeyourgadget.gadgetbridge.Q_MULTI_BUTTON_PRESSED";
public static final String QHYBRID_EVENT_COMMUTE_MENU = "nodomain.freeyourgadget.gadgetbridge.Q_COMMUTE_MENU";
public static final String ITEM_STEP_GOAL = "STEP_GOAL: ";
public static final String ITEM_STEP_COUNT = "STEP_COUNT: ";
public static final String ITEM_VIBRATION_STRENGTH = "VIBRATION_STRENGTH: ";
public static final String ITEM_ACTIVITY_POINT = "ACTIVITY_POINT: ";
public static final String ITEM_EXTENDED_VIBRATION_SUPPORT = "EXTENDED_VIBRATION: ";
public static final String ITEM_HAS_ACTIVITY_HAND = "HAS_ACTIVITY_HAND: ";
@@ -259,24 +257,6 @@ public class QHybridSupport extends QHybridBaseSupport {
break;
}
switch (newSetting) {
case ITEM_VIBRATION_STRENGTH: {
final ItemWithDetails itemVibrationStrength = gbDevice.getDeviceInfo(ITEM_VIBRATION_STRENGTH);
if (itemVibrationStrength == null) {
logger.error("itemVibrationStrength is null");
break;
}
watchAdapter.setVibrationStrength(Short.parseShort(itemVibrationStrength.getDetails()));
break;
}
case ITEM_STEP_GOAL: {
final ItemWithDetails itemStepGoal = gbDevice.getDeviceInfo(ITEM_STEP_GOAL);
if (itemStepGoal == null) {
logger.error("itemStepGoal is null");
break;
}
watchAdapter.setStepGoal(Integer.parseInt(itemStepGoal.getDetails()));
break;
}
case ITEM_USE_ACTIVITY_HAND: {
final ItemWithDetails itemUseActivityHand = gbDevice.getDeviceInfo(ITEM_USE_ACTIVITY_HAND);
if (itemUseActivityHand == null) {
@@ -18,7 +18,6 @@
package nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil;
import static nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport.ITEM_TIMEZONE_OFFSET;
import static nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport.ITEM_VIBRATION_STRENGTH;
import static nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport.QHYBRID_EVENT_BUTTON_PRESS;
import static nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport.QHYBRID_EVENT_MULTI_BUTTON_PRESS;
@@ -31,7 +30,6 @@ import android.os.Handler;
import android.os.Looper;
import android.widget.Toast;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.slf4j.Logger;
@@ -51,6 +49,7 @@ import java.util.concurrent.atomic.AtomicLong;
import nodomain.freeyourgadget.gadgetbridge.BuildConfig;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
import nodomain.freeyourgadget.gadgetbridge.devices.qhybrid.HybridHRActivitySampleProvider;
@@ -92,6 +91,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.mis
import nodomain.freeyourgadget.gadgetbridge.util.AlarmUtils;
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
import nodomain.freeyourgadget.gadgetbridge.util.UriHelper;
public class FossilWatchAdapter extends WatchAdapter {
@@ -266,7 +266,6 @@ public class FossilWatchAdapter extends WatchAdapter {
GBDevice device = getDeviceSupport().getDevice();
device.addDeviceInfo(new GenericItem(ITEM_VIBRATION_STRENGTH, String.valueOf(vibrationStrength)));
device.addDeviceInfo(new GenericItem(ITEM_TIMEZONE_OFFSET, String.valueOf(timezoneOffset)));
queueWrite(new ConfigurationPutRequest(new ConfigurationPutRequest.ConfigItem[]{
@@ -404,16 +403,18 @@ public class FossilWatchAdapter extends WatchAdapter {
}, false);
}
private void setVibrationStrengthFromConfig() {
Prefs prefs = new Prefs(getDeviceSpecificPreferences());
int vibrationStrengh = prefs.getInt(DeviceSettingsPreferenceConst.PREF_VIBRATION_STRENGH_PERCENTAGE, 2);
if (vibrationStrengh > 0) {
vibrationStrengh = (vibrationStrengh + 1) * 25; // Seems 0,50,75,100 are working...
}
setVibrationStrength((short) (vibrationStrengh));
}
@Override
public void setVibrationStrength(short strength) {
getDeviceSpecificPreferences()
.edit()
.putInt(CONFIG_ITEM_VIBRATION_STRENGTH, (byte) strength)
.apply();
ConfigurationPutRequest.ConfigItem vibrationItem = new ConfigurationPutRequest.VibrationStrengthConfigItem((byte) strength);
queueWrite(
new ConfigurationPutRequest(new ConfigurationPutRequest.ConfigItem[]{vibrationItem}, this) {
@Override
@@ -631,6 +632,7 @@ public class FossilWatchAdapter extends WatchAdapter {
@Override
public void onSendConfiguration(String config) {
setStepGoal(new ActivityUser().getStepsGoal());
setVibrationStrengthFromConfig();
}
@Override
@@ -18,8 +18,6 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.mis
import static nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport.ITEM_ACTIVITY_POINT;
import static nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport.ITEM_STEP_COUNT;
import static nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport.ITEM_STEP_GOAL;
import static nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport.ITEM_VIBRATION_STRENGTH;
import static nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport.QHYBRID_EVENT_BUTTON_PRESS;
import static nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport.QHYBRID_EVENT_FILE_UPLOADED;
@@ -232,10 +230,10 @@ public class MisfitWatchAdapter extends WatchAdapter {
request.handleResponse(characteristic, values);
if (request instanceof GetStepGoalRequest) {
gbDevice.addDeviceInfo(new GenericItem(ITEM_STEP_GOAL, String.valueOf(((GetStepGoalRequest) request).stepGoal)));
// gbDevice.addDeviceInfo(new GenericItem(ITEM_STEP_GOAL, String.valueOf(((GetStepGoalRequest) request).stepGoal)));
} else if (request instanceof GetVibrationStrengthRequest) {
int strength = ((GetVibrationStrengthRequest) request).strength;
gbDevice.addDeviceInfo(new GenericItem(ITEM_VIBRATION_STRENGTH, String.valueOf(strength)));
// gbDevice.addDeviceInfo(new GenericItem(ITEM_VIBRATION_STRENGTH, String.valueOf(strength)));
} else if (request instanceof GetCurrentStepCountRequest) {
int steps = ((GetCurrentStepCountRequest) request).steps;
logger.debug("get current steps: " + steps);
@@ -35,9 +35,9 @@ public class ConfigurationGetRequest extends FileGetRequest {
ConfigurationPutRequest.ConfigItem[] items = ConfigurationPutRequest.parsePayload(fileData);
for(ConfigurationPutRequest.ConfigItem item : items){
if(item instanceof ConfigurationPutRequest.VibrationStrengthConfigItem){
device.addDeviceInfo(new GenericItem(QHybridSupport.ITEM_VIBRATION_STRENGTH, String.valueOf(((ConfigurationPutRequest.VibrationStrengthConfigItem) item).getValue())));
// device.addDeviceInfo(new GenericItem(QHybridSupport.ITEM_VIBRATION_STRENGTH, String.valueOf(((ConfigurationPutRequest.VibrationStrengthConfigItem) item).getValue())));
}else if(item instanceof ConfigurationPutRequest.DailyStepGoalConfigItem){
device.addDeviceInfo(new GenericItem(QHybridSupport.ITEM_STEP_GOAL, String.valueOf(((ConfigurationPutRequest.DailyStepGoalConfigItem) item).getValue())));
// device.addDeviceInfo(new GenericItem(QHybridSupport.ITEM_STEP_GOAL, String.valueOf(((ConfigurationPutRequest.DailyStepGoalConfigItem) item).getValue())));
}else if(item instanceof ConfigurationPutRequest.CurrentStepCountConfigItem){
device.addDeviceInfo(new GenericItem(QHybridSupport.ITEM_STEP_COUNT, String.valueOf(((ConfigurationPutRequest.CurrentStepCountConfigItem) item).getValue())));
}else if(item instanceof ConfigurationPutRequest.TimezoneOffsetConfigItem) {
@@ -49,9 +49,9 @@ public class ConfigurationGetRequest extends FileEncryptedLookupAndGetRequest im
for(ConfigurationPutRequest.ConfigItem item : items){
if(item instanceof ConfigurationPutRequest.VibrationStrengthConfigItem){
device.addDeviceInfo(new GenericItem(QHybridSupport.ITEM_VIBRATION_STRENGTH, String.valueOf(((ConfigurationPutRequest.VibrationStrengthConfigItem) item).getValue())));
// device.addDeviceInfo(new GenericItem(QHybridSupport.ITEM_VIBRATION_STRENGTH, String.valueOf(((ConfigurationPutRequest.VibrationStrengthConfigItem) item).getValue())));
}else if(item instanceof ConfigurationPutRequest.DailyStepGoalConfigItem){
device.addDeviceInfo(new GenericItem(QHybridSupport.ITEM_STEP_GOAL, String.valueOf(((ConfigurationPutRequest.DailyStepGoalConfigItem) item).getValue())));
// device.addDeviceInfo(new GenericItem(QHybridSupport.ITEM_STEP_GOAL, String.valueOf(((ConfigurationPutRequest.DailyStepGoalConfigItem) item).getValue())));
}else if(item instanceof ConfigurationPutRequest.CurrentStepCountConfigItem){
device.addDeviceInfo(new GenericItem(QHybridSupport.ITEM_STEP_COUNT, String.valueOf(((ConfigurationPutRequest.CurrentStepCountConfigItem) item).getValue())));
}else if(item instanceof ConfigurationPutRequest.TimezoneOffsetConfigItem) {
@@ -14,27 +14,6 @@
android:id="@+id/settingsLayout"
android:focusableInTouchMode="true" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/vibrationStrengthLayout"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/qhybrid_vibration_strength" />
<SeekBar
android:id="@+id/vibrationStrengthBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="2"
android:min="0" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">