RSSAmplifier

Blog

Chris Banes

Recent content on Chris Banes

chrisbanes.meRSS feed ↗95 posts

Latest posts

Shopping Is Not a Category

Hermes connected my marketplace order emails to Actual Budget, turning opaque Shopping transactions into useful item-level categories.

Haze 2.0: A Pluggable Visual Effects Engine

Haze 2.0-alpha01 turns blur into a pluggable effect, splitting it into a separate module and opening the door to custom visual effects built on top of a shared rendering infrastructure.

The Disappearing Middle: How AI Coding Tools Are Breaking Software Apprenticeship

How AI coding agents are automating away the developer apprenticeship ladder. Discover three personas for using agentic programming effectively, when it accelerates work, and critical guardrails to protect junior engineer growth.

Multiplatform Strings

Simplify multilingual app development with Twine! Learn how to manage and export strings for iOS, Android, and Compose Multiplatform efficiently

Should you use Kotlin Sequences for Performance?

Should you use Kotlin Sequences for performance? I put List, Sequence, and Flow to the test with kotlinx-benchmark, and the results were surprising!

Haze - Real time background blurring

Description # This is an short tech talk which I delivered at work about Haze: https://github.com/chrisbanes/haze

Haze 1.0

Haze 1.0 is a powerful library for achieving background blurring effects within Jetpack Compose and Compose Multiplatform apps.

Retaining beyond ViewModels

How Circuit makes retaining UI state with Compose effortless

SwiftUI for Jetpack Compose developers - State (I)

Explore the seamless transition from Jetpack Compose to SwiftUI for developers. Dive into the intricacies of managing state in SwiftUI, gaining valuable insights and tips for a smooth development experience.

Parallax effect in Jetpack Compose

The best way to implement a Parallax effect in Jetpack Compose

Branching out to Jetpack Compose

Conference # Droidcon San Francisco 2022 and Droidcon London 2022

Composable metrics

Deep dive into Jetpack Compose compiler metrics for performance optimization, including recomposition analysis, movability, and memoization strategies

Slotting in with Compose UI

Understanding the Slot API pattern in Jetpack Compose for flexible, reusable composables with single responsibility and customizable content

Always provide a Modifier parameter

Best practices for exposing Modifier parameters in Jetpack Compose composables to enable flexibility, reusability, and proper layout composition

Becoming a Xoogler

A retrospective on leaving Google after 8.5 years, reflecting on AppCompat, ActionBarSherlock, drawable tinting, DayNight theme support, and the evolution of Android development

Publishing to Maven Central

Guide to publishing Android libraries to Maven Central after JCenter shutdown, featuring gradle-maven-publish-plugin and automated release strategies

New website... again

Building a Jamstack blog with Gatsby, Ghost CMS, and Netlify for better content management and global CDN deployment

Chris Banes

chris@banes.me · chrisbanes.com · github.com/chrisbanes 15 years building product-focused applications, libraries, and developer tools with a strong eye for polished, high-quality user experience. The last 5+ years in Staff+ engineering and technical leadership roles spanning Android, iOS, TV, and Web. Deep experience in UI engineering, Kotlin Multiplatform, cross-platform architecture, product…

Me

I care about how software feels. The small details - how a screen transitions, how a list scrolls, whether a button responds the moment you tap it - that stuff matters to me. It always has.

Compose for Existing Apps

Conference # Droidcon EMEA 2020

Compose for Existing Apps

Conference # 11 Weeks of Android

Animating your Keyboard

Conference # 11 Weeks of Android

Suspending over Views

Harness Kotlin coroutines to write complex asynchronous UI operations synchronously, replacing callback-based View APIs like AnimatorListener and View.OnLayoutChangeListener with clean, readable suspending functions

Suspending over Views — Example

Apply coroutines to a real-world TV show details UI problem where InboxRecyclerView expansions require synchronizing data loading, scrolling, and animations through suspending functions instead of nested callbacks

Developing Themes with Style

Conference # DevFest Sydney 2019

Developing Themes with Style

Conference # Android Dev Summit 2019

Going edge-to-edge with Gesture Navigation

Conference # Android Dev Summit 2019

Going edge-to-edge with Gesture Navigation

Conference # Android Bangkok

Developing Themes with Style

Co-speaker # Nick Butcher

Going edge-to-edge with Gesture Navigation

Co-speaker: Rohan Shah Conference: Droidcon Berlin 2019 Description # To aid developers to create immersive experiences, Android Q adds new system navigation models to allow apps to take over more of the user’s screen.

Supporting mobile usability with Dark Theme and Gestures in Android Q

Co-speakers # Nick Butcher and Rohah Shah

WindowInsets — Listeners to layouts

If you’ve watched my ‘Becoming a Master Window Fitter’ talk, you’ll know that handling window insets can be complex.

Santa Tracker - Moving to Android App Bundle

Conference: Android Australia User Group Description # Every year, Google releases the Santa Tracker app to millions of users across the world, wanting to track Santa over the holiday season. Chris will talk through how they managed to get the install APK from 60MB to 10MB, using Dynamic Feature Modules, asset compression and other things.

Santa Tracker - Moving to Android App Bundle

Conference: shibuya.apk Description # Every year, Google releases the Santa Tracker app to millions of users across the world, wanting to track Santa over the holiday season. Chris will talk through how they managed to get the install APK from 60MB to 10MB, using Dynamic Feature Modules, asset compression and other things.

Data Binding — Lessons Learnt

Discover best practices for using Android Data Binding Library effectively, including avoiding excessive binding adapters and optimizing custom bindings for performance

Android Suspenders

Conference # Android Dev Summit

Android Suspenders

Conference # GDG Melbourne DevFest 2018

Android Suspenders

Conference: KotlinConf Description # So you’ve read the Coroutines guide and you’re ready to start using them in your Android app to coroutines? Great!

CI cache key over many files

Learn how to generate stable CI cache keys across multiple build files using checksums in CircleCI, eliminating the need for manually tracking each dependency file separately

RxJava to Kotlin coroutines

Refactor an RxJava-heavy Android app to use Kotlin coroutines while maintaining consistent threading models and single-source-of-truth schedulers

Windows Insets + Fragment Transitions

Fix window insets handling during fragment transitions by manually dispatching insets to all children instead of letting ViewGroup stop at the first consumer

Fragment Transitions

Master Fragment shared element transitions by using postponed transitions, reordering, and proper animation setup to create smooth UI transitions between fragments

Becoming a master window fitter 🔧

Conference: Droidcon London Description # Window insets have long been a source of confusion to developers, and that’s because they are indeed very confusing! The system dispatches insets for many reasons, such as drawing behind navigation bars, full-screen immersive modes or handling round displays.

Room + Date / Time

Implement timezone-aware date and time storage in Android Room database using ThreeTen-BP library and custom TypeConverters with ISO 8601 format strings

Becoming a master window fitter 🔧

Conference: Droidcon NYC Description # Window insets have long been a source of confusion to developers, and that’s because they are indeed very confusing! The system dispatches insets for many reasons, such as drawing behind navigation bars, full-screen immersive modes or handling round displays.

Carry on Scrolling

Master nested scrolling improvements in Material Design Components v26.0.0-beta2 that fix flinging behavior and AppBarLayout interactions using new TYPE_TOUCH and TYPE_NON_TOUCH parameters

Jekyll + Firebase Hosting

Move your Jekyll static site from GitHub Pages to Firebase Hosting with CircleCI CI/CD, gaining SSL support, custom rules, and worldwide CDN distribution

Support Libraries - v25 and beyond

Meetup: Londroid Description # Learn about some of the new features and improvements that we have released in v25 of the Android Support Library.

Why isn’t my animation running?

Understand why animations may not run during Activity transitions due to Android 4.0’s view hierarchy draw pass optimization that was removed in Android 7.0

Designing the Design Support Library

Conference: Droidcon London Description # The design library introduced CoordinatorLayout, AppBarLayout and CollapsingToolbarLayout last year. This talk will go through how it all works, from CoordinatorLayout Behaviors, to nested scrolling, to all of the crazy things in between to make it work back to API 9. You’ll also discover some of the new stuff we’ve got lined up.