1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-11-28 12:56:49 +01:00
Commit Graph

10531 Commits

Author SHA1 Message Date
José Rebelo
69fae56a8c Fix battery icon when device connected 2024-06-15 21:31:07 +01:00
José Rebelo
d4dc686148 Fix crash when opening battery status activity 2024-06-14 20:38:07 +01:00
José Rebelo
527773d3d8 Garmin Forerunner 265: Initial support 2024-06-14 19:47:34 +01:00
Daniele Gobbetti
74fbadf553 Pebble: fix webview crash (on android 14)
Older android version also possibly impacted
2024-06-13 16:26:39 +02:00
José Rebelo
12b3ff34e2 Garmin: Send all notification types as foreground
Sending notifications for some apps is unexpected for most users, which
was generating some bug reports. For now, send all notifications as
foreground, at least until we can make what is happening more clear or
configurable.
2024-06-11 20:50:06 +01:00
José Rebelo
a574475951 Garmin Forerunner 255: Initial support 2024-06-11 19:57:56 +01:00
hrdl
14d5c79d02 Add Element, ElementX, and Molly to the recognized applications and as generic chat 2024-06-11 20:48:58 +02:00
hrdl
629f487c70 Add KDE Itinerary and KTrip as transit notifications 2024-06-11 20:44:00 +02:00
José Rebelo
010186b2a9 Add note on "Keep activity data on device" preference 2024-06-10 17:10:26 +01:00
José Rebelo
8f98ea02ec Garmin Fenix 7S: Initial support 2024-06-10 16:48:06 +01:00
José Rebelo
4926f449ec Display toast on authentication failures 2024-06-10 16:29:53 +01:00
José Rebelo
76d633cde6 Make battery thresholds configurable 2024-06-10 12:55:27 +00:00
Peter Kannewitz
243c1ba039 Xiaomi: swim workout parser lane length fix (#3823)
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/3823
Co-authored-by: Peter Kannewitz <peter.kannewitz@posteo.net>
Co-committed-by: Peter Kannewitz <peter.kannewitz@posteo.net>
2024-06-10 11:15:18 +00:00
José Rebelo
f85c387edf Garmin Fenix 6 Sapphire: Fix typo in coordinator name 2024-06-09 14:40:38 +01:00
José Rebelo
241ec26170 Garmin Fenix 7 Pro: Initial support 2024-06-09 14:39:10 +01:00
José Rebelo
13cbec2a63 Garmin Venu 3S: Initial support 2024-06-09 09:13:12 +01:00
José Rebelo
0f80554a30 Garmin: Split coordinator packages by series 2024-06-09 09:12:44 +01:00
Daniele Gobbetti
fc8b959fea Garmin: only add the cache-control header when updating the AGPS file
Prevents it being stale for too long if the user forgets to fetch an updated file.
If the file has to be updated on the watch the response (http status 200) is sent and cached for 14400 seconds, for this period the watch will not request the file again.
Subsequent requests (http status 304) are very small and should not impact battery life negatively, hence they are sent without adding caching directives.
2024-06-08 16:29:52 +02:00
André Büsgen
a80054157a Bangle.js: Add Sleep as Android support (#3785)
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/3785
Co-authored-by: André Büsgen <andre.buesgen@posteo.de>
Co-committed-by: André Büsgen <andre.buesgen@posteo.de>
2024-06-08 12:46:09 +00:00
José Rebelo
b7aec071ff Garmin: Realtime settings 2024-06-07 23:39:12 +01:00
José Rebelo
0f8889498e Garmin: Send phone volume to watch 2024-06-07 22:53:17 +01:00
José Rebelo
47e3cbcb33 Garmin Fenix 6 Sapphire: Initial support 2024-06-07 21:27:37 +01:00
Ilya Nikitenkov
1007feef60
Sony LinkBuds S: Added additional capabilities 2024-06-07 00:05:47 +03:00
Martin.JM
a90e1be0ee Huawei: Generalize HR and SpO2 support 2024-06-04 11:23:49 +00:00
Martin.JM
b43d87f6bc Huawei: Weather no longer depends on weather start response 2024-06-04 11:20:10 +00:00
Gordon Williams
0c19010ca2 Bangle.js: when converting text to bitmaps, try and split up emoji so we can render just those in color.
Rendering text as well uses more memory but means text is rendered white, which doesn't work on some backgrounds
2024-06-03 15:58:05 +01:00
José Rebelo
4459b30ee6 Intent API: Add broadcast on activity sync finish 2024-06-02 22:03:12 +01:00
Martin.JM
15ba9e6c85 Improve GPS support for Huawei gadgets 2024-06-02 20:51:02 +00:00
José Rebelo
0e9c709a59 Xiaomi: Ignore activity files without timestamp and version
Some watches will send a sequence of zeroes, which would make activity
fetch become stuck, as the file does not exist.
2024-06-02 21:48:41 +01:00
José Rebelo
09bcb782da Garmin Epix Pro: Fix typo in device name 2024-06-02 21:00:25 +01:00
José Rebelo
42d28cc988 Garmin Epix Pro: Initial support 2024-06-02 20:43:05 +01:00
José Rebelo
64258248b6 Garmin: Allow install agps for sony cpe url 2024-05-31 20:15:15 +01:00
José Rebelo
5e9f5068ad Garmin: Match exacted supported device names 2024-05-30 18:51:33 +01:00
José Rebelo
15f922276b Garmin Instinct 2X Solar: Initial support 2024-05-30 18:47:28 +01:00
François Chavant
b647c7ca48 Add Garmin Instinct 2S Solar 2024-05-30 19:43:52 +02:00
Peter Kannewitz
9acdd87029 Xiaomi: add swimming workout type (#3798)
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/3798
Co-authored-by: Peter Kannewitz <peter.kannewitz@posteo.net>
Co-committed-by: Peter Kannewitz <peter.kannewitz@posteo.net>
2024-05-29 20:52:26 +00:00
José Rebelo
72162469a1 Xiaomi: Fix notification for apps in work profile 2024-05-28 22:45:57 +01:00
José Rebelo
cdf21ecdb4 Garmin: Make characteristics hex representation explicit
Avoid mixing decimal and hex representations.
2024-05-28 20:30:00 +01:00
Daniele Gobbetti
537b0580b5 Garmin: fix for watch staying in synchronizing state on first connection
Reported in issue 3269, https://codeberg.org/Freeyourgadget/Gadgetbridge/issues/3269#issuecomment-1845355

Also run refactor code on the whole file
2024-05-28 12:35:55 +02:00
José Rebelo
e5d41e75ad Garmin Vivosmart 5: Initial support 2024-05-27 20:08:00 +01:00
José Rebelo
2fa22224bd Garmin: Determine ML characteristic dynamically 2024-05-27 20:08:00 +01:00
José Rebelo
ef11dd0f16 Flush logs before sharing 2024-05-26 15:38:11 +01:00
José Rebelo
7b21f85613 Garmin Venu 2 Plus: Initial support 2024-05-26 09:04:57 +01:00
José Rebelo
db33bc3ee9 Xiaomi Spp: Log plaintext payload
It's very hard to troubleshoot issues with Xiaomi Spp devices from logs
without having access to the plain-text payload, so we now log it.
2024-05-25 09:35:25 +01:00
José Rebelo
b704276e49 Garmin: Fix 304 response when agps matches cache 2024-05-24 22:24:09 +02:00
Daniele Gobbetti
ba9e5c8a77 Garmin: various minor changes
remove message placeholders referring to legacy code,
remove try-catch from the weather data message building method
lower the frequency of music control messages
2024-05-24 22:24:09 +02:00
Daniele Gobbetti
9c4da444cf Garmin: fix protobuf chunked fragments handling
remove chunk from the map once it is complete if it is incoming, fix the removal of outgoing chunks
also return a warn log message if the protobuf status is not OK.
2024-05-24 22:24:09 +02:00
José Rebelo
5224244f74 Garmin: Fix edge case in sleep overlay
If the sleep session ends outside the queried time range, we need to
fetch the next sleep stage outside the range so that we can overlay it
properly.
2024-05-24 22:24:09 +02:00
José Rebelo
8e1511bd6e Garmin: Fix overcounting of steps in some cases
We need to take into account the previous sample that is outside the
range that was queried, so that we can correct the first sample in the
range.
2024-05-24 22:24:09 +02:00
José Rebelo
39bbd2e579 Garmin: Improve transaction logging 2024-05-24 22:24:09 +02:00
José Rebelo
d741b6ff66 Garmin: Ignore agps request if etag matches
Some watches reboot on http 304
2024-05-24 22:24:09 +02:00
José Rebelo
ca8d595493 Garmin: Configure contacts 2024-05-24 22:24:09 +02:00
José Rebelo
f3cc07af27 Garmin: Fix COBS encoding of long non-zero sections 2024-05-24 22:24:09 +02:00
José Rebelo
88f687496c Garmin: Improve logging during file downloading 2024-05-24 22:24:09 +02:00
José Rebelo
88a9c81dcc Garmin: Implement etag for agps requests 2024-05-24 22:24:09 +02:00
Daniele Gobbetti
ea1c1c808c Change java package of garmin protobuf files 2024-05-24 22:24:09 +02:00
Daniele Gobbetti
0cf73a2120 Remove all the legacy vivomove HR code.
Also replaces support for device through the new garmin code path.
The Entities are preserved to enable on-demand database migration in case some user had previously synchronized data.
2024-05-24 22:24:09 +02:00
José Rebelo
2f729dbe29 Garmin: Allow agps updates for multiple URLs 2024-05-24 22:24:09 +02:00
lorddavidiii
a0943649bd Initial support for Garmin Vivoactive 4 2024-05-24 22:24:09 +02:00
José Rebelo
6f9f49aa4a Garmin Venu 3: Fix device name 2024-05-24 22:24:09 +02:00
José Rebelo
2ac83fbc31 Garmin: Set default icon to a round watch 2024-05-24 22:24:09 +02:00
José Rebelo
f210b3b732 Garmin: Fix overcounting of steps
When going past midnight we were not resetting the number of steps,
resulting in a negative value, which would cause the next sample to
overcount.
2024-05-24 22:24:09 +02:00
Daniele Gobbetti
709afc5df7 Garmin: fix spurious protobuf messages 2024-05-24 22:24:09 +02:00
Daniele Gobbetti
2a9a01e40b Garmin: improve weather information
Add Aqi Field Definition and field to today weather and daily forecast, as both are available in WeatherSpec.
Add Feels like temperature to hourly forecast but populate with the forecasted temperature as the field is not available in Weatherspec for hourly.
Use temperature Field Definition for dew point and add it to today's weather.

Fields dew point and air quality could have been removed from the hourly weather definition but are kept in to test compatibility of these changes with watches.
2024-05-24 22:24:09 +02:00
Daniele Gobbetti
ebe371de3c Garmin: Remove handling of legacy cache directory 2024-05-24 22:24:09 +02:00
Daniele Gobbetti
c3a6db3309 Garmin: adjust test after adding distance field 2024-05-24 22:24:09 +02:00
José Rebelo
553f6171e6 Garmin: Map all supported workout types 2024-05-24 22:24:09 +02:00
José Rebelo
8be679d1fd Garmin: Overwrite files if local size is 0, omit date if equal to garmin epoch 2024-05-24 22:24:09 +02:00
José Rebelo
aee42ec1be Garmin: Fallback to session for workout type 2024-05-24 22:24:08 +02:00
José Rebelo
4d78fdd883 Garmin: Fix overcounting of steps 2024-05-24 22:24:08 +02:00
José Rebelo
904c995a3e Garmin: Throttle notification updates on fit parsing 2024-05-24 22:24:08 +02:00
José Rebelo
6f5f944235 Garmin: Fetch fit files HRV status 2024-05-24 22:24:08 +02:00
José Rebelo
f7bfd56d46 Garmin: Process downloaded fit files asynchronously
Fixes occasional ANR while syncing activity data.
2024-05-24 22:24:08 +02:00
José Rebelo
a25d8eae30 Activity Summary: Draw fit file if available 2024-05-24 22:24:08 +02:00
José Rebelo
0b07f36817 Garmin: Persist and display activity
- Steps, hr, intensity
- Sleep stages
- Stress
- SpO2
- Workouts
2024-05-24 22:24:08 +02:00
José Rebelo
89046d0815 Garmin: Improve computed timestamp parsing
timestamp16 must be applied against garmin epoch.
2024-05-24 22:24:08 +02:00
José Rebelo
bdd698b7d3 Garmin: Map more global fit messages
* Events
* Goals
* Gps Metadata
* Laps
* Record
* Respiration rate
* Sessions
* SpO2
* Time in Zone
2024-05-24 22:24:08 +02:00
José Rebelo
92b838f90c Garmin: Fix logging during tests 2024-05-24 22:24:08 +02:00
Lolek
1ecb1feb4d Initial support for Garmin Swim 2 2024-05-24 22:24:08 +02:00
hrdl
165f41a08f Add AGPS for Garmin Forerunner 245 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
906ad0c68f Garmin: enable AGPS update for all Instinct 2 devices 2024-05-24 22:24:08 +02:00
kuhy
880e18fffc Garmin protocol: show AGPS data status in settings 2024-05-24 22:24:08 +02:00
kuhy
91c2408170 Garmin protocol: add AGPS data checks 2024-05-24 22:24:08 +02:00
kuhy
22fafebd91 Garmin protocol: install AGPS data as firmware 2024-05-24 22:24:08 +02:00
kuhy
9f9441ba01 Garmin protocol: improve detection of successfully sent files (DataTransferHandler) 2024-05-24 22:24:08 +02:00
kuhy
4152ec1570 Garmin protocol: add support for AGPS data retrieval 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
457ff8b88f Fixup: Introduce device specific writable directory (MAC address)
Add logic to not fetch again files which had the previously defined name
2024-05-24 22:24:08 +02:00
Daniele Gobbetti
8c88cc992a Introduce device specific writable directory (MAC address)
Also adds temporary method to move the fetched files from the legacy path to the new one which does not include the device name.
Also moves the FileIndex to the end of the cached files to allow for easier sorting.

Cherry-picked from 525b395c01ce57449ee9a8f74af663595223279e and adapted
2024-05-24 22:24:08 +02:00
José Rebelo
72f1d0c82c Garmin: Make fit header crc optional 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
3abf78d8c2 Garmin: enable unicode Emoji for all devices
This seems to be widely supported by garmin devices, hence enable it in the base coordinator. Specific devices not supporting Unicode Emojis can override this method and return false.
2024-05-24 22:24:08 +02:00
Daniele Gobbetti
f1f77abe18 Garmin: harmonize device names
All device name strings start with manufacturer name.
Normalized the usage of accented i.
2024-05-24 22:24:08 +02:00
Andreas Schneider
b6468db13c Garmin: add coordinator for Instinct Crossover 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
a5dbb7fea7 Garmin: fix regression in call handling
Add a fictitious action to the notification to enable reply/hangup/reject from the watch.
Also fixes the behavior on sms reply, which should also reject the incoming call.

Change the log level in case some of the canned messages types are left as default to info, as this is a supported scenario.
2024-05-24 22:24:08 +02:00
Daniele Gobbetti
179f8a3a9e Garmin: encode unknown weather codes as invalid 2024-05-24 22:24:08 +02:00
meskio
77f119c211 Initial support for Garmin Instinct Solar 2024-05-24 22:24:08 +02:00
José Rebelo
1b45d71cc7 Garmin: Improve fit parsing
* Remove the dependency on PredefinedLocalMessage from generic fit parsing code
* Standardize toString methods, omit types for known fields
* Return null on unknown field number or names, instead of crashing
* Map more Global FIT messages (device info, monitoring, sleep stages, sleep stats, stress level)
* Prioritize "timestamp" over "253_timestamp" if specified explicitly in the global message definition
* Introduce RecordData wrappers for each global message, allowing us to have proper types when getting data. If missing or unknown, the getter returns null. All classes are auto-generated by the FitCodeGen.
* Persist a list of RecordData, instead of a Map from RecordDefinition
* Fix parsing of compressed timestamps - keep them in computedTimestamp on each data record
* Use timestamp16 if available in Monitoring records
2024-05-24 22:24:08 +02:00
Daniele Gobbetti
9e1bf07cd2 Garmin: add coordinator for Instinct 2 Solar Tactical
confirmed working in https://codeberg.org/Freeyourgadget/Gadgetbridge/issues/3063#issuecomment-1787762
2024-05-24 22:24:08 +02:00
José Rebelo
3c5eada403 Garmin: Send location to watch 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
e46ea03693 Garmin: calendar integration improvements
use the protobuf fields described in the documentation[0]
build the message according to the requested fields

[0] https://gadgetbridge.org/internals/specifics/garmin-protocol/#calendarevent
2024-05-24 22:24:08 +02:00
a0z
ed0d41aa3a Garmin: Initial support of Instinct 2 Solar 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
416b7b075c Garmin: fix notification crashes and handle SMS correctly
It looks like (some) watches really don't like having an empty list of actions, hence enable the legacy "refuse" action in every case, leaving it empty and inactive.
Further display the SMS sender in the notification and enable the correct code path for the reply action to work.
2024-05-24 22:24:08 +02:00
José Rebelo
cbd2c040bb Garmin: Auto-detect canned messages support 2024-05-24 22:24:08 +02:00
José Rebelo
9f1420e496 Garmin: Fix reply to sms 2024-05-24 22:24:08 +02:00
José Rebelo
cf02a02a48 Garmin: Add setting to disable notifications 2024-05-24 22:24:08 +02:00
José Rebelo
33eb748b64 Garmin Venu 3: Enable canned replies 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
dbc270ad9f Garmin: use developer device setting for keeping data on device
Make use of the previously added preference to toggle file archival (deletion) on the watch.

Default is true (keep data on device) until we are sure of the consequences.
2024-05-24 22:24:08 +02:00
José Rebelo
d73eb849e6 Garmin: Map all known files types 2024-05-24 22:24:08 +02:00
José Rebelo
d8dcc57813 Garmin: Add support for http weather requests 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
01d48cde91 Garmin: Rename LocalMessage to PredefinedLocalMessage and clarify its usage
PredefinedLocalMessage are only useful for FIT messages and should not interfere with FIT files. The only impact of using the local message in fit files was in the textual output, but it was confusing.

Add an explicit constructor to RecordHeader if PredefinedLocalMessage should be taken into account, and use this only in fit messages leaving the default constructor for fit files.

Also adjusts the test case as textual output comparison needs to be fixed.
2024-05-24 22:24:08 +02:00
kuhy
de019fc00a Initial support for Garmin Vivoactive 4S 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
698908a589 Garmin: Add support for custom replies (notifications and calls)
To enable custom replies an override must be defined in the devices coordinator that actually support custom replies.

The custom preferences allow to:
- enable / disable the default message suffix (Instinct 2 appends "sent from my $vendor device" to each reply by default)
- define custom messages to reply to calls and incoming messages (leaving those lists empty will enable the default messages to be used)

Also adds a new protobuf definition file of mostly unknown values that enable toggling the message suffix on Instinct 2.
2024-05-24 22:24:08 +02:00
myxor
15916635e1 Initial support for Garmin Vivoactive 5 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
45c13675e0 Garmin: Add support for replying to notifications
This uses the (assumed) new method of passing multiple actions, instead of the (assumed) legacy accept/decline approach.
At the moment the preset messages stored on the watch firmware are used for replying, the code supports using custom messages already but those have to be updated to the watch somehow (probably by protobuf) and this is not supported yet. Using custom messages if they are not set will just do nothing.
The NotificationActionIconPosition values have been determined on a vívomove Style and might not work properly on other watches.
The evaluation of GBDeviceEvent have been moved in GarminSupport since the notification actions handling uses device events.

Also adds a method to read null terminated strings to GarminByteBufferReader.
Also adds a warning in NotificationListener if the wrong handle is used for replying to a notification.
2024-05-24 22:24:08 +02:00
Daniele Gobbetti
54070b2652 Garmin: Add FileDownloadedDeviceEvent and (disabled) file deletion
Also adds (disabled) file deletion in case of already downloaded files
2024-05-24 22:24:08 +02:00
Daniele Gobbetti
2c70f1a616 Garmin: Add DST/Timezone support 2024-05-24 22:24:08 +02:00
hrdl
69934b2d7c Add Garmin Forerunner 245 2024-05-24 22:24:07 +02:00
Daniele Gobbetti
42e44de1ac Garmin: Support file archival (deletion) on watch
Also add original timestamp to local cache filename as the file identifier are reused
Also fix imports of Test class
2024-05-24 22:24:07 +02:00
José Rebelo
5c57392b85 Garmin: Fetch activity on demand 2024-05-24 22:24:07 +02:00
José Rebelo
0d230ce0a5 Garmin: Fix proguard rules for release builds 2024-05-24 22:24:07 +02:00
José Rebelo
2eb342860a Garmin: Allow high MTU 2024-05-24 22:24:07 +02:00
José Rebelo
aaa3e086d0 Garmin protocol: Simplify FILE_TYPE 2024-05-24 22:24:07 +02:00
José Rebelo
fb06a48756 Garmin protocol: Fix linter warnings 2024-05-24 22:24:07 +02:00
José Rebelo
72de9bafe9 Garmin protocol: Introduce GarminCoordinator 2024-05-24 22:24:07 +02:00
José Rebelo
4c734e4717 Garmin protocol: fix crash when stopping find phone 2024-05-24 22:24:07 +02:00
Daniele Gobbetti
e6365638d4 Garmin protocol: basic file transfer and notification handling
adds synchronization of supported files from watch to external directory
adds support for Activity and Monitoring files (workouts and activity samples), but those are not integrated yet
adds upload functionality (not used ATM and not tested)
adds notification support without actions
introduces centralized processing of "messageHandlers" (protobuf, file transfer, notifications)

also properly dispose of the music timer when disconnecting
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
9dee71df6f Garmin protocol: enable media volume control from watch 2024-05-24 22:24:07 +02:00
Daniele Gobbetti
14c6ce1a3a Garmin protocol: store max packet size from DeviceInformationMessage
also adds messageType to the warnifleftover log message
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
6cb5184e2b Garmin protocol: various changes
- add FitFile class that deals with parsing and generating outgoing files
- consider all field definitions with number 253 as Timestamps [0]
- add support for "compressed timestamps" in fit file parsing. Those are not returned among the other normal fields but are available through a method of RecordData
- adjust the test cases

[0]48b6554d8a/fitdecode/reader.py (L719)
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
e814a63590 Garmin protocol: change naming and logic of several FIT classes
- refactor the logic of Global and Local messages
- add some Global messages with naming taken from [1]
- Global messages are not enum because there are too many
- introduce the concept of FieldDefinitionPrimitive
- add new Field Definitions
- add support for developer fields and array fields
- add test case for FIT files taken from [0]

[0] https://github.com/polyvertex/fitdecode/
[1] https://www.fitfileviewer.com/
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
b2f995b736 Garmin protocol: create helper class GarminByteBufferReader
separate the logic specific for GFDI messages from the generally useful logic.
Also centralize the logging in case of leftover bytes while parsing GFDI messages.
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
8524426b70 Garmin protocol: create custom GBDeviceEvent for weather request 2024-05-24 22:24:07 +02:00
Daniele Gobbetti
4054326535 Garmin protocol: use message enum instead of id in GFDI Messages 2024-05-24 22:24:07 +02:00
Daniele Gobbetti
c8c51064c3 Garmin protocol: refactoring and fixes of BaseTypes
The boundaries are enforced on the stored value when decoding, before applying the adjustments for scale and offset.
Also add some tests for the BaseTypes
Introduce new FieldDefinition for Temperature and WeatherCondition (removing the static class)
Add accessors for field data in the containing RecordData, thus keeping the FieldData private
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
71f497ecbb Garmin protocol: create specific field definition for day of week 2024-05-24 22:24:07 +02:00
Daniele Gobbetti
e323e7fbde Garmin protocol: move field encode/decode interface to the FieldDefinition
This allows for semantic subclassing the FieldDefinition.
A FieldDefinitionTimestamp subclass is introduced as example
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
4313fc833a Garmin protocol: fix invalid signed int base type value 2024-05-24 22:24:07 +02:00
Daniele Gobbetti
e691042265 Garmin protocol: add initial support for FIT messages
note: only weather message definition and data tested so far
also enable weather support for Instinct 2S and vivomove style
also cleanup some unused constants that have been migrated to new enums in GFDIMessage
additionally switch to new local implementation of GarminTimeUtils with needed methods
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
afe41ee563 Garmin protocol: fixes
- fix DEVICE_SETTINGS message ID
- put all status messages in own package
- allow protobuf handler to change the returned status message to signal unsupported requests
- fix various bugs
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
559a73cc5e Garmin protocol: initial refactoring and basic functionalities
This commit takes aims to bring many new garmin devices up to a working status, with basic functionalities such as:
- garmin protocol initialization
- basic message exchange
- support for some messages in Garmin own format
- support for some messages in protobuf format
2024-05-24 22:24:07 +02:00
Gordon Williams
7ea2261ba3 Bangle.js: honour the enable_calendar_sync setting
Allow handleCalendarSync to send a single `calendar-` command with all IDs before it starts adding new items (faster)
2024-05-24 09:26:37 +01:00
Gordon Williams
4da5a73cd6 Bangle.js - remove large lines of _____ from calendar (generated by google teams) 2024-05-23 09:48:37 +01:00
MrYoranimo
4edea1ed96 Huami: fix reminder message encoding
Potentially fixes #3548
2024-05-19 15:13:23 +00:00
José Rebelo
78c10c3da9 Amazfit Bip 5 Unity: Experimental support (untested) 2024-05-18 13:12:51 +01:00
Vitaliy Tomin
8946eff8fa Huawei: Set user info to device
* height
* weight
* age
* year of birth
* gender
2024-05-16 17:52:51 +00:00
Daniele Gobbetti
9c68acce2e Add support for exclusive audio focus
This pauses temporarily other apps that are playing sound while our notifications get spoken.
2024-05-14 16:06:03 +02:00
Martin.JM
9ba96231c3 [Huawei] Implement remote camera shutter 2024-05-13 21:28:43 +00:00
Martin.JM
4c4ba623c4 Add camera implementation
This is to support watches with remote shutter applets that do not
act as remote triggers for other apps automatically.
2024-05-13 21:28:43 +00:00
Arjan Schrijver
d9863786de Dashboard: Use more intuitive time markings in today widget
Fixes #3717
2024-05-13 21:07:43 +02:00
Daniel Dakhno
3b01422a45 device-cycling-sensor (#3705)
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/3705
Co-authored-by: Daniel Dakhno <dakhnod@gmail.com>
Co-committed-by: Daniel Dakhno <dakhnod@gmail.com>
2024-05-10 20:43:45 +00:00
Martin.JM
25b1f8f3fa [Huawei] Change to use MediaManager 2024-05-09 20:03:36 +02:00
José Rebelo
b909e123a4 Huawei Band 9: Fix device name 2024-05-08 22:49:57 +01:00
Damien 'Psolyca' Gaignon
39ea1774a4 [Huawei] Add Huawei Band 9 gadget 2024-05-08 21:49:12 +00:00
Damien 'Psolyca' Gaignon
f2c360ae8a [Huawei] Add Huawei Watch Fit 3 gadget 2024-05-08 21:49:12 +00:00
José Rebelo
41aab5135f Fossil Q Hybrid: Migrate global preferences to device-specific 2024-05-08 21:42:29 +00:00
Damien 'Psolyca' Gaignon
690d01dcac
[Huawei] Remove unneeded data 2024-05-08 22:48:47 +02:00
Damien 'Psolyca' Gaignon
02b052fcaf
[Huawei] Add Huawei Watch 4 Pro gadget
fix
2024-05-08 22:48:46 +02:00
ahormann
ac8d1ed6a0 New Device Soundcore Liberty 3 Pro (#3753)
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/3753
Co-authored-by: ahormann <ahormann@gmx.net>
Co-committed-by: ahormann <ahormann@gmx.net>
2024-05-07 22:39:13 +00:00
MrYoranimo
508a86b8ed Xiaomi: fix determining fall asleep time
Because the previous implementation of determining the time the user
falls asleep in a given time range would take the 24 hours in advance
into account, graphs displaying sleep data would erroneously indicate
that the user has been asleep since the start of the timeframe if
the user was asleep during the rollover of the time frame 24 hours
before.

This commit change the algorithm to only fetch the last sleep stage
sample and sleep range sample from the database that occurred before
the given time range. This saves having to process 24 hours worth of
samples before the time range in both cases, and prevents taking into
account irrelevant sleep ranges.
2024-05-07 13:33:52 +02:00
MrYoranimo
f581d57c01 Xiaomi: fix sleep stages not getting parsed from sleep details files
Not all packets use the payload length byte/short for the payload
length. Instead, some packets do not carry a payload, in which case
the payload length bytes are assumed to represent some state or flag.
Therefore, for packets with a type known not to carry a payload, the
payload extraction is skipped, allowing other packets to get
successfully parsed again.
2024-05-07 13:17:10 +02:00
José Rebelo
bed67ef1fb Xiaomi: Allow transliteration 2024-05-05 12:36:23 +01:00
José Rebelo
04237b7727 Prevent query for devices that have activity card disabled
Even if the activity card was disabled, all devices would be queried for
data. This slows down the UI when there are a lot of devices, especially
if multiple of them have data and only a few have the card enabled.
2024-05-04 23:51:19 +01:00
Alik Aslanyan
dc1ffdafcd Rework Armenian transliteration to handle more edge cases around mixed letters 2024-05-04 20:45:35 +04:00
José Rebelo
eaf7c03f61 Galaxy Buds 2: Fix recognition of some versions 2024-05-04 11:06:07 +01:00
José Rebelo
7892afa304 Xiaomi: Fix barometer
Thanks to MrYoranimo for the fix.
2024-05-03 22:27:57 +01:00
Martin.JM
4c93647aaf [Huawei] Add TruSleep warning 2024-05-02 20:59:08 +02:00
José Rebelo
0ff8774fce DebugActivity: Omit manufacturer for test devices if name contains it 2024-05-01 23:34:14 +01:00
rymut
7a50df61b8 [Huawei] refactor: removed isExperimental override 2024-05-01 22:35:12 +02:00
rymut
8860b4b678 [Huawei] fix: use correct coordinator for watch fit 2 2024-05-01 22:24:36 +02:00
Nyatsuki
b8852379f9
Translated using Weblate (Japanese)
Currently translated at 54.7% (1500 of 2739 strings)

Co-authored-by: Nyatsuki <Odamaki@yandex.ru>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ja/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:34:03 +02:00
Baka Gaijin
07a11addb9
Translated using Weblate (Japanese)
Currently translated at 54.6% (1494 of 2735 strings)

Co-authored-by: Baka Gaijin <lewdwarrior@waifu.club>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ja/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:34:02 +02:00
あぽろあぽろ
4dde33c342
Translated using Weblate (Japanese)
Currently translated at 54.6% (1494 of 2735 strings)

Co-authored-by: あぽろあぽろ <aporotilyoko0000@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ja/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:34:00 +02:00
Deleted User
294adf6da5
Translated using Weblate (Portuguese (Brazil))
Currently translated at 52.3% (1432 of 2735 strings)

Co-authored-by: Deleted User <Resume7202@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/pt_BR/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:59 +02:00
José Rebelo
5c7ea9131e
Translated using Weblate (Russian)
Currently translated at 94.8% (2589 of 2731 strings)

Co-authored-by: José Rebelo <joserebelo@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ru/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:57 +02:00
0que
27fa1a94fe
Translated using Weblate (Russian)
Currently translated at 94.8% (2592 of 2734 strings)

Translated using Weblate (Russian)

Currently translated at 94.8% (2589 of 2731 strings)

Co-authored-by: 0que <0que@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ru/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:56 +02:00
summoner001
80857758b4
Translated using Weblate (Hungarian)
Currently translated at 84.2% (2287 of 2716 strings)

Co-authored-by: summoner001 <summoner@vivaldi.net>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/hu/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:54 +02:00
Balage
153199b3b4
Translated using Weblate (Hungarian)
Currently translated at 83.1% (2258 of 2714 strings)

Co-authored-by: Balage <222855@buas.nl>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/hu/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:52 +02:00
Sergey Ponomarev
c7a29e4499
Translated using Weblate (Russian)
Currently translated at 95.1% (2580 of 2711 strings)

Co-authored-by: Sergey Ponomarev <stokito@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ru/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:51 +02:00
Nyatsuki
7b05853b7d
Translated using Weblate (Japanese)
Currently translated at 54.6% (1494 of 2735 strings)

Translated using Weblate (Japanese)

Currently translated at 45.8% (1255 of 2735 strings)

Translated using Weblate (Japanese)

Currently translated at 44.3% (1213 of 2735 strings)

Translated using Weblate (Japanese)

Currently translated at 42.3% (1157 of 2734 strings)

Translated using Weblate (Japanese)

Currently translated at 41.5% (1136 of 2734 strings)

Translated using Weblate (Japanese)

Currently translated at 41.5% (1135 of 2734 strings)

Translated using Weblate (Japanese)

Currently translated at 41.5% (1134 of 2731 strings)

Translated using Weblate (Japanese)

Currently translated at 41.4% (1131 of 2731 strings)

Translated using Weblate (Japanese)

Currently translated at 41.1% (1124 of 2731 strings)

Translated using Weblate (Japanese)

Currently translated at 39.3% (1069 of 2716 strings)

Translated using Weblate (Japanese)

Currently translated at 38.3% (1042 of 2714 strings)

Translated using Weblate (Japanese)

Currently translated at 36.8% (1000 of 2711 strings)

Co-authored-by: Nyatsuki <Odamaki@yandex.ru>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ja/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:49 +02:00
summoner001
d543dcdd80
Translated using Weblate (Hungarian)
Currently translated at 81.0% (2198 of 2711 strings)

Co-authored-by: summoner001 <summoner@vivaldi.net>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/hu/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:47 +02:00
0que
58c4242ba5
Translated using Weblate (Russian)
Currently translated at 95.0% (2578 of 2711 strings)

Co-authored-by: 0que <0que@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ru/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:44 +02:00
Hikaru
1d53259988
Translated using Weblate (Japanese)
Currently translated at 30.4% (826 of 2711 strings)

Co-authored-by: Hikaru <Hikali-47041@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ja/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:41 +02:00
Nyatsuki
f596c3b83c
Translated using Weblate (Japanese)
Currently translated at 30.4% (826 of 2711 strings)

Co-authored-by: Nyatsuki <Odamaki@yandex.ru>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ja/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:40 +02:00
ritchierope
2ed0be0bcd
Translated using Weblate (Hungarian)
Currently translated at 80.2% (2175 of 2711 strings)

Co-authored-by: ritchierope <zdg.acc@mailbox.org>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/hu/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:37 +02:00
summoner001
a94e1eb573
Translated using Weblate (Hungarian)
Currently translated at 80.2% (2175 of 2711 strings)

Co-authored-by: summoner001 <summoner@vivaldi.net>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/hu/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:35 +02:00
Stepan
6fd9414d37
Translated using Weblate (Russian)
Currently translated at 95.2% (2572 of 2700 strings)

Co-authored-by: Stepan <stepan.miroshnikov@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ru/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:33 +02:00
glemco
05ffd79815
Translated using Weblate (Italian)
Currently translated at 90.8% (2482 of 2731 strings)

Translated using Weblate (Italian)

Currently translated at 89.1% (2435 of 2731 strings)

Translated using Weblate (Italian)

Currently translated at 85.3% (2299 of 2694 strings)

Co-authored-by: glemco <glemco@posteo.net>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/it/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:31 +02:00
Yaron Shahrabani
82dfbce231
Translated using Weblate (Hebrew)
Currently translated at 98.1% (2681 of 2731 strings)

Translated using Weblate (Hebrew)

Currently translated at 98.5% (2673 of 2711 strings)

Translated using Weblate (Hebrew)

Currently translated at 97.4% (2642 of 2711 strings)

Translated using Weblate (Hebrew)

Currently translated at 95.5% (2590 of 2711 strings)

Translated using Weblate (Hebrew)

Currently translated at 95.7% (2587 of 2702 strings)

Translated using Weblate (Hebrew)

Currently translated at 95.5% (2581 of 2700 strings)

Translated using Weblate (Hebrew)

Currently translated at 95.3% (2575 of 2700 strings)

Translated using Weblate (Hebrew)

Currently translated at 95.4% (2574 of 2698 strings)

Translated using Weblate (Hebrew)

Currently translated at 96.2% (2569 of 2668 strings)

Co-authored-by: Yaron Shahrabani <sh.yaron@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/he/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:29 +02:00
0que
3d35e322e9
Translated using Weblate (Russian)
Currently translated at 95.1% (2568 of 2698 strings)

Translated using Weblate (Russian)

Currently translated at 95.1% (2563 of 2694 strings)

Translated using Weblate (Russian)

Currently translated at 96.0% (2562 of 2668 strings)

Co-authored-by: 0que <0que@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ru/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:28 +02:00
bowornsin
f2002fc9a9
Translated using Weblate (Thai)
Currently translated at 4.0% (110 of 2710 strings)

Translated using Weblate (Thai)

Currently translated at 3.2% (89 of 2702 strings)

Translated using Weblate (Thai)

Currently translated at 3.0% (82 of 2702 strings)

Translated using Weblate (Thai)

Currently translated at 3.3% (90 of 2664 strings)

Co-authored-by: bowornsin <bowornsin@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/th/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:25 +02:00
Linerly
9caf07657d
Translated using Weblate (Indonesian)
Currently translated at 100.0% (2735 of 2735 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (2734 of 2734 strings)

Translated using Weblate (Indonesian)

Currently translated at 99.3% (2712 of 2731 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (2711 of 2711 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (2710 of 2710 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (2702 of 2702 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (2700 of 2700 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (2698 of 2698 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (2694 of 2694 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (2668 of 2668 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (2664 of 2664 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (2639 of 2639 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (2631 of 2631 strings)

Co-authored-by: Linerly <linerly@proton.me>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/id/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:23 +02:00
Rex_sa
1c7c7ff4d6
Translated using Weblate (Arabic)
Currently translated at 100.0% (2738 of 2738 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (2735 of 2735 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (2734 of 2734 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (2731 of 2731 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (2716 of 2716 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (2711 of 2711 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (2710 of 2710 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (2709 of 2709 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (2702 of 2702 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (2700 of 2700 strings)

Translated using Weblate (Arabic)

Currently translated at 99.7% (2691 of 2698 strings)

Translated using Weblate (Arabic)

Currently translated at 99.0% (2672 of 2698 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (2668 of 2668 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (2664 of 2664 strings)

Translated using Weblate (Arabic)

Currently translated at 99.3% (2646 of 2664 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (2639 of 2639 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (2631 of 2631 strings)

Co-authored-by: Rex_sa <rex.sa@pm.me>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ar/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:21 +02:00
陈少举
a8dbb30139
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (2739 of 2739 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2738 of 2738 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2735 of 2735 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2734 of 2734 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.9% (2730 of 2731 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2716 of 2716 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2714 of 2714 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2710 of 2710 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (2706 of 2709 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2702 of 2702 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2700 of 2700 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2698 of 2698 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2694 of 2694 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2668 of 2668 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2664 of 2664 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2639 of 2639 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2631 of 2631 strings)

Co-authored-by: 陈少举 <oshirisu.red@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/zh_Hans/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:19 +02:00
arjan-s
59e9d01605
Translated using Weblate (Dutch)
Currently translated at 100.0% (2735 of 2735 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (2734 of 2734 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (2731 of 2731 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (2710 of 2710 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (2698 of 2698 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (2639 of 2639 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (2631 of 2631 strings)

Co-authored-by: arjan-s <a_gitlab@anymore.nl>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/nl/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:17 +02:00
Mikachu
e99a7654af
Translated using Weblate (Dutch)
Currently translated at 100.0% (2631 of 2631 strings)

Co-authored-by: Mikachu <micah.sh@proton.me>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/nl/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:16 +02:00
Oğuz Ersen
30de0cda70
Translated using Weblate (Turkish)
Currently translated at 100.0% (2739 of 2739 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2738 of 2738 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2735 of 2735 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2734 of 2734 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2733 of 2733 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2731 of 2731 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2716 of 2716 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2714 of 2714 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2711 of 2711 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2710 of 2710 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2709 of 2709 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2704 of 2704 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2702 of 2702 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2700 of 2700 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2698 of 2698 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2694 of 2694 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2668 of 2668 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2664 of 2664 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2639 of 2639 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (2631 of 2631 strings)

Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/tr/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:14 +02:00
gallegonovato
ccbfeb11d0
Translated using Weblate (Spanish)
Currently translated at 100.0% (2739 of 2739 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (2735 of 2735 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (2734 of 2734 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (2733 of 2733 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (2731 of 2731 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (2714 of 2714 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (2702 of 2702 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (2700 of 2700 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (2698 of 2698 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (2668 of 2668 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (2664 of 2664 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (2639 of 2639 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (2631 of 2631 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/es/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:12 +02:00
skdubg
e6e87f9ff7
Translated using Weblate (German)
Currently translated at 100.0% (2739 of 2739 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2738 of 2738 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2735 of 2735 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2734 of 2734 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2733 of 2733 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2731 of 2731 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2716 of 2716 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2714 of 2714 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2711 of 2711 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2702 of 2702 strings)

Translated using Weblate (German)

Currently translated at 99.8% (2695 of 2700 strings)

Translated using Weblate (German)

Currently translated at 99.8% (2693 of 2698 strings)

Translated using Weblate (German)

Currently translated at 99.7% (2691 of 2698 strings)

Translated using Weblate (German)

Currently translated at 99.7% (2687 of 2694 strings)

Translated using Weblate (German)

Currently translated at 99.7% (2661 of 2668 strings)

Translated using Weblate (German)

Currently translated at 99.7% (2657 of 2664 strings)

Translated using Weblate (German)

Currently translated at 99.5% (2652 of 2664 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2639 of 2639 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2631 of 2631 strings)

Co-authored-by: skdubg <skdubg@autistici.org>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/de/
Translation: Freeyourgadget/Gadgetbridge
2024-05-01 18:33:10 +02:00
Martin.JM
83fd09939f [Huawei] Fix PR #3742, add workout frequency and altitude 2024-05-01 16:32:27 +00:00
Damien 'Psolyca' Gaignon
2d32822ff8
[Huawei] Add Huawei Watch Fit 2 gadget 2024-05-01 12:03:59 +02:00
José Rebelo
18e08d13da Fix tests and linter 2024-04-30 20:43:23 +01:00
Martin.JM
1c2c1f710e [Huawei] Add support for workout calories and cycling power 2024-04-30 21:08:23 +02:00
José Rebelo
013ffe5559 Format pace as mm:ss 2024-04-29 19:50:57 +01:00
Martin.JM
bcd35b02da [Huawei] Add HR and SpO support for two watches
- Huawei Watch GT4
- Huawei Watch Ultimate
2024-04-29 10:58:24 +02:00
Gonk
b7d2808392 Added debug end call to the API 2024-04-28 23:19:24 +02:00
José Rebelo
9bef90a151 HPlus: Migrate global preferences to device-specific 2024-04-28 19:02:20 +01:00
Vitaliy Tomin
4d0d9e298e huawei: feature: File upload and watchface management (#3671)
Co-authored-by: Vitaliy Tomin <highwaystar.ru@gmail.com>
Co-committed-by: Vitaliy Tomin <highwaystar.ru@gmail.com>
2024-04-27 21:37:15 +00:00
aGoodUsername
aad03ddf0e bangle.js: normalized activity intensity 2024-04-27 05:22:48 +00:00
Damien 'Psolyca' Gaignon
c1e0b1fcd5 [Huawei] Enable sleep detection 2024-04-26 19:50:37 +00:00
José Rebelo
408f4b75dd Serbian transliterator: Map Đ and đ 2024-04-25 18:09:25 +01:00
José Rebelo
31408394b4 Serbian transliterator: Map Č and č 2024-04-25 18:08:55 +01:00
José Rebelo
61af26d7ce Add Serbian transliterator
As discussed in #3727
2024-04-25 17:51:45 +01:00
José Rebelo
500e930237 Refactor location service
- Refactor the code from a static global instance to a lifecycle-aware
  service instantiated in the DeviceCommunicationService
- Fix number of devices reported in the notification
- Prevents leaks and properly stops when devices get disconnected
2024-04-25 17:08:53 +01:00
José Rebelo
3799ffb72c Zepp OS: Sync calendar event reminders 2024-04-25 15:58:57 +01:00
José Rebelo
13d6c49bb5 Xiaomi: Sync calendar event reminders 2024-04-25 15:00:48 +01:00
Vitaliy Tomin
67cf9b2f00 huawei: Add huawei account support (#3721)
* this feature allows to pair HarmonyOS devices without factory reset to
  GB and Huawei Health.

* huawei account has form of 17 digit string and could be retrived from
  logcat filtering by huid=

Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/3721
Co-authored-by: Vitaliy Tomin <highwaystar.ru@gmail.com>
Co-committed-by: Vitaliy Tomin <highwaystar.ru@gmail.com>
2024-04-25 12:19:00 +00:00
Daniele Gobbetti
173e2d29b0 Include Organizer and Reminders when reading calendar events
Also use the named column indexes instead of numeric ids when retrieving the contents to make it more clear and more robust in case further fields are added later.

Reminders are set as absolute timestamp.
2024-04-25 11:46:34 +02:00
Marcel Alexandru Nitan
2190c82ed7 feature: Sleep as android support
Implement support for Sleep As Android with an usable example for ZeppOs
devices

Sleep as Android documentation:

https://docs.sleep.urbandroid.org/devs/wearable_api.html

Signed-off-by: Marcel Alexandru Nitan <nitan.marcel@protonmail.com>
2024-04-20 12:15:42 +03:00
Arjan Schrijver
f186053dab Dashboard: Add preference for drawing midnight at bottom of 24h chart 2024-04-18 20:06:56 +02:00
Arjan Schrijver
a2c861f66c Add preference for hiding bottom navigation bar 2024-04-17 21:58:23 +02:00
Damien 'Psolyca' Gaignon
4059566a25
[Huawei] Fix notification length 2024-04-16 23:10:01 +02:00
José Rebelo
c0d0b4dfbe Update hamcrest-library to 2.2 2024-04-15 23:45:55 +01:00
José Rebelo
bf01d9b346 Update protobuf dependencies 2024-04-15 22:04:45 +01:00
Damien 'Psolyca' Gaignon
84070dd0ba
[Huawei] Fix TimeZone offset calculation 2024-04-15 21:37:57 +02:00
Alik Aslanyan
f0a9ab7f98 Add Armenian transliteration 2024-04-15 19:58:27 +04:00
José Rebelo
9ae02f65ed Zepp OS: Change settings category to "calls and notifications" 2024-04-13 15:11:39 +01:00
Arjan Schrijver
523d02ae7f Generalize auto-pickup and read-notifications-aloud features 2024-04-13 14:10:54 +00:00
José Rebelo
717789dc48 Fix receiving shared gpx files 2024-04-13 13:55:25 +01:00
José Rebelo
320fccbaae Xiaomi: Fix crash when deleting last widget screen 2024-04-12 22:41:11 +01:00
MrYoranimo
5e6bf798a4 Xiaomi: implement setAutoReconnect on XiaomiSupport
The DeviceCommunicationService calls `#setAutoReconnect` on new device
supports before it calls the connect method. Since this method did not
get relayed to the connection-specific support classes, Xiaomi devices
using a BLE connection did not automatically reconnect because the
`mAutoReconnect` field in `AbstractBTLEDeviceSupport` never got set.
2024-04-12 20:54:49 +02:00
MrYoranimo
d39f86f3c8 Xiaomi: fix music volume command only increasing volume
Earlier Xiaomi devices would send either 0 or 100 for the requested
volume to indicate whether the app should increase or decrease the
phone's volume. Newer devices send the volume to change to, based on the
known current volume. We therefore need to check whether the device
increased or decreased the volume based on the current volume ourselves
in order to determine which event we want to fire.
2024-04-12 20:54:49 +02:00
MrYoranimo
35217aa405 Xiaomi: add support for 2x3 widget layouts
The Xiaomi Smart Band 8 Pro shows widgets in a two by three grid.
Previously, opening the widget configuration for such a device from the
device-specific preferences would crash Gadgetbridge because the layouts
in such a grid was not supported.

This commit adds definitions for layouts in a 2x3 grid to the
WidgetLayout enum, adds a definition for a full screen widget to the
WidgetType enum, defines rendering definitions for the new layouts to
WidgetScreenDetailsActivity, and defines translations for the new
layouts and type to XiaomiWidgetManager.
2024-04-12 20:54:49 +02:00
MrYoranimo
0b731611b9 Xiaomi: refactor WidgetManager for Redmi Watch 4
The Redmi Watch 4 reports both an unsupported widget type and layout
style:

- The firmware supports a screen layout for a single full screens
  widget, which is defined by layout ID 128;
- A full screen widget is a single 2x2 part, which is not supported.

This commit adds support for both the new layout and the new widget
type.

Furthermore, this commit refactors the XiaomiWidgetManager. Previously,
the supported layouts were determined by the types of parts supported by
the device. However, the supported layouts are reported by the device
through a bitfield in the widget capabilities message of which the purpose
was unknown, which is now used to determine the supported layouts.
2024-04-12 20:54:49 +02:00
MrYoranimo
796f26f74f Redmi Watch 4: initial experimental support 2024-04-12 20:54:49 +02:00
upalse
aaa66df082 Add menu items for NFC shortcuts on Mi Band 6 NFC. 2024-04-12 17:20:21 +01:00
Daniele Gobbetti
ff9207cd9a Nothing: add option to read aloud incoming notifications.
Also fixes a bug where the call would be accepted twice if the tts was not bound.
2024-04-12 16:51:49 +02:00
Daniele Gobbetti
1a8689d4bf Add "Delta Chat" to the recognized applications and as generic chat 2024-04-12 09:21:54 +02:00
Arjan Schrijver
cd8e9b5ea6 Dashboard: Fix crash on start when Devices is first screen 2024-04-10 22:11:45 +02:00
Arjan Schrijver
6f103b2897 Dashboard: Implement horizontal swiping and fix fragment related crashes 2024-04-10 21:53:03 +02:00
Ganblejs
96bbd578c8 Bangle.js: add wake on notification response OPEN 2024-04-10 19:36:17 +00:00
Ganblejs
594c409067 WakeActivity: add start method 2024-04-10 19:36:17 +00:00
Ganblejs
dae5a77b17 Add setting to wake+unlock on OPEN notif response 2024-04-10 19:36:17 +00:00
Daniele Gobbetti
e00d234f09 Add GENERIC_PHONE and GENERIC_CALENDAR NotificationType handling 2024-04-10 14:20:20 +02:00
Damien 'Psolyca' Gaignon
83a010f42e [Huawei] Ask pincode only on first connection 2024-04-09 19:06:39 +00:00
Damien 'Psolyca' Gaignon
52e61e36fe [Huawei] Rename needsAuth to firstConnection 2024-04-09 19:06:39 +00:00
Arjan Schrijver
065f8cdaa7 Fix DeviceService not starting when the dashboard is the initial screen 2024-04-09 10:46:11 +02:00
Arjan Schrijver
50c7520349 Dashboard: Material 3 month changing buttons in calendar 2024-04-09 09:34:58 +02:00
Arjan Schrijver
8ce0983cb4 Galaxy Buds Live: Update device settings to new structure 2024-04-09 06:55:53 +00:00
Arjan Schrijver
cb13c7bc05 Fossil/Skagen Hybrids: Update device settings to new structure 2024-04-09 06:55:53 +00:00
José Rebelo
7a4cd3ea78 Remove deprecated general auto-reconnect preference 2024-04-08 23:29:04 +01:00
MrYoranimo
0daf283853 BtBRDeviceSupport: fix Gadgetbridge crashing when queue is destroyed during initialization 2024-04-07 20:25:52 +00:00
MrYoranimo
ebf0dbc2d0 Xiaomi: remove battery-related request timer on disconnect 2024-04-07 20:25:52 +00:00
MrYoranimo
cb44982edb BtLEQueue: make NotifyAction more verbose 2024-04-07 20:25:52 +00:00
MrYoranimo
3ad389d57d BtBR/Xiaomi: fix disconnection logic/state handling 2024-04-07 20:25:52 +00:00
José Rebelo
75dc546aa9 Update threetenabp to the latest 2024-04-07 14:39:03 +01:00
Arjan Schrijver
a34964e712 Dashboard: Material 3 day changing buttons 2024-04-06 21:26:43 +02:00
Daniel Dakhno
9502a0dcfb Device scan: Fix permission check on Android 11 and below (#3659)
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/3659
Co-authored-by: Daniel Dakhno <dakhnod@gmail.com>
Co-committed-by: Daniel Dakhno <dakhnod@gmail.com>
2024-04-06 10:46:55 +00:00
Daniele Gobbetti
a37f0c89bb Nothing: add adjustable delay for auto-pick-up of calls
- Also add a (basic) Application wide TextToSpeech helper
- use the TextToSpeech to announce the caller name or number
2024-04-05 19:55:22 +02:00
Daniele Gobbetti
c4747e2e23 Nothing: add option to auto-reply to incoming phone calls
The new preference to toggle the auto-reply behavior is not
prefixed with the device name, as I guess it could be useful
also for other bluetooth headphones
2024-04-05 19:55:22 +02:00
Arjan Schrijver
43fddd0110 Dashboard view (#3478)
This adds a new dashboard-type view to Gadgetbridge. The new dashboard activity displays several widgets with aggregated statistics from multiple devices. New preferences are added to allow configuration of the dashboard and its widgets. A new bottom navigation bar is added to switch between the Dashboard and Devices views.

Some issues that prompted this feature and provided inspiration for the implementation:
- https://codeberg.org/Freeyourgadget/Gadgetbridge/issues/301 (More Intuitive User Interface)
- https://codeberg.org/Freeyourgadget/Gadgetbridge/issues/3074 (Ability to merge historical data from several devices)

Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/3478
Reviewed-by: José Rebelo <joserebelo@noreply.codeberg.org>
Co-authored-by: Arjan Schrijver <a_gadgetbridge@anymore.nl>
Co-committed-by: Arjan Schrijver <a_gadgetbridge@anymore.nl>
2024-04-04 19:28:04 +00:00
Martin.JM
e4cac887cc [Huawei] Auto detect GPS data support 2024-04-04 20:01:44 +02:00
Martin.JM
88746d5706 [Huawei] Hookup GPS values 2024-04-04 19:31:12 +02:00
Martin.JM
22720514b9 [Huawei] Add GPS packets 2024-04-04 19:26:54 +02:00
Damien 'Psolyca' Gaignon
a29187a034
[Huawei] Fix long notification and clean Notifications class 2024-04-03 23:05:53 +02:00
José Rebelo
64a0b716f0 Fix crash when connecting on some phones 2024-04-03 21:22:52 +01:00
José Rebelo
9b285f16bf DeviceCommunicationService: Notify device connections right away
As noted in #3676, having a lot of bluetooth classic devices might make
the connection take some time, which would only send all the updates at
the end.

Send the updates right away for each device.
2024-04-02 22:04:12 +01:00
MrYoranimo
7fb0d19374 Xiaomi: fix GB crashing when sending command to disconnected SPP-based device 2024-04-02 21:02:42 +00:00
MrYoranimo
28066b9b7d DeviceCommunicationService: fix crash when enabling Bluetooth adapter 2024-04-02 21:02:42 +00:00
Marcel Alexandru Nitan
a76b9af80c zepos: fix timezone for sunrise/sunset time; closes #3673, closes #3400 2024-04-02 20:46:08 +00:00
Damien 'Psolyca' Gaignon
f9268d981e
[Huawei] Simplify HuaweiSettingsCustomizer 2024-04-02 18:53:37 +02:00
Damien 'Psolyca' Gaignon
10cd4e09b1
[Huawei] Add enable SpO2 force option 2024-04-02 18:53:37 +02:00
Damien 'Psolyca' Gaignon
93bb8bdc08
[Huawei] Fix force DND support 2024-04-02 18:53:36 +02:00
Damien 'Psolyca' Gaignon
0e152ea3e2
[Huawei] remove unneeded file 2024-04-02 18:53:36 +02:00
Damien 'Psolyca' Gaignon
fd5cab2b4c
[Huawei] Add enable HeartRate force option 2024-04-02 18:53:36 +02:00
Damien 'Psolyca' Gaignon
23c39280c7
[Huawei] Rework settings menu with sub-screens 2024-04-02 18:53:35 +02:00
Damien 'Psolyca' Gaignon
c63fa19550
Add Health root preference screen 2024-04-02 18:53:15 +02:00
MrYoranimo
260dec5b27 DebugActivity: send list of weather specs when pressing 'set weather' 2024-04-01 21:57:12 +02:00
MrYoranimo
a5ff360497 Xiaomi: rework weather service 2024-04-01 21:57:12 +02:00
José Rebelo
033e977491 Bangle.js: Add setting to disable notifications 2024-03-31 23:08:14 +01:00
José Rebelo
0fb2d1272a Xiaomi Smart Band 8 Active: Fix discovery 2024-03-31 18:03:36 +01:00
Damien 'Psolyca' Gaignon
7b22b8880d
[Huawei] Fix reconnection issue 2024-03-31 18:28:49 +02:00
José Rebelo
6853e3671b Prevent text cutoff on all checkbox preferences 2024-03-31 07:46:47 +00:00
Vitaliy Tomin
4986fdd0ea Huawei: Use generic notification type instead of wechat
* this match stock application Huawei Health
* devices show proper applications icons if it exist in firmware,
when type set to Wechat only wechat icon used
* sender name was not shown with wechat type
2024-03-31 07:04:25 +00:00
José Rebelo
c85a0edace Update roboelectric to 4.12, org.json to 20240303 2024-03-30 23:02:31 +00:00
José Rebelo
88a1e7bb59 Huawei: Group pace values in activity summary pace group 2024-03-30 21:42:18 +00:00
Martin.JM
83d2aaf30e Group new Huawei workout activity entries 2024-03-30 22:07:02 +01:00
Martin.JM
ff37766510 Huawei workout change strings to ActivitySummaryEntries 2024-03-30 21:34:27 +01:00
Martin.JM
4ad77c8232 Huawei Workout improve pace information 2024-03-30 21:34:27 +01:00
Martin.JM
e9090ec082 Huawei Workout use translatable strings 2024-03-30 21:34:27 +01:00
Martin.JM
e8ddc1fd17 Huawei Workout cleanup of unknown values 2024-03-30 21:34:27 +01:00
Damien 'Psolyca' Gaignon
7a752381cc
[Huawei] Remove SendAccountRequest 2024-03-30 15:50:49 +01:00
José Rebelo
904007614d Fix crash during discovery 2024-03-30 09:02:18 +00:00
José Rebelo
81aef0bf35 Add support for multiple weather locations
Introduce the concept of primary and secondary weathers:

* Primary weather keeps the same behavior as previously across all weather providers, so it's non-breaking. This location is not necessarily the current location, just the primary weather location set by the user.
* The GenericWeatherReceiver now has a new extra WeatherSecondaryJson, that receives a json list with secondary weather locations.

It's guaranteed that the primary weather always exists, so the list of WeatherSpecs provided to devices is never empty. Update all support classes accordingly.
2024-03-29 21:10:40 +00:00
José Rebelo
57fd857de5 Set navbar color to match theme 2024-03-28 23:13:08 +00:00
José Rebelo
9678188395 Scannable: Fix device settings 2024-03-28 21:58:30 +00:00
Daniel Dakhno
8cf87a418b Added scannable-only devices (#3621)
Co-authored-by: Daniel Dakhno <dakhnod@gmail.com>
Co-committed-by: Daniel Dakhno <dakhnod@gmail.com>
2024-03-28 21:07:05 +00:00
~noodlez1232
bf762a25a5 Cleanup and update AsteroidOS
1. Added icons to the notifications
2. Cleaned up a lot of the DeviceCoordinator code (Since a lot of them
   have default implementations now)
2024-03-28 12:30:20 -07:00
Gordon Williams
1165a5d03c Revert "Bangle.js: add support for SMS replies" - not needed as per #3654
This reverts commit 323f8028e0.
2024-03-28 08:45:14 +00:00
Gordon Williams
323f8028e0 Bangle.js: add support for SMS replies 2024-03-28 08:31:07 +00:00
Gordon Williams
665656ddc0 Bangle.js: Fix message reply (and add .reply in notify if message supports reply)
NotificationListener now stores the handle ID in wearableAction.handle rather than hard-coding the calculation
Should fix ZeppOS too which was copy&paste from Bangle.js
2024-03-27 10:50:50 +00:00
Misaka 0x4e21
d68cb8c743
Huawei: Fix cycling workout type
Cycling workout type is actually 3 instead of 5.
2024-03-26 19:35:53 +08:00