- Animate movement using spring physics
- Spring Animation on Android
- Android Animations: Animate movement using spring physics
- WindowInsets — Listeners to layouts
- Gesture Navigation: Going edge-to-edge (I)
- Gesture Navigation: Handling visual overlaps (II)
- Gesture Navigation: Handling gesture conflicts (III)
- Gesture Navigation: Immersive Modes (IV)
- Spantastic text styling with Spans
- Underspanding spans
- Styling internationalized text in Android
- Drawing a rounded corner background on text
- Best practices for text on Android (Google I/O '18)
- Part 1: Why you should care
- Part 2: A successful multi-module architecture
- Part 3: Real-life example
- Part 4: How to approach
- Part 5: Lessons learned
- Write an Android Studio Plugin Part 1: Creating a basic plugin
- Write an Android Studio Plugin Part 2: Persisting data
- Write an Android Studio Plugin Part 3: Settings
- Write an Android Studio Plugin Part 4: Jira Integration
- Specify the code to run on a thread
- Create a manager for multiple threads
- Run code on a thread pool thread
- Communicate with the UI thread
- Android Tutorial: Content Provider Basics
- Android Tutorial: Using Content Providers
- Android Tutorial: Writing your own Content Provider
- Overview of system tracing
- Capture a system trace on the command line
- Capture a system trace on a device
- Define custom events
- Inheritance versus composition: Which one should you choose?
- Why inheritance is bad?
- Designing with interfaces
- Workout your tasks with WorkManager — Intro
- Workout your tasks with WorkManager — Main Components
- Workout your tasks with WorkManager — Advanced Topics
-
Clean architecture for Android with Kotlin: a pragmatic approach for starters
-
ViewModels: Persistence, onSaveInstanceState(), Restoring UI State and Loaders
- Android Testing with JUnit & mockito
- Unit Testing and Why You Should Be Doing It
- 13 Tips for Writing Useful Unit Tests
- Extending Mockito
- Modern Best Practices for Testing in Java
- Focus on Integration Tests Instead of Mock-Based Tests
- Don't use In-Memory Databases (H2, Fongo) for Tests
- Pixel perfect UI: How to automatize automation testing on Android
- Android Unit Testing with Mockito
- Android: Understanding Spek Tests (Part 1)
- (to-read) Clean UI Testing for Android
- (to-watch) Testing made sweet with a Mockito by Jeroen Mols
- Motion Vectors
- AnimatedIcons: Max / Min
- AnimatedIcons: Plus / X
- A simple guide to 9-patch for Android UI
- (to-read) Android Internals for Rendering a View
- DayNight — Applying dark mode without recreating your app
- Grokking RxJava, Part 1: The Basics
- Grokking RxJava, Part 2: Operator, Operator
- Grokking RxJava, Part 3: Reactive with Benefits
- Grokking RxJava, Part 4: Reactive Android
- Alphabetical List of Observable Operators
- Backpressure
- Android's Java 8 Support
- R8 Optimization: Staticization
- R8 Optimization: Class Reflection and Forced Inlining
- Presenters are not for persisting
- MVP for Android: how to organize the presentation layer
- Model-View-Presenter: Android guidelines
- ViewModel Overview
- ViewModels : A Simple Example
- ViewModels: Persistence, onSaveInstanceState(), Restoring UI State and Loaders
- Android lifecycle-aware components codelab
- ViewModels and LiveData: Patterns + AntiPatterns
- LiveData beyond the ViewModel — Reactive patterns using Transformations and MediatorLiveData
- LiveData with SnackBar, Navigation and other events (the SingleLiveEvent case)
- Android Architecture Components for Dummies in Kotlin (50 lines of code)
- Understanding LiveData made simple
- Architecture SavedStateHandle — the ViewModel’s complement
- Guide to app architecture
- Handling Lifecycles with Lifecycle-Aware Components
- Lifecycle Aware Data Loading with Architecture Components
- Use view binding to replace findViewById
- Exploring Android View Binding in Depth
- Make Android View Binding great with Kotlin
-
Coroutines in Kotlin 1.3 explained: Suspending functions, contexts, builders and scopes
-
Kotlin Coroutines on Android: Things I Wish I Knew at the Beginning
-
Why exception handling with Kotlin Coroutines is so hard and how to successfully master it!
- KotlinConf 2017 - Introduction to Coroutines by Roman Elizarov
- KotlinConf 2017 - Deep Dive into Coroutines on JVM by Roman Elizarov
- 2018 LLVM Developers’ Meeting: J. McCall “Coroutine Representations and ABIs in LLVM”
- KotlinConf 2019: Coroutines! Gotta catch 'em all! by Florina Muntenescu & Manuel Vivo
- Support for Kotlin SAM in release 1.4
- Functional (SAM) interfaces
- Kotlin-Java interop: function references and SAM conversions
-
Annotation Processing : Don’t Repeat Yourself, Generate Your Code.
-
MerryAnnotation — Your First Annotation Processor in Kotlin Android
-
Code Generation using Annotation Processors in the Java language – part 1: Annotation Types
-
Code Generation using Annotation Processors in the Java language – part 2: Annotation Processors
-
Code Generation using Annotation Processors in the Java language – part 3: Generating Source Code
- Effective Class Delegation
- Don’t Reinvent the Wheel, Delegate It!
- Delegating Delegates to Kotlin
- Built-in Delegates
- Delightful Delegate Design
- Fragments: Past, present, and future (Android Dev Summit '19)
- Android Fragments: FragmentFactory
- Android Fragments: FragmentContainerView
- Android Fragments: Fragment Result
- Migrate to Gradle Kotlin DSL
- Sharing build logic with Kotlin DSL
- Publishing a Kotlin library to your Bintray repo using Gradle Kotlin DSL
- Android library development - Getting started
- Mastering API Visibility in Kotlin
- Maintaining Compatibility in Kotlin Libraries
- Kotlin + buildSrc for Better Gradle Dependency Management
- Implementation vs API dependency
- Tips For Writing a Library in Kotlin
- Test library releases using an in project Maven repository
- Trunk-based mobile
- A successful Git branching model
- Understanding the GitHub flow
- Trello Android's Git Branching Strategy
- A Branching Strategy Simpler than GitFlow: Three-Flow
- Kotlin flows on Android
- Testing Kotlin flows on Android
- StateFlow and SharedFlow
- Learn advanced coroutines with Kotlin Flow and LiveData
- Lessons learnt using Coroutines Flow in the Android Dev Summit 2019 app
- A safer way to collect flows from Android UIs
- Things to know about Flow’s shareIn and stateIn operators
- Migrating from LiveData to Kotlin’s Flow
- Work with observable data objects
- Let it Flow
- Callbacks in a MAD world — wrapping your old callback listeners with callbackFlow
- SharedFlow and StateFlow
- Kotlin Coroutines Flow in a nutshell
- repeatOnLifecycle API design story
- Kotlin Flows in Android summary