Latest stories

Exploring Jetpack Compose: Card

E

The Card composable is a surface that can be used to present content and actions focused on a single topic. If you’re enjoying my posts on Jetpack Compose, check out some details on the book I’m writing on Compose! When it comes to displaying a Card, there is a single composable function that can be used to do so. @Composable fun Card( modifier: Modifier = Modifier, shape: Shape =...

Server Driven UI, Part 1: The Concept

S

I’ve recently been having some conversations with developers from the community about GraphQL and how it is being used in their work, with the aim to influence some of the changes we are making in our stack at Buffer. During one of these chats with Maria Neumayer, there was some experience shared of designing GraphQL schemas to represent the presentation of screens in an app. This approach...

Exploring Jetpack Compose: Column

E

The Column Composable provides us with the functionality of displaying a collection of composables in a vertically sequenced format, where each composable is displayed simultaneously one after the other. If you’re enjoying my posts on Jetpack Compose, check out some details on the book I’m writing on Compose! When it comes to declaring a Column, there are four arguments which the...

Exploring Jetpack Compose: Padding Modifier

E

When it comes to the composition of composables, we may want to apply additional spacing to a composables size constraints. For this we can utilise Padding – padding adds this additional space to the specified sides of the composable, essentially making it larger in size. This area of padding cannot be consumed by the content inside of the composable, instead it merely acts as additional...

Exploring the Google Play In-App Review API

E

When it comes to the Google Play store, app ratings and reviews are a pretty important marketing tool – they can have a huge influence on whether someone downloads our app, so ensuring that we do not miss out on good reviews is important. However, I’ve felt like there has always been a lot of friction in the review process – many apps seem to approach it differently, all of...

Follow Guidelines, not rules

F

Learning a new way of doing something is a very powerful tool – not only does it open our eyes to new perspectives, but it has the potential to improve on a previous approach we may have taken to solving a problem. The more we learn, the more perspectives we have in place to creating a solution. With this set of approaches that can then be used, we will generally pick the one that feels...

Exploring Android 11: Data Access Auditing

E

When building applications, user privacy is shifting more and more to the core of development values throughout the ecosystem. Aligned with this, Android 11 brings in a collection of changes to help improve the approaches to the privacy of user data in our apps. Amongst these changes are the introduction of the new Data Access Auditing API, used to help developers become more aware of user data...

Ask a question, don’t give the answer

A

When presented with a question, it’s natural for us to want to help – sometimes this can be in the form of providing a solution to the problem. Someone asks a question, we provide the answer and they have a solution that unblocks them. Whilst that solves a problem and clears their path for the short term, there can be a missed opportunity for long term development – providing...

Building an Exploding FAB Transition With Jetpack Compose

B

When interacting with apps on our devices, animations not only add delight to our experience but they also help to create a sense of connection between the destinations being animated. One of the animations on Android which I’ve always enjoyed is the exploding Floating Action Button animation. Here, the user clicks the FAB and it explodes to fill the whole screen, with the next screen being...

Exploring Hilt: Application Level Code Generation

E

In the last post we took a look into Hilt and how, at a high level, it can be used for Dependency Injection in Android projects. Now that we have seen how the API can be used, I want to start taking deeper dives into how things are working under the hood. In this post we’re going to dive into the @HiltAndroidApp annotation – looking at what it does when it comes to generated code and...