Bonjour, Element on Android!

July 28, 2020

Hopefully by now you have all upgraded to Element, with Android users leaving behind the old legacy Riot Android app. If you haven’t already been previewing it via RiotX (which has been in beta for a year now), it should hopefully feel like a game changer: as we said in our Welcome to Element post, we’ve got more than just a rebrand going on here!

But let’s rewind a bit.

On the 12th of July 2019 (yep, just over a year ago), we released the very first version of what was a complete rewrite of the Riot Android app. This was the beginning of a new era for us; where our UX is intuitive and polished, our apps are fast, and code is modern.

The step change was needed because, since it was launched in 2015, Riot Android (or Vector as it was called originally) had accumulated quite a lot of technical debt. After 8,113 commits and 1,270,939 changed lines of code, it was hard to maintain, and its limitations were starting to show in the user experience.

So off went the Android team, led by our UX team, setting up for a year-long marathon, and here goes the result!

Element is built in Kotlin, rather than Java, so it has a much smaller and more maintainable codebase. It means we’re using all the latest Android frameworks (all the good stuff from jetpack/androidx) and the latest approaches resulting in a clean architecture, well defined dataflows and a proper DB storage layer at last.

However, the biggest focus on Element Android has been on improving the user experience - throwing away all the stuff which evolved organically in Riot/Android, and replacing it with a user interface which was deliberately and methodically designed and implemented from the outset. Some of the biggest user-facing changes we’ve made for Element Android are:

Radically simplifying tabs.

Riot previously had separate tabs for Home (showing all icons of your recent rooms on one page, complete with… opinionated horizontal scrolling), and then separate tabs for Favourites, People and Rooms, which duplicated the contents of the Home page, but adding in room previews.  Finally, we had the Communities tab, letting you browse the users and rooms of the communities you’re in, which is a bit of a niche use case (especially given Communities need more love to fulfil their full potential in Element).

So we’ve simplified these five tabs into two: one for people (DMs), and one for rooms.  There is no longer any duplication.  Favourites sit at the top of the respective two lists, and you always get a one-line preview of the most recent activity in the room.  Communities have become a side-panel you get at by tapping on your avatar, along with Settings.

This should be incredibly familiar to folks used to WhatsApp, Telegram or other messengers - and in fact is almost more simple.  For power users, we’ve kept a secret ‘Notifications’ tab around too, which you can enable in Settings: Labs, which highlights the unread rooms, just to help you avoid missing any messages.

Reactions! Edits! Mentions! oh my!

We’ve had the ability in Matrix to react to messages with emoji, edit messages, and @-mention people as a fancy embedded ‘pill’ for a while now - but poor Riot/Android users had to go without, as we implemented these on RiotX instead (given the last thing we wanted was to burn time implementing them on both codebases).  But now RiotX is Element, the spell is broken and everyone can finally enjoy cross-platform reactions, edits and mention-pills!

Way better VoIP!

The 1:1 voice and video calling in Element has been rewritten from scratch - complete with support for picture-in-picture for video calls!

Improved notifications!

At last, you can now properly set notification levels within the app by long pressing on the conversation in question.  Notifications as a whole will get a massive overhaul in the near future, but this is a big step in the right direction.

QR scanning and cross-signing for device verification!

We turned on end-to-end encryption by default back in May. This was possible due to massively improved user and device verification; supporting QR code scanning and emoji comparison for verification - as well as letting users verify their own devices at login, ensuring that they are then trusted by everyone else (“cross-signing”).  Folks on Riot/Android were deprived of all of this goodness until Element landed. We hope you’re enjoying the simplicity of user verification relative to the bad old days of having to constantly manually verify everyone’s devices one by one…

Massively improved onboarding.

Last but not least, the experience of installing the app, registering, and subsequently logging in is massively improved.  We’ve put a huge amount of effort into designing and polishing these flows - which are surprisingly fiddly to get right (especially when you’re decentralised and need to support multiple servers, and especially when you’re end-to-end encrypted and have to support things like cross-signing).  The end result should speak for itself though: relative to the ugly old registration/login screen on Riot/Android, Element’s signup and login should feel like a whole new app!

Still to come.

Now, the initial goal before turning the switch from Riot to Element was to get to a state where the features available in Riot Android were also available in Element.

To be honest, and you may have noticed, we didn’t get completely there and a few things are missing - but hopefully the new features and much better experience will make up for it as we push through finalising the last few things. You can check the remaining gaps between the two apps by looking up the “legacy-feature” tagged issues in this dashboard, but the biggest ones are probably the lack of integrated video conferencing (meaning that you’ll have to install the Jitsi app in order to do video conferences), and you won’t be able to send stickers yet. 1:1 voice and video calls work however. The other gaps are mostly related to settings - for example associate an email to your account, block/un-block devices, or the option to encrypt the messages only to verified devices - but these are coming soon.

For those who were using RiotX as the preview for this upgrade, heads up the app is not maintained anymore and will be removed from Google Play at the end of August, so if you haven’t heard the memo: please install Element!!

Element is even available on Fdroid already (and made it out before the Google Play version!💥). The ‘old’ Riot app will be deprecated in due course, joining Matrix Console on the nostalgic dusty shelf of memories...

Logically something can’t be simultaneously new and improved, but the new Element app is exactly that: breaking boundaries wherever it goes!

Please enjoy our brave new Android world 🤖🚀

Related Posts

By the same author

Thanks for reading our blog— if you got this far, you should head toelement.ioto learn more!