Skip to content
This repository has been archived by the owner on Oct 16, 2023. It is now read-only.
/ android Public archive

The official Android client application for ThirdWaveList.com

License

Notifications You must be signed in to change notification settings

thirdwavelist/android

Repository files navigation

ThirdWaveList for Android

Get it on Google Play

license GitHub last commit

How to run

In order to compile and run the project you will need:

  • Android Studio supporting the Gradle plugin defined here
  • Java 11 SDK installed

Features:

  • Fetches data from https://api.thirdwavelist.com (API key required), parsed in the common :libraries:core module, under the data 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

Project overview

Caveats

  1. 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.

What would I do differently / improve on?

  1. 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

  2. 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.

  3. 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.

License

BSD 3-Clause License

Copyright (c) 2017 - 2022, Antal János Monori & Kristoffer Tjalve
All rights reserved.

See LICENSE for more.

About

The official Android client application for ThirdWaveList.com

Topics

Resources

License

Stars

Watchers

Forks

Contributors 4

  •  
  •  
  •  
  •