Commit Graph
15928 Commits
Author SHA1 Message Date
Thomas Kuehne 9edeec2a57 Garmin: fix start time handling for stopwatch (#4507) and prepare for multi sessions in one file (#5862. #5860)
Prioritise the session specific start time over the file creation time.
2026-04-10 17:33:39 +00:00
luckyluk607andArjan Schrijver 7a1960a85a ITech Active 3: Update coordinator with all features 2026-04-09 21:40:50 +02:00
Arjan Schrijver f05b55a250 Fossil hybrids: Increase request timeout for big activity file downloads 2026-04-07 13:04:23 +02:00
Gideon Zenz 4d8ef91b13 Health Connect: Gate DistanceSyncer with supportsActivityDistance flag
Add supportsActivityDistance coordinator capability flag following the
supportsActiveCalories pattern. When true, DistanceSyncer syncs all
per-minute distance and RecordedWorkoutSyncer skips DistanceRecords.

Enabled for Garmin (watch + bike), Xiaomi, and Huawei. Other devices
with distance fields (CMF, Colmi, H+, etc.) left at default false
until per-minute data quality is verified.
2026-04-07 10:30:40 +02:00
Gideon Zenz da3f21aafb Health Connect: Add DistanceSyncer for daily activity distance
Syncs device-reported distance (distanceCm) from ActivitySamples to
Health Connect DistanceRecord. Only writes actual device measurements,
skips NOT_MEASURED or zero values.
2026-04-07 10:29:13 +02:00
José Rebelo 77a66eb9c6 Merge pull request 'Health Connect: Fix partial sleep sessions not being replaced by full data' (#5961)
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/5961
2026-04-07 00:49:41 +02:00
Gideon Zenz 26dc2879d9 Health Connect: Fix partial sleep sessions not being replaced by full data
Sleep sessions that grow over time (partial data synced mid-sleep, full
data available after waking) were permanently stuck as partial records
in Health Connect. The sync cursor advanced past the session's start
after the first sync, so the full session was never re-processed.

Fix with two mechanisms:
- Set clientRecordId per sleep session (deterministic from device +
  start hour) with clientRecordVersion = stage count, enabling HC's
  native upsert: re-inserting the same session replaces partial data
  with the full record.
- Hold the sync cursor behind sessions that ended less than 6 hours
  ago (likely still in-progress), so they get re-processed on the
  next sync with more complete data.
2026-04-07 00:35:58 +02:00
José Rebelo b4ca137d8c Merge pull request 'Redmi Buds 8 Active: Add device support' (#5932)
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/5932
2026-04-07 00:26:44 +02:00
Benjamin TempleandJosé Rebelo c595e69ef2 Pebble: Unify Pebble hardware definitions into PebbleHardware class
Create PebbleHardware.java as the single source of truth for all
Pebble hardware definitions and for determining what model and features
a watch has. The goal of this commit is to better unify the pebble watch
model definitions into a single source of truth to make adding new
models easier, as well as to bring all the relevant model specific logic
about what a watch is capable of, or which watch model to use into a
single file versus being spread out among multiple files making it
easier to fail to fix logic bugs.

The PebbleHardware class now has all the definitions for the following
information in one place:
- Platform enum with capabilities (BLE-only, hasHealth, hasHRM)
- Hardware revision registry mapping hardware IDs to codenames
- BLE-only device detection methods
- Platform name lookup for watchface installation

This cleans up PebbleUtils to only contain non-hardware utilities.
(maybe should move into the pebble directory away from the utils folder
in another commit?)
2026-04-07 00:22:44 +02:00
Thomas KuehneandJosé Rebelo fc6dcc793b Garmin: export FIT laps as GPX track segments 2026-04-07 00:14:44 +02:00
Thomas KuehneandJosé Rebelo 68aa74bc39 GPX: fix redirecting URLs in xsi:schemaLocation
Some XML parsers don't support HTTP redirection for schemaLocation so encode the actual URLs.
2026-04-07 00:14:06 +02:00
Gideon Zenz 68475a07fd Health Connect: Use separate start/end offsets for workout records
Resolve ZoneOffset independently for workout start and end instants,
so workouts spanning a DST transition get correct offset metadata on
both ends.
2026-04-05 23:40:57 +02:00
Gideon Zenz 746bc16bfa Health Connect: Use per-timestamp timezone offset for DST correctness
Replace single sync-time ZoneOffset with ZoneId, resolving the correct
offset per record timestamp via ZoneId.rules.getOffset(instant). Fixes
wrong offset metadata on records crossing DST boundaries (e.g. sleep
sessions starting in CET and ending in CEST).

Also fixes leading space in device model name after manufacturer prefix
strip.
2026-04-05 23:40:57 +02:00
Me7c7andMartin.JM bc63bfa588 Huawei: fix for watchfaces installation for some devices 2026-04-05 18:09:10 +02:00
Arjan SchrijverandArjan Schrijver 7420876a88 Fossil Q: Move notifications configuration to dedicated top-level device preference 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver 7735b2d795 Fossil Q: Add button function to ring phone 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver a03bfee348 Fossil Q: Add/fix button actions for music and volume control 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver 5ceef900de Fossil Q: Support for find device 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver 66f2c26c53 Fossil Q: Migrate existing button preferences automatically 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver aa37f7bdce Fossil Q: Move button config to device preferences 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver 5015e3a7b7 Fossil Q: Improve time picker visuals 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver b6b9781f0b Fossil Q: Fix commands being sent to all connected Fossil watches 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver f161d129f5 Fossil Q: Fix spelling in code and logging 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver efd2c626a5 Fossil Q: Move time offsets to device preferences 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver 30aa847fa1 Fossil Q: Vibrate watch on incoming call 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver 4083d181a6 Fossil Q: Fix steps detection during increased activity 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver 79363b0cbb Fossil Q: Support calibration of physical hands 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver 9e3e381680 Fossil Q: Extend activity files parser for non-HR watches 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver a149a48e95 Fossil Q: Move subdial notifications to preferences 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver 3b437df4ab Fossil Q: Stop misusing app manager button on device card 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver 4a7f17599b Fossil Q: Add dev preference for saving raw activity files 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver 9093f730a2 Fossil Q: Hide unused authentication key preference 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver a03799fff3 Fossil Q: Limit amount of toasts 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver 65b95a9eeb Fossil Q: Move vibration strength preference into device prefs 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver d243b82761 Fossil Q: Use global step goal preference instead of custom one 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver d997ae6cc8 Fossil Q: Improve device details output 2026-04-05 14:18:10 +02:00
Arjan SchrijverandArjan Schrijver f77b8edb04 Fossil Q: Add button action for showing step goal progress 2026-04-05 14:18:10 +02:00
Thomas Kuehne d65b1fd853 DeviceCoordinator.findInstallHandler: add Bundle parameter
EventHandler.onInstallApp already has a Bundle parameter for passing options to install handlers.
This prepares the infrastructure for PR #5923.
2026-04-03 20:57:30 +00:00
Thomas KuehneandJosé Rebelo 05b229c833 Gpx: export track name
Some Garmin devices only read gpx/trk/name and ignore gpx/metadata/name.
Export the same name to both.
2026-04-03 18:53:54 +02:00
Thomas Kuehne de1c74f223 fix: always use GPSCoordinate.hasAltitude to check if altitude value is valid
Altitude is a floating point value that supports NaN so it is too easy to use the wrong comparison operation.
2026-04-03 16:40:55 +00:00
Thomas Kuehne 3cd5ae847b Garmin: add support for installing .FIT location and segment files
The uploaded location file creates new waypoints on the device by updating the LCTNS.FIT / Location.fit file.
2026-03-30 01:26:02 +02:00
Christian Breiteneder a634fb15a5 BPW4500: Persist samples immediately on receive
Align with GenericBloodPressureSupport (e3d8530103):
remove BroadcastReceiver, use onConnectionStateChange
to signal activity data finish.
2026-03-29 10:00:37 +02:00
Martin.JM 59f140f751 Reduce error toasts for Huawei workout sync 2026-03-28 11:14:45 +01:00
José Rebelo da878deea5 Health Connect: Fix device model 2026-03-27 18:52:28 +00:00
José Rebelo 11711c6b51 Merge pull request 'Redmi Buds 6 Active: Add 'none' option to 'long button mode'' (#5933)
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/5933
2026-03-25 23:19:17 +01:00
Thomas KuehneandJosé Rebelo 6fcb07ea98 GPX: add support for importing older GPX version 1.0 files
Also takes care of slightly quirky GPX 1.1 files that contain extra spaces, XML comments or use floats instead of integers for cadence and heart rate.
2026-03-25 23:17:42 +01:00
José Rebelo 3bb686a106 CMF Watch Pro: Reassemble chunks larger than mtu 2026-03-25 21:39:46 +00:00
iNeedADoctor d6a4aad588 Redmi Buds 8 Active: Add device support 2026-03-25 21:03:13 +01:00
iNeedADoctor 9deaf1f45e Redmi Buds 6 Active: Add 'none' option to 'long button mode' 2026-03-25 20:46:27 +01:00
José Rebelo b3ae7607fc Fix nautical units 2026-03-25 17:29:44 +00:00