Fossil Q: Move subdial notifications to preferences

This commit is contained in:
Arjan Schrijver
2026-04-05 14:18:10 +02:00
committed by Arjan Schrijver
parent 3b437df4ab
commit a149a48e95
8 changed files with 34 additions and 75 deletions
@@ -325,34 +325,6 @@ public class QHybridConfigActivity extends AbstractGBActivity {
runOnUiThread(new Runnable() {
@Override
public void run() {
final String extendedVibrationSupport = getDeviceInfoDetails(QHybridSupport.ITEM_EXTENDED_VIBRATION_SUPPORT);
CheckBox activityHandCheckbox = findViewById(R.id.checkBoxUserActivityHand);
if (getDeviceInfoDetails(QHybridSupport.ITEM_HAS_ACTIVITY_HAND).equals("true")) {
if (getDeviceInfoDetails(QHybridSupport.ITEM_USE_ACTIVITY_HAND).equals("true")) {
activityHandCheckbox.setChecked(true);
}
activityHandCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(@NonNull CompoundButton buttonView, boolean checked) {
new MaterialAlertDialogBuilder(QHybridConfigActivity.this)
.setMessage(getString(R.string.qhybrid_prompt_million_steps))
.setPositiveButton("ok", null)
.show();
buttonView.setChecked(false);
}
});
} else {
// activityHandCheckbox.setEnabled(false);
activityHandCheckbox.setAlpha(0.2f);
activityHandCheckbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
GB.toast("nah.", Toast.LENGTH_SHORT, GB.INFO);
((CheckBox) v).setChecked(false);
}
});
}
ItemWithDetails item = device.getDeviceInfo(FossilWatchAdapter.ITEM_BUTTONS);
String buttonJson = null;
if(item != null) {
@@ -468,7 +440,6 @@ public class QHybridConfigActivity extends AbstractGBActivity {
super.onResume();
refreshList();
ContextCompat.registerReceiver(this, buttonReceiver, new IntentFilter(QHybridSupport.QHYBRID_EVENT_BUTTON_PRESS), ContextCompat.RECEIVER_NOT_EXPORTED);
LocalBroadcastManager.getInstance(this).registerReceiver(settingsReceiver, new IntentFilter(QHybridSupport.QHYBRID_EVENT_SETTINGS_UPDATED));
LocalBroadcastManager.getInstance(this).registerReceiver(fileReceiver, new IntentFilter(QHybridSupport.QHYBRID_EVENT_FILE_UPLOADED));
}
@@ -267,6 +267,7 @@ public class QHybridCoordinator extends AbstractBLEDeviceCoordinator {
// Q Hybrid watches, without eInk screen
if (!isHybridHR(device)) {
deviceSpecificSettings.addRootScreen(R.xml.devicesettings_fossilqhybrid_legacy);
deviceSpecificSettings.addRootScreen(R.xml.devicesettings_qhybrid);
deviceSpecificSettings.addRootScreen(R.xml.devicesettings_fossilhybridhr_vibration);
// deviceSpecificSettings.addRootScreen(R.xml.devicesettings_fossilhybridhr_calibration); // TODO
final List<Integer> developer = deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.DEVELOPER);
@@ -21,6 +21,8 @@ public class QHybridSettingsCustomizer implements DeviceSpecificSettingsCustomiz
@Override
public void customizeSettings(final DeviceSpecificSettingsHandler handler, final Prefs prefs, final String rootKey) {
handler.addPreferenceHandlerFor("use_activity_hand_as_notification_counter");
final Preference pref = handler.findPreference("pref_key_qhybrid_legacy");
if (pref != null) {
pref.setOnPreferenceClickListener(preference -> {
@@ -37,7 +39,7 @@ public class QHybridSettingsCustomizer implements DeviceSpecificSettingsCustomiz
return Collections.emptySet();
}
public static final Creator<QHybridSettingsCustomizer> CREATOR = new Creator<QHybridSettingsCustomizer>() {
public static final Creator<QHybridSettingsCustomizer> CREATOR = new Creator<>() {
@Override
public QHybridSettingsCustomizer createFromParcel(final Parcel in) {
return new QHybridSettingsCustomizer();
@@ -43,6 +43,7 @@ import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Objects;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -94,7 +95,6 @@ public class QHybridSupport extends QHybridBaseSupport {
public static final String QHYBRID_COMMAND_UPDATE = "qhybrid_command_update";
public static final String QHYBRID_COMMAND_UPDATE_TIMEZONE = "qhybrid_command_update_timezone";
public static final String QHYBRID_COMMAND_NOTIFICATION = "qhybrid_command_notification";
public static final String QHYBRID_COMMAND_UPDATE_SETTINGS = "nodomain.freeyourgadget.gadgetbridge.Q_UPDATE_SETTINGS";
public static final String QHYBRID_COMMAND_OVERWRITE_BUTTONS = "nodomain.freeyourgadget.gadgetbridge.Q_OVERWRITE_BUTTONS";
public static final String QHYBRID_COMMAND_UPDATE_WIDGETS = "nodomain.freeyourgadget.gadgetbridge.Q_UPDATE_WIDGETS";
public static final String QHYBRID_COMMAND_SET_MENU_MESSAGE = "nodomain.freeyourgadget.gadgetbridge.Q_SET_MENU_MESSAGE";
@@ -115,7 +115,6 @@ public class QHybridSupport extends QHybridBaseSupport {
private static final String QHYBRID_ACTION_SET_ACTIVITY_HAND = "nodomain.freeyourgadget.gadgetbridge.Q_SET_ACTIVITY_HAND";
public static final String QHYBRID_EVENT_SETTINGS_UPDATED = "nodomain.freeyourgadget.gadgetbridge.Q_SETTINGS_UPDATED";
public static final String QHYBRID_EVENT_FILE_UPLOADED = "nodomain.freeyourgadget.gadgetbridge.Q_FILE_UPLOADED";
public static final String QHYBRID_COMMAND_NOTIFICATION_CONFIG_CHANGED = "nodomain.freeyourgadget.gadgetbridge.Q_NOTIFICATION_CONFIG_CHANGED";
@@ -127,7 +126,6 @@ public class QHybridSupport extends QHybridBaseSupport {
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: ";
public static final String ITEM_USE_ACTIVITY_HAND = "USE_ACTIVITY_HAND: ";
public static final String ITEM_LAST_HEARTBEAT = "LAST_HEARTBEAT: ";
public static final String ITEM_TIMEZONE_OFFSET = "TIMEZONE_OFFSET_COUNT: ";
public static final String ITEM_HEART_RATE_MEASUREMENT_MODE = "HEART_RATE_MEASUREMENT_MODE: ";
@@ -163,7 +161,6 @@ public class QHybridSupport extends QHybridBaseSupport {
commandFilter.addAction(QHYBRID_COMMAND_UPDATE);
commandFilter.addAction(QHYBRID_COMMAND_UPDATE_TIMEZONE);
commandFilter.addAction(QHYBRID_COMMAND_NOTIFICATION);
commandFilter.addAction(QHYBRID_COMMAND_UPDATE_SETTINGS);
commandFilter.addAction(QHYBRID_COMMAND_OVERWRITE_BUTTONS);
commandFilter.addAction(QHYBRID_COMMAND_NOTIFICATION_CONFIG_CHANGED);
commandFilter.addAction(QHYBRID_COMMAND_UPDATE_WIDGETS);
@@ -250,28 +247,6 @@ public class QHybridSupport extends QHybridBaseSupport {
loadTimezoneOffset();
break;
}
case QHYBRID_COMMAND_UPDATE_SETTINGS: {
String newSetting = intent.getStringExtra("EXTRA_SETTING");
if (newSetting == null) {
logger.error("newSetting is null");
break;
}
switch (newSetting) {
case ITEM_USE_ACTIVITY_HAND: {
final ItemWithDetails itemUseActivityHand = gbDevice.getDeviceInfo(ITEM_USE_ACTIVITY_HAND);
if (itemUseActivityHand == null) {
logger.error("itemUseActivityHand is null");
break;
}
QHybridSupport.this.useActivityHand = itemUseActivityHand.getDetails().equals("true");
GBApplication.getPrefs().getPreferences().edit().putBoolean("QHYBRID_USE_ACTIVITY_HAND", useActivityHand).apply();
break;
}
}
LocalBroadcastManager.getInstance(getContext()).sendBroadcast(new Intent(QHYBRID_EVENT_SETTINGS_UPDATED));
break;
}
case QHYBRID_COMMAND_OVERWRITE_BUTTONS: {
String buttonConfig = intent.getStringExtra(FossilWatchAdapter.ITEM_BUTTONS);
watchAdapter.overwriteButtons(buttonConfig);
@@ -519,8 +494,7 @@ public class QHybridSupport extends QHybridBaseSupport {
protected TransactionBuilder initializeDevice(TransactionBuilder builder) {
builder.setDeviceState(GBDevice.State.INITIALIZING);
this.useActivityHand = GBApplication.getPrefs().getBoolean("QHYBRID_USE_ACTIVITY_HAND", false);
getDevice().addDeviceInfo(new GenericItem(ITEM_USE_ACTIVITY_HAND, String.valueOf(this.useActivityHand)));
this.useActivityHand = GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()).getBoolean("use_activity_hand_as_notification_counter", false);
if (GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()).getBoolean(DeviceSettingsPreferenceConst.PREF_USE_CUSTOM_DEVICEICON, true)) {
getDevice().setNotificationIconConnected(R.drawable.ic_notification_qhybrid);
@@ -266,6 +266,10 @@ public class FossilWatchAdapter extends WatchAdapter {
SharedPreferences preferences = getDeviceSpecificPreferences();
int stepGoal = new ActivityUser().getStepsGoal();
if (preferences.getBoolean("use_activity_hand_as_notification_counter", false)) {
stepGoal = 1000000;
}
byte vibrationStrength = (byte) preferences.getInt(CONFIG_ITEM_VIBRATION_STRENGTH, 100);
int timezoneOffset = preferences.getInt(CONFIG_ITEM_TIMEZONE_OFFSET, 0);
@@ -670,6 +674,13 @@ public class FossilWatchAdapter extends WatchAdapter {
setStepGoal(new ActivityUser().getStepsGoal());
break;
}
case "use_activity_hand_as_notification_counter":
if (getDeviceSpecificPreferences().getBoolean("use_activity_hand_as_notification_counter", false)) {
setStepGoal(1000000);
} else {
setStepGoal(new ActivityUser().getStepsGoal());
}
break;
}
}
@@ -56,13 +56,6 @@
android:layout_height="wrap_content"
android:text="@string/qhybrid_overwrite_buttons" />
<CheckBox
android:id="@+id/checkBoxUserActivityHand"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/qhybrid_use_activity_hand_as_notification_counter" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
+6 -10
View File
@@ -2524,18 +2524,14 @@
<string name="quick_alarm_description">Alarm from widget</string>
<string name="icon_placeholder" translatable="false">Icon</string>
<string name="watch_not_connected">Watch not connected</string>
<string name="qhybrid_vibration_strength">vibration strength:</string>
<string name="qhybrid_goal_in_steps">Goal in steps</string>
<string name="qhybrid_time_shift">time shift</string>
<string name="qhybrid_second_timezone_offset_relative_to_utc">second timezone offset relative to UTC</string>
<string name="qhybrid_overwrite_buttons">overwrite buttons</string>
<string name="qhybrid_use_activity_hand_as_notification_counter">use activity hand as notification counter</string>
<string name="qhybrid_prompt_million_steps">Please set the step count to a million to activate that.</string>
<string name="qhybrid_time_shift">Time shift</string>
<string name="qhybrid_second_timezone_offset_relative_to_utc">Second timezone offset relative to UTC</string>
<string name="qhybrid_use_activity_hand_as_notification_counter">Use activity hand as notification counter</string>
<string name="qhybrid_buttons_overwrite_success">Buttons overwritten</string>
<string name="qhybrid_buttons_overwrite_error">Error overwriting buttons</string>
<string name="qhybrid_offset_timezone">offset timezone by</string>
<string name="qhybrid_changes_delay_prompt">change might take some seconds…</string>
<string name="qhybrid_offset_time_by">offset time by</string>
<string name="qhybrid_offset_timezone">Offset timezone by</string>
<string name="qhybrid_changes_delay_prompt">Change might take some seconds…</string>
<string name="qhybrid_offset_time_by">Offset time by</string>
<string name="kind_waypoints">Waypoints</string>
<string name="kind_segments">Segments</string>
<string name="waypoint_count">%d waypoints</string>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="use_activity_hand_as_notification_counter"
android:layout="@layout/preference_checkbox"
android:title="@string/qhybrid_use_activity_hand_as_notification_counter"
android:icon="@drawable/ic_timer" />
</androidx.preference.PreferenceScreen>