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
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
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
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
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
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
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
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
- 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
* 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>
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.
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>
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.
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.
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.
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.
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
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>
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.
* 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
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.
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
This patch adds support for current weather, and next 6 days' weather. Condition mapping added to align with the available icons on the watch.
It also transmits the hourly condition and temperature for the coming 24 hours as part of the update.
Tested on CMF Nothing Watch Pro firmware 11.0.0.50 with weather data cooming from Breezy Weather (using Accuweather)
For current day:
- Weather symbol shows
- Name of current location shows (long names scroll)
- Current temperature shows
- Written condition shows (e.g. "Cloudy")
- Min/max temperatures show
- Air quality indicator shows
For upcoming days:
- Weather symbol shows
- Min/max temperatures show
- Name of day shows (patch doesn't touch this)
Nothing CMF Watch Pro: Use putShort() for air quality indicator; fix max location length
- Using putShort() as suggested from code review - tested to give same result
- Reduced max location length to 16 bytes, as 32 was not working
Nothing CMF Watch Pro: Better handle limited data from weather providers
- Check max length of daily and hourly datasets
- Populate with dummy data if insufficient data available
- Use null as the weather condition in any situation where no data available
Nothing CMF Watch Pro: If hourly weather data is missing, use current data
This should create a better fallback behaviour if a weather source is lacking hour-by-hour data.
Assuming the current data will apply in the next hour is less messy than showing placeholder (inaccurate) figures.
Nothing CMF Watch Pro: Allow location names of up to 30 characters, improve string processing
A lof of devices will simply work anyway even if already paired in
Android bluetooth settings. Discover them by default, but warn the user
if the device is not known to pair correctly if already paired in Android
settings. Allows this warning to be disabled to known working devices.
Bangle.js:file handling LOG.warn -> info
Bangle.js: sync file can't escape device directory
Naïve solution. I wanted to use `Path.normalize()` but Android Studio
said it could not be used from the static context. This does not attempt
to normalize the path, but just remove the special names `..\` and `.\`.
Bangle.js:simpler hindering of escaping device dir
These two values were swapped, meaning a double press of play/pause was needed to change state.
This also fixes the wrong play/pause button state showing during playback.
Tested on firmware 11.0.0.50
... might not be necessary. Since I got the fetching to work with
intervals on the the Bangle.js side it's been stable.
Didn't manage to make packet counting work yet.
Bangle.js: WIP add supportsActivityTracks
Bangle.js: testing flow of info
Bangle.js:WIP receive and store csv from Bangle.js
Bangle.js:store and transmit ID of last synced log
bangle.js:activity tracks, act on completed fetch
... of the recorder csv file.
Bangle.js: Activity tracks, now in database
... but not all data is persisted correctly I think. It's presented as
'Unknown activity'.
Bangle.js:Activity tracks, try to add gps info
I haven't tested with recordings where I have gps values, so far only
empty values. With empty values I currently get "This activity does not
contain GPX tracks" when trying to use the GPXExporter.
Bangle.js: Activity tracks, now adds GPS points
... to the activity to be shown when on the "Sport Activity Detail"
screen.