16696 Commits
Author SHA1 Message Date
apemayandHosted Weblate b6f5ee1617 Translated using Weblate (Spanish)
Currently translated at 100.0% (4824 of 4824 strings)

Translation: Freeyourgadget/Gadgetbridge
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/es/
2026-06-24 00:33:41 +02:00
KachelkaiserandHosted Weblate 58f46e7655 Translated using Weblate (German)
Currently translated at 99.2% (4785 of 4823 strings)

Translation: Freeyourgadget/Gadgetbridge
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/de/
2026-06-24 00:33:40 +02:00
summoner001andHosted Weblate 9a5ae1ce68 Translated using Weblate (Hungarian)
Currently translated at 100.0% (4823 of 4823 strings)

Translation: Freeyourgadget/Gadgetbridge
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/hu/
2026-06-24 00:33:39 +02:00
FjuroandHosted Weblate bce52e5a0f Translated using Weblate (Czech)
Currently translated at 100.0% (4823 of 4823 strings)

Translation: Freeyourgadget/Gadgetbridge
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/cs/
2026-06-24 00:33:39 +02:00
Hosted Weblate user 54392andHosted Weblate f5302987ee Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (4823 of 4823 strings)

Translation: Freeyourgadget/Gadgetbridge
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/zh_Hans/
2026-06-24 00:33:38 +02:00
Ghost of SpartaandHosted Weblate dd52744342 Translated using Weblate (Hungarian)
Currently translated at 100.0% (4818 of 4818 strings)

Translation: Freeyourgadget/Gadgetbridge
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/hu/
2026-06-24 00:33:38 +02:00
Da VitoriaandHosted Weblate 775b0012c4 Translated using Weblate (French)
Currently translated at 94.9% (4574 of 4817 strings)

Translation: Freeyourgadget/Gadgetbridge
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/fr/
2026-06-24 00:33:37 +02:00
apemayandHosted Weblate 3778778720 Translated using Weblate (Spanish)
Currently translated at 100.0% (4817 of 4817 strings)

Translation: Freeyourgadget/Gadgetbridge
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/es/
2026-06-24 00:33:36 +02:00
Oğuz ErsenandHosted Weblate b32e5efe4d Translated using Weblate (Turkish)
Currently translated at 86.9% (4186 of 4817 strings)

Translation: Freeyourgadget/Gadgetbridge
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/tr/
2026-06-24 00:33:36 +02:00
taketsukiandHosted Weblate fd1bad99cf Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 73.5% (3545 of 4817 strings)

Translation: Freeyourgadget/Gadgetbridge
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/zh_Hant/
2026-06-24 00:33:35 +02:00
José Rebelo 3c28049826 Update changelog 2026-06-23 23:32:45 +01:00
aptitudepiandJosé Rebelo a7eed9efd7 P22B1: Add support as Moyoung-based device 2026-06-23 22:28:18 +01:00
AntoineandJosé Rebelo 15fc96385d Add EarFun Free Pro 3 support
New device integration based on the EarFun Air Pro 4 implementation,
adapted to match the Free Pro 3 specifications:

- Qualcomm QCC3072, Bluetooth 5.3
- Codecs: SBC, AAC, aptX, aptX Adaptive (no LDAC, no LC3)
- 10-band equalizer
- Hybrid ANC (4 modes: ANC, wind noise, ambient, normal)
- 6-mic array with cVc 8.0
- Game mode (<55ms low latency)
- Multipoint (2 devices)
- 3 batteries (left, right, case)
- Touch gestures (single/double/triple/long press per earbud)

Differences from Air Pro 4:
- No LDAC codec, only aptX + aptX Adaptive
- No LE Audio / Advanced Audio Mode
- No in-ear detection setting

Detection: name "EarFun Free Pro 3", MAC prefix 70:5A:6F,
9 SDP UUIDs (includes 0000110c AVRCP Target, excludes Air Pro 4's
df21fe2c/180f/180a UUIDs).
2026-06-23 16:36:41 +02:00
José Rebelo edc714d87b Garmin: Fix exception if http request has no headers 2026-06-23 13:18:54 +01:00
José Rebelo b7156bac7a Xiaomi-protobuf: Do not signal new activity data if we were not fetching
Might fix #6338
2026-06-23 13:18:31 +01:00
835884ab16 Add device-agnostic FIT activity export (#6268)
Adds FIT file export for activity tracks, alongside the existing GPX export:

- **`FitExporter`** — builds a valid FIT activity (file_id / session / lap / record, plus length / split / set when present) from an `ActivityTrack` + `ActivitySummaryData`.
- **`AutoFitExporter`** + **`AutoExportFitSettingsActivity`** — opt-in auto-export on sync, mirroring the GPX auto-export setting (per-device or all-devices).
- **"Share FIT File"** action in the workout detail menu.

Export is fed device-agnostically: `GarminWorkoutParser` and the shared model (`ActivityTrack` / `ActivityPoint` / `ActivitySummaryEntries` / `ActivityKind`) carry laps, segments, per-length swim, splits/sets, running dynamics and HR zones.
The Garmin FIT codec (`messages`, `baseTypes`, `NativeFITMessage`, `RecordData`) is extended to encode them.

`AutoFitExporter.doExport(...)` is wired beside `AutoGpxExporter` in the Garmin, CMF, Huawei, BangleJS, Huami and Xiaomi activity paths; `FitImporter` also honours the FIT auto-export toggle.

## Testing

`:app:testMainlineDebugUnitTest` — FIT/export subset green:

- `FitExporterReadmeRoundTripTest` — round-trips the curated README sample **and** the full `Activity/<year>/` corpus for years ≥ 2015 from  https://github.com/ThomasKuehne/FIT-test-files (3482 files): parse → export → re-parse, asserting GPS/altitude/HR/speed/cadence/distance/power/temp and session aggregates survive.
- `FitExporterPaceTest`, `BaseTypeEncodeRoundTripTest`, `GarminSportTest`, `GPXExporterTest`, `FitImporterTest`, `GpxRouteFileConverterTest`, `FitWeatherTest`.

Thanks a lot to @ThomasKuehne for the initial review

Co-authored-by: Dany Mestas <94061157+DanyPM@users.noreply.github.com>
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/6268
2026-06-21 23:35:20 +02:00
José Rebelo 1f84901c14 Garmin Forerunner 970: Initial support 2026-06-21 22:16:52 +01:00
José Rebelo b055ab5075 Include workouts in activity list 2026-06-21 22:05:50 +01:00
José Rebelo 79ad5a6079 Amazfit Balance: Fix code for outdoor cycling 2026-06-21 13:46:15 +01:00
José Rebelo 2d068e8e5c Amazfit Bip Lite: Add workout GPS settings 2026-06-21 09:39:40 +01:00
José Rebelo 736db41b40 Blackview R3Max: Initial support 2026-06-20 22:44:11 +01:00
José RebeloandJosé Rebelo 08aebb1e51 Garmin: Only trigger ExploreSync after normal sync 2026-06-20 22:11:19 +02:00
José Rebelo bb23023b19 Merge pull request 'Gradle: update compile SDK from 36.0.0 to 36.1.0 and migrate kotlinOptions to compilerOptions' (#6319)
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/6319
2026-06-20 20:46:39 +02:00
José Rebelo f722ba82f3 Track auto-fetch times per device (#6266) 2026-06-20 16:23:24 +01:00
José Rebelo 5e7ffce543 Merge pull request 'add support ldac, multipoint and game mode options for realme Buds T200' (#6305)
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/6305
2026-06-20 17:22:37 +02:00
trentsuzukiandJosé Rebelo 3c917a0956 Add charts for GenericMetricSample 2026-06-20 17:15:34 +02:00
trentsuzukiandJosé Rebelo d9adf83564 Add weekly/monthly temperature charts 2026-06-20 17:12:45 +02:00
NTeditor 8616a6ed32 oppo: rename DeviceInfo to Subscription 2026-06-20 14:40:41 +03:00
NTeditor dfbb86da42 oppo: add handler for DeviceInfoType.ANC_SELECTOR 2026-06-20 12:18:28 +03:00
NTeditor 45cd3c2a2c oppo: add handler for DeviceInfoType.GAME_MODE 2026-06-20 11:52:54 +03:00
Thomas Kuehne 7ae60e6e37 Gradle: update compile SDK from 36.0.0 to 36.1.0 and migrate kotlinOptions to compilerOptions 2026-06-20 08:19:05 +00:00
NTeditor 19933192d3 oppo: add DEVICE_INFO subscribe logic 2026-06-20 11:17:23 +03:00
Thomas Kuehne 135842de07 Garmin: decode more fit fields
Message 318 contains solar charging information that could be used as a proxy for sunlight intensity (#5874).
2026-06-20 07:34:45 +00:00
NTeditor ef5aeb9a27 remove non-english string select_at_least_option as requested 2026-06-20 03:24:29 +03:00
NTeditor 513832dcfb oppo: show warning when selecting too few ANC modes 2026-06-20 03:24:24 +03:00
NTeditor be73323222 oppo: add AncConfigValue.toMask() method 2026-06-20 03:21:56 +03:00
NTeditor b2f7fdec94 oppo: fix parseBattery missing battery logic 2026-06-20 03:21:55 +03:00
NTeditor 14a3cc5772 oppo: add supportsAnc in writeToParcel() 2026-06-20 03:21:55 +03:00
NTeditor 206e5b9eae realme: add BluetoothNameTest for realme Buds Air 6 Pro 2026-06-20 03:21:55 +03:00
badcppandNTeditor 59d056f1f7 realme: add support for Realme Buds Air 6 Pro 2026-06-20 03:21:55 +03:00
NTeditor 6881bab143 oppo: add AncConfigType.TOUCH_CYCLE_MODES 2026-06-20 03:21:55 +03:00
NTeditor c8fd2f0c15 oppo: Reset missing battery states to UNKNOWN for UI 2026-06-20 03:21:55 +03:00
NTeditor a603677629 oppo: add handler for ANC_CONFIG_ACK 2026-06-20 03:21:55 +03:00
NTeditor 56d05b8d1d oppo: dynamically request supported misc configs 2026-06-20 03:21:55 +03:00
NTeditor ced93c23a0 oppo: add anc support 2026-06-20 03:21:54 +03:00
NTeditor 87ca50652d oppo: move ldac, multipoint and game mode settings from DEVELOPER 2026-06-20 03:21:54 +03:00
NTeditor 6831256e4c oppo: rename PREF to MISC_CONFIG; add MISC_CONFIG_REQ and MISC_CONFIG_RET commands 2026-06-20 03:21:54 +03:00
NTeditor be7faa8399 oppo: refactor OppoHeadphonesProtocol 2026-06-20 03:21:54 +03:00
NTeditor 5b2bf237c9 realme: enable ldac, multipoint and game mode for realme Buds T200 2026-06-20 03:21:54 +03:00
NTeditor 54f0949f84 oppo: add minimal support ldac, multipoint and gamemode 2026-06-20 03:21:54 +03:00