At some point, every Android developer will end up using a Locale for the applications they are building. If you are dealing with dates and time zones, currencies or multiple language support, you probably faced some challenges to make everything work as intended. In this article, we are going to see how to use Locale to handle localization (L10N), what are the common pitfalls and how to deal with them.

What’s Locale on Android?

According to the Android documentation, a Locale is:

An object that represents a specific geographical, political, or cultural region. An operation that requires a Locale to perform its task is…

Using Handlers, without providing a Looper, has been deprecated in recent versions of Android because they can lead to bugs where operations are silently lost or crashes. According to the documentation, you can use an Executor or access the Handler of a view as a replacement, but they can also crash silently as it’s not bound to any lifecycle.

Let’s see how we can take advantage of the coroutines and lifecycle libraries to replace the Handler().postDelay() method to safely trigger an action after a specified amount of time.

Handler: old fashioned way

Even if the Handler() constructor is deprecated, you can access the handler…

Photo by Soundtrap on Unsplash

My company, Aircall, recently organized a hackathon to unleash our tech ideas for one and a half day. With the iOS folks, we decided to experiment voice interactions with Siri and Google Assistant in order to call a contact or show a specific data outside the application’s scope with Android Slices. In this article, I’ll show what we learned from Google Assistant and how we used App Actions to bring voice controls to our app.

Identifying the features

First, we wanted to identify the features we can bring to our application, thanks to Google Assistant. Our main app is a VoIP phone for…

After exploring the Jetpack Compose Canvas in a previous article, this new post will explain how you can draw and use a custom Shape for your Composables to give them a specific outline. The Jetpack Compose foundation library already provides common shapes but we’ll see how to take advantage of the Path API to build custom outlines. We will go even further by adding some animations to our brand new shapes.

Introduction to Shape

With Jetpack Compose, it is easy to add some rounded or cut corners to your Composable thanks to the foundation library which provides several shapes:

  • RoundedCornerShape(): to have a…

In this article, I will share my experience of using Canvas with Jetpack Compose, which is the new UI toolkit made by Google. The Android Dev Challenge #2 gave me the opportunity to learn tons of things about Canvas and how to take advantage of it to draw and animate shapes or texts in a very nice way.

Most of the code samples are based on the project below:

Disclaimer: the code samples are based on Compose 1.0.0-beta02. The API methods might change in a near future.

First steps with Canvas

If you are familiar with the Android View canvas methods you won’t be…

A couple months, we decided to use Android App Bundle (AAB) to distribute Aircall’s Android app in Play Store. After analyzing the Aircall Android application package (APK), we found we could deliver optimized APKs to our users — an overall size reduction of 60%!

In this article, we are going to expose our journey to Android App Bundle from our own motivations to the development within the application and the CI with CircleCI and fastlane to release on the Play Store.

Why move to App Bundle?

Moving to App Bundle had many advantages. The first and main reason was the APK size optimization, to deliver…

I was recently playing with Jetpack Compose, learning the future of the UI on Android. In a sample app, I tried to build a parallax effect I implemented in previous applications. In a screen you have an image in the background that scrolls less than the content you can scroll. Let’s see how we can implement this animation coupled with a fade out of the image using Jetpack Compose.

Disclaimer: the code samples are based on Compose 1.0.0-alpha11. The API methods might change in a near future.

The Parallax Effect

The idea here was to add a parallax effect to the image while…

Photo by Micah Williams on Unsplash

Security is a very important topic and has to be taken seriously when developing Android applications, especially if sensitive data is stored on the device such as user information or API tokens. Some third party libraries already exist to secure the app data like SecurePreferences but Google introduced its own security library within the Jetpack suite. Let see how we can use it to encrypt the shared preferences of an application and do the migration from SecurePreferences.

Jetpack Security libraries overview

The Jetpack suite provides two security libraries to secure your app data. Security-crypto is there to encrypt files stored by your application or…

Photo by Mika Baumeister on Unsplash

Unity is a game engine developed by Unity Technology, running on Windows, MacOS and Linux, for building cross-platform games and applications (Android, iOS, Windows, PlayStation…). It has been there for 15 years now, and it gave us the opportunity to build high quality graphic experiences or games on mobile. Unity is becoming more and more popular: according to the company, “50% of the new mobile games are made with Unity”. A lot of studios (Blizzard, Square Enix, White Elk…) are trusting Unity for developing their games or AR/VR standalone applications.

Unity has recently improved the support for building great game…

Photo by Kushagra Kevat on Unsplash

ExoPlayer is a very powerful library, developed and maintained by Google, for playing various video and audio content on Android. It also provides a large set of extension for using custom data source or supporting new formats. Let see how we can build our own extension by developing a custom DataSource for playing content from a SMB server.

What is an ExoPlayer DataSource?

With ExoPlayer, a DataSource is an interface that reads data from URI-identified resources, it allows to open a connection to read the specified data on your server by example. The library provides a default implementation for reading HTTP sources with HttpDataSource and…

Julien Salvi

Google Developer Expert for Android — Senior Android Engineer @ Aircall (Paris) — Startup way of life, beer lover and world traveler.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store