Today, a new version of Amazfish was released, marking another step forward for the project. The previous version came out three months ago, and this update brings several notable improvements. Enhancements were made in the following areas: improved Bangle.js support, easier translations, refined user experience, and better pairing functionality.
Bangle.js
Support for Bangle.js has been significantly enhanced. While still incomplete, the functionality has roughly doubled from 25% to 50% (very approximately). The previous version offered only basic support for the device, but this has now been expanded to include music control and a “Find My Phone” feature, both implemented during the SailfishOS hackathon.
The latest addition is automatic time synchronization upon connection—a crucial feature for a timepiece! A rough implementation was quickly developed in response to a GitHub issue and thoroughly tested during the OpenAlt conference. If you’d like to see more features implemented, you might have to send me a device. 😉
Translations
A great user experience requires the app to speak your language. Previously, translations were managed manually using the linguist
tool from the Qt framework, and new translations were added to the repository via pull requests. Not all strings were included in translations, and the daemon didn’t even load translations at all.
Now, translations are integrated with Weblate, which provides free hosting for open-source projects. Setting this up was not straightforward; it initially seemed sufficient to install the Weblate GitHub application, but the system only started working after adding a new contributor with the email hosted@weblate.org
. However, as I’m just a contributor and not the repository maintainer, I’m unsure what ultimately resolved the issue.
The only remaining manual step is enabling the compilation of a new language. Additionally, as part of improving the user experience, screenshots were added and linked to translated strings. This allows translators to see where strings are used in the app, improving the quality of translations. However, not all strings have associated screenshots.
User experience
The application currently supports three flavors: SailfishOS, Ubuntu Touch, and Kirigami. There’s also a generic QtQuick Controls version, but it is effectively disabled at the moment. The app runs on various platforms with different themes and is compatible with a range of Qt versions, from Qt 5.6 (used on SailfishOS) to newer ones. This diversity presents unique challenges in user interface development—going beyond the usual hurdles of screen resolutions, shapes, and cutouts.
An intermediate layer in the repository (/ui/qml/components/platform.*
) helps standardize the API across platforms. Several bugs related to these generic components were fixed, including issues with broken attached pages and missing busy indicators. Minor adjustments like label margins and number formatting were also made to improve the UI and avoid overlapping text.
With version 2.5.0, the CoverPage feature returned to SailfishOS. CoverPage, a unique feature of SailfishOS, displays important information in the task switcher rather than a static thumbnail. It also enables app control, such as showing unread email counts or switching music tracks without opening the app. CoverPage was part of Amazfish before the migration to universal components, and now it’s back.
Pairing issues
Supporting multiple platforms comes with its challenges. Amazfish uses its own Bluetooth interface, qble
, which acts as a Qt wrapper for BlueZ’s D-Bus interface.
In previous versions, InfiniTime devices experienced significant pairing issues, leading to alternative methods being used as workarounds. However, when implementing support for AsteroidOS, the same code was copy-pasted, which unintentionally introduced issues specific to that platform.
Fortunately, with updates to InfiniTime, the pairing process has been refined and now works more reliably. Adjustments have also been made for AsteroidOS, resolving the compatibility problems caused by the copied workaround.
Pairing behavior still varies depending on the platform:
- MATE Desktop with Blueman: Pairing works seamlessly. The authentication agent displays a dialog for confirming or entering a code, allowing the process to complete without issues.
- Ubuntu Touch: The authentication agent (
lomiri-system-settings
) supports pairing, but the dialog always appears within the System Settings app. Users must manually switch to the app to interact with the dialog. If the System Settings app is not open, the pairing dialog does not appear at all, making the pairing process cumbersome. - Plasma Mobile: The Bluetooth agent handles confirmation dialogs well, but dialogs for PIN entry, such as those needed for InfiniTime devices, fail to appear.
If you encounter issues reconnecting your device, it’s recommended to remove and re-pair it. In Blueman, use the “untrust” button; in Ubuntu Touch, select “forget device.”
Bluetooth compatibility often feels more like an art than a science. Personally, I’ve found USB dongles to be more reliable than the built-in Bluetooth on my ThinkPad.
If your device behaves strangely, rebooting it often resolves the issue. Additionally, connectivity tends to degrade in noisy environments with many competing devices, so reducing interference can improve performance and stability.
@blogs I look forward to trying it out using my PineTime. Will the update be released for Ubuntu Touch as well?
@carbonatedcaffeine @blogs Ubuntu Touch package was uploaded to open-store yesterday around 18:30 CEST.
https://open-store.io/app/uk.co.piggz.amazfish