Shopping Is Not a Category
Hermes connected my marketplace order emails to Actual Budget, turning opaque Shopping transactions into useful item-level categories.
Recent content on Chris Banes
Hermes connected my marketplace order emails to Actual Budget, turning opaque Shopping transactions into useful item-level categories.
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.
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.
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? I put List, Sequence, and Flow to the test with kotlinx-benchmark, and the results were surprising!
Description # This is an short tech talk which I delivered at work about Haze: https://github.com/chrisbanes/haze
Haze 1.0 is a powerful library for achieving background blurring effects within Jetpack Compose and Compose Multiplatform apps.
How Circuit makes retaining UI state with Compose effortless
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.
The best way to implement a Parallax effect in Jetpack Compose
Conference # Droidcon San Francisco 2022 and Droidcon London 2022
Deep dive into Jetpack Compose compiler metrics for performance optimization, including recomposition analysis, movability, and memoization strategies
Understanding the Slot API pattern in Jetpack Compose for flexible, reusable composables with single responsibility and customizable content
Best practices for exposing Modifier parameters in Jetpack Compose composables to enable flexibility, reusability, and proper layout composition
A retrospective on leaving Google after 8.5 years, reflecting on AppCompat, ActionBarSherlock, drawable tinting, DayNight theme support, and the evolution of Android development
Guide to publishing Android libraries to Maven Central after JCenter shutdown, featuring gradle-maven-publish-plugin and automated release strategies
Building a Jamstack blog with Gatsby, Ghost CMS, and Netlify for better content management and global CDN deployment
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…
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.
Conference # Droidcon EMEA 2020
Conference # 11 Weeks of Android
Conference # 11 Weeks of Android
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
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
Conference # DevFest Sydney 2019
Conference # Android Dev Summit 2019
Conference # Android Dev Summit 2019
Conference # Android Bangkok
Co-speaker # Nick Butcher
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.
Co-speakers # Nick Butcher and Rohah Shah
If you’ve watched my ‘Becoming a Master Window Fitter’ talk, you’ll know that handling window insets can be complex.
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.
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.
Discover best practices for using Android Data Binding Library effectively, including avoiding excessive binding adapters and optimizing custom bindings for performance
Conference # Android Dev Summit
Conference # GDG Melbourne DevFest 2018
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!
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
Refactor an RxJava-heavy Android app to use Kotlin coroutines while maintaining consistent threading models and single-source-of-truth schedulers
Fix window insets handling during fragment transitions by manually dispatching insets to all children instead of letting ViewGroup stop at the first consumer
Master Fragment shared element transitions by using postponed transitions, reordering, and proper animation setup to create smooth UI transitions between fragments
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.
Implement timezone-aware date and time storage in Android Room database using ThreeTen-BP library and custom TypeConverters with ISO 8601 format strings
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.
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
Move your Jekyll static site from GitHub Pages to Firebase Hosting with CircleCI CI/CD, gaining SSL support, custom rules, and worldwide CDN distribution
Meetup: Londroid Description # Learn about some of the new features and improvements that we have released in v25 of the Android Support Library.
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
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.