General

In November, we shipped the Birch batch of Librem 5, fixed audio routing, made changes to various apps and shared Librem 5 at various meetups and talks.

A couple of other articles appeared about software development: Oxidizing Squeekboard described the use of the Rust programming language in the Librem 5’s virtual keyboard, and the Linux 5.4 report covered Purism’s contributions to Linux 5.4.

The software initially included with Birch was tagged, ready to be installed on the phones that shipped out. The built-in software is provided as part of the amber-phone distribution of PureOS, meaning that the core applications are automatically updated if the user enables updates.

On a similar note, the Librem 5 Development policy document was created to discuss how core software development is done for the phone’s system software. While this is aimed at those working for Purism, it is also of interest to the wider community around the Librem 5.

Librem 5 team members presented talks at Linux App Summit 2019 in Barcelona. Adrien Plazas gave a talk called How I Squeezed GNOME Into Your Pocket and Tobias Bernard co-presented There is no “Linux” platform which he also blogged about.

Audio Routing

There were issues all through the software stack that needed to be fixed for audio routing to work.

First we needed to get the codec talking to the i.MX8MQ processor by making sure that the audio codec supported 48 kHz samples and adjusting the device tree to locate the modem on the correct SAI interface. SAI stands for Synchronous Audio Interface.

The BroadMobi modem needed to be configured to use a 48 kHz sample rate in stereo.

We needed to have a proper alsaucm setup so that the audio could be

played and recorded in userland using the new kernel setup.

Once we had userland talking to the hardware then the audio needed to get

routed from the modem to the codec. This is primarily the job of Wys but when the ringtone was played it would kill all the audio channels.

The cause of this was PulseAudio changing the sampling rates, and the fix was to force it to use the 48 kHz sample rate.

The last problem was the issue of excessive audio latency, which was solved in upstream PulseAudio and complemented with a fix to minimize latency in Wys.

Documentation

Borjan Tchakaloff took the opportunity to update references to the Nightly GNOME Apps repository in the developer documentation. This was much appreciated as the old location of the repository caused Flatpak to complain.

A quick effort to present copyright and license information in a readable form for users resulted in the creation of a tool to summarize the installed packages on the phone.

We also updated the recommended GTK and GNOME versions to 3.34, following some helpful tips from Matrix chat.

Chats

Integration between Chats and Contacts continues to improve, with SMS contacts being the focus of part of the month’s work. SMS contacts are now directly added to Contacts to keep everything consistent, but it is also possible to start a new conversation by entering a phone number directly in the Start Chat dialog. Handling of phone numbers for SMS messages sent from other applications is now more robust.

A German translation of the application has been added.

Other user interface improvements include improved filtering behavior, better handling of UTF-8 names in avatars, the inclusion of XMPP status in the user information dialog and support for custom user avatars for XMPP users and accounts. Several general UI issues (icon sizes, message text view ‘height jitter’, button styling, newline issues) also got some attention.

Behind the scenes, Chats now provides its own schema for GSettings.

Keyboard

The keyboard now adapts itself better to the different screen dimensions of landscape displays, meaning that it should be easier to use the keyboard when the phone is turned on its side.

A separate tool for verifying layouts should make it easier for users to create and submit new ones. The layout tests now treat warnings as failures for extra strictness.

The language switcher has been polished to look and feel more native to the phone environment, following the user’s choice of theme and responding to the user’s choices immediately instead of waiting for the menu to close.

Andreas Rönnquist submitted a Swedish layout to join the other western European and Scandinavian languages supported by Squeekboard.

Libhandy

Progress was made on the keypad used for the dialler widget.

Leaflet mode transitions received a fair amount of attention. First, over and under leaflet transitions were added, then they were unified with the leaflet’s existing mode and child transition types were also unified.

Calls

Since Calls is tested on different sets of hardware, two of the underlying components, Wys and Haegtesse, now use a different approach to determine which hardware they are running on. This stops Wys and Haegtesse from conflicting with each other. As a result, Wys no longer needs a hardware configuration file, so it has been removed, along with the phone-voice-call-audio.target systemd unit. This machine check code now supports the Birch devices.

Calls now has a window to display call records as per the design. This will be developed to add avatar support.

Settings and Initial Setup

Some user interface adjustments improved the appearance of the night light page.

The state of the WWAN (modem) can now be toggled using a switch in the header bar of the window. This can be used to conveniently enable and disable cellular communication when the modem is switched on in hardware.

As a fallback, the Initial Setup wizard will choose American English as the default language, avoiding problems when the language is not set appropriately.

Kernel

Work continues to improve power consumption by implementing devfreq driver which allows the frequency of the I/O buses to be reduced. This involved changes to the u-boot-builder tool and the trusted firmware. Changes to the kernel to avoid problems with the display at low frequencies as well as a workaround to adjust frequencies when the power key is pressed also try to find a balance between usability and power saving.

Efforts to save power also involve implementing busfreq support, where the speed of the DDR memory can be reduced as needed. This involved making it work on the devkit.

An issue where the display would be shifted after a resume was fixed.

Support for Bluetooth audio has been enabled, making it possible to use Bluetooth headsets.

The U-Boot bootloader was updated for phones in the Birch shipment.

Changes to the display stack were backported to Linux 5.3 so that the mxsfb driver could be used.

The flashing scripts were updated for Birch devices, dropping the recovery U-Boot image, updating them for the unified kernel and U-Boot and adding support for the board types in the flashing tool.

Shell

Phosh versions 0.1.3 and 0.1.4 were released.

Phoc, the phone compositor, has been migrated to wlroots 0.8.1 (also here).

A crash related to the way layer-shell subsurfaces reference their parents was fixed, solving a problem with the keyboard’s language menu.

In environments where a physical keyboard is connected, things can become confusing. By displaying the keyboard layout in the top panel and responding to input source and connectivity changes, we can make the user experience less confusing.

In a related enhancement that improves overall convenience, the input source and keyboard layout can now be switched using a keyboard shortcut.

A change that affected setting the brightness was fixed following the GTK version switch.

Meanwhile, the Debian packages for Mesa were updated to 19.2.4 and an autopkgtest was added to make sure that linking against EGL/GLES continues to work.

Design

A merge request for responsive error pages in Epiphany was merged, making them more usable on the phone.

Work is ongoing to compile an initial minimal set of emoji for the keyboard layout.

A blog post on the GNOME Shell hackfest described work on GNOME Shell issues.

Another blog post about the Linux App Summit expanded on the discussion about platforms raised by the talk co-presented by Tobias.