In order to compile and run the project you will need:
- Android Studio supporting the Gradle plugin defined here
- Java 11 SDK installed
- Fetches data from https://api.thirdwavelist.com (API key required), parsed in the common
:libraries:core
module, under thedata
layer, and presented in a RecyclerView - Clicking on a RV item triggers a navigation action (Android Navigation Components) and opens detail view for the given item
- After the initial successful network request, the data is stored in a local database using Room
- Settings page
:libraries:design
module implementing Material Design guidelines- Common abstractions in
:libraries:core-utils
and:libraries:core
modules - Navigation abstraction in
:libraries:navigation
module implementing Android Navigation Components - Integrated Firebase Config for feature toggling and configuration keys
- The original codebase that was written >3 years ago was built on pure MVVM approach (with DataBinding and a bi-directional data flow). This was problematic, since it didn't reflect my current thinking and its also going against some bigger trends in the industry: Compose (Data Binding is problematic), MVI (bi-directional data flow is problematic), so I removed the use of Data Binding, replaced it with ViewBinding, finite View State (machine), and while I didn't really capture true unidirectional data flow (UDF), it also does not go against some of the practices that would allow that change. Same goes with Compose; it's not integrated, but with the current architecture, it wouldn't be any blocker to do so.
-
Change the Timber library use behind the ErrorEventLogger and BusinessEventLogger abstraction to use some actual backend/PaaS (e.g. Firebase) to make sense of the data that's being logged
-
Add missing UI tests: as a side project, and with the one-week deadline to cover all requirements and make sure the code reflects my current architectural thinking, I figured it was not the smartest to invest my time on writing UI tests for these screens. I just wanted to acknowledge that.
-
More work on the presentation / repository layer to support paging from both the remote and local data sources. I didn't pick this up, since this would have required me to touch the API (which I developed as well 3 years ago), and it wasn't the most critical aspect to get right at the start.
BSD 3-Clause License
Copyright (c) 2017 - 2022, Antal János Monori & Kristoffer Tjalve
All rights reserved.
See LICENSE for more.