In July 2021 I did a major refactor. Here's what I did:
- Migrate from Dagger to Hilt.
- Update Navigation Component.
- Now supports multiple backstacks by default.
 
- Decoupling.
- Avoid sharing viewmodels. It makes unit testing easier when I can test fragments in isolation.
 
- Splitting business models into Entities and Dto's. This way I have a clear business model, network model, and caching model.
- Writing use cases.
- Unidirectional data flow with MVI and kotlin sealed classes. (See Interactors)
 
- Refactor message handling system to a Queue.
- Migrate from Shared Preferences to DataStore.
- Migrate from Kotlin synthetics to ViewBinding.
- Write Unit tests for use-cases.
- Check out the new splash screen APIs
- Do a Compose refactor
- I will create a new repo for this
 
email: [email protected]
password: password
Watch the video course here: Powerful Android Apps with Jetpack Architecture.
In this course you'll learn to build a real application that interacts with the website open-api.xyz.
Open-api.xyz is a sandbox website for codingwithmitch members to practice interacting with a Rest API.
- Kotlin:
- 
Coroutines:
 - Advanced coroutine management using jobs
- Cancelling active jobs
- Coroutine scoping
 
- 
Navigation Components:
 - Bottom Navigation View with fragments
- Leveraging multiple navigation graphs (this is cutting edge content)
 
- 
Dagger 2:
 - custom scopes, fragment injection, activity injection, Viewmodel injection
 
- 
MVI architecture:
 - Basically this is MVVM with some additions
- State management
- Building a generic BaseViewModel
- Repository pattern (NetworkBoundResource)
 
- 
Room Persistence:
 - SQLite on Android with Room Persistence library
- Custom queries, inserts, deletes, updates
- Foreign Key relationships
- Multiple database tables
 
- 
Cache:
 - Database caching (saving data from network into local cache)
- Single source of truth principal
 
- 
Retrofit 2:
 - Handling any type of response from server (success, error, none, etc...)
- Returning LiveData from Retrofit calls (Retrofit Call Adapter)
 
- 
ViewModels:
 - Sharing a ViewModel between several fragments
- Building a powerful generic BaseViewModel
 
- 
WebViews:
 - Interacting with the server through a webview (Javascript)
 
- 
SearchView:
 - Programmatically implement a SearchView
- Execute search queries to network and db cache
 
- 
Images:
 - Selecting images from phone memory
- Cropping images to a specific aspect ratio
- Setting limitations on image size and aspect ratio
- Uploading a cropped image to server
 
- 
Network Request Management:
 - Cancelling pending network requests (Kotlin coroutines)
- Testing for network delays
 
- 
Pagination:
 - Paginating objects returned from server and database cache
 
- 
Material Design:
 - Bottom Navigation View with Fragments
- Customizing Bottom Navigation Icon behavior
- Handling Different Screen Sizes (ConstraintLayout)
- Material Dialogs
- Fragment transition animations
 
