First Steps with elementary Development

I've started to get familiar with elementary development. While splitting my time with Xubuntu, I've contributed improvements for indicators and the Files app in elementary OS. Getting started has been a breeze!

First Steps with elementary Development

Nearly two weeks have passed since I announced that I would be exploring development on elementary OS. I had more positive feedback than I expected, so thanks everybody for your awesome support! Since the announcement, I've been getting my feet wet with a few different elementary-related projects, and I think I'm starting to get the hang of things.

Wingpanel Ayatana Indicator

I've long been a fan of indicators, the modern replacement for Systray icons. Fewer apps are using Systray these days, and it has been deprecated across several desktops and toolkits. Replacing the Systray are AppIndicators (of the Ubuntu and Ayatana variety) and StatusNotifierItems. These have pretty wide support and are commonly used by messaging apps (Discord, Slack, Telegram) and cloud syncing apps (Dropbox, pCloud, SyncThing).

Adding support for elementary 6 "Odin"

Odin Support by bluesabre · Pull Request #16 · Lafydev/wingpanel-indicator-ayatana
This branch adds support for elementary 6 Odin and updates the Debian packaging to a recent standard. Since this branch updates the dependencies to the latest Wingpanel and Granite, it's not co...

With a few development library updates, the existing version of the indicator did not support the upcoming Odin release. After a bit of hacking and experimentation, I got the package working fully. Check out the above pull request in case you need to get your indicator fix. In a less useful update, I also refreshed the packaging for elementary 5 "Hera".

Files: Tabular numbers in the file transfer dialog

Use tabular numbers in file transfer dialog · Issue #1567 · elementary/files
Problem When a file is being transferred, the string showing the progress jitters all over the place due to the differing widths of the numbers. progress.mp4 Proposal We use tabular numbers in the ...

I found this issue while browsing the Bitesize Issues found in the Desktop Development section of elementary's Get Involved page. Tabular numbers would prevent the file transfer dialog from jumping around, which seemed like a nice improvement. With the referenced code example, I was able to quickly identify the needed changes and get my hands dirty with a bit of Vala. After a code review and a small tweak, my pull request was merged!

Wingpanel Sound Indicator

After browsing the various projects and open issues, I became interested in hacking on the Wingpanel Sound Indicator. On the Xfce side, I've maintained the Xfce PulseAudio Plugin and Parole Media Player for quite some time and have some relevant experience to apply with MPRIS and DBus.

Fixing Spotify's missing artwork

Spotify album art stopped showing · Issue #145 · elementary/wingpanel-indicator-sound
I don’t really know why, but about a week ago the sound indicator stopped showing the album art from the currently playing music. But still works fine on notifications for example.

When I'm at my computer, I've always got Spotify playing in the background. Having the album artwork in the sound indicator is a nice touch, so I wanted to dig in and see if I could land a fix. Using DFeet, I was able to get the URL Spotify was sending, found it was returning a 404 response, and ultimately came across this post on the Spotify Community about the invalid URL.

I threw together a simple pull request to replace the invalid URL with a currently known working one (Vala makes this super simple) and sent it along. A couple of the elementary developers quickly responded with some valid feedback, including the simple fact that Spotify needs to fix their own app. If any Spotify developers are reading... please? :)

Bluetooth audio devices listed as music players

Bluetooth audio device listed as music player? · Issue #89 · elementary/wingpanel-indicator-sound
One of my bluetooth headphones is listed as if it's a music player in the sound indicator: It's also listed as monitor by PulseAudio volume control: But, my other bluetooth device is also l...

The Wingpanel Sound Indicator conveniently shows available media players, phones, and other devices that can be controlled via MPRIS. A device I didn't expect to see in the list was my Bluetooth headphones! Unsurprisingly, the media controls didn't have any effect on my headphones.

One of these things is not like the other.

I did some more digging in DFeet, but the most useful property I could find was that this player uses the audio-card icon. I tracked down the icon-related code in bluez and used that as the basis for a new issue:

org.bluez.MediaPlayer1 interface available for bluetooth headphones · Issue #106 · bluez/bluez
The org.bluez.MediaPlayer1 interface seems to be made available for bluetooth headphones, including my "Air by AfterShokz". However, this interface doesn't do anything and doesn't...

Here's hoping that one can get fixed upstream! If not, I'll continue exploring options for hiding this device in the Sound Indicator.

What's next?

I'm having fun exploring the elementary code and issue trackers, and I think I'll be able to make some meaningful contributions to be project. I may spend a bit more time on the Wingpanel Sound Indicator before getting more out of my comfort zone with some larger projects. I've also got some updates coming for Xubuntu in the next couple of days, so watch my blog and Twitter for updates.

In case you'd like to join in, I recommend checking out the Get Involved page for ways to contribute. Additionally, elementary announced yesterday that they did not get accepted into the Google Summer of Code this year, but shared a list of potential projects to work on. There's some pretty substantial projects listed here, so if you're looking for something to do, this seems like a good opportunity.