The app follows similar modularization strategy as in NowInAndroid. Routine Tracker has the following modules:
Name | Responsibility |
---|---|
app | Serves as an entry point of the app and brings everything together |
build-logic | Contains convention plugins that reduce the gradle boilerplate for declaring dependencies in the modules |
core:data | Contains repository classes that serve as a single source of truth for accessing data from the offline database and data that comes from the network. Although Routine Tracker doesn't fetch data from the network yet, this layer is implemented to follow the best practices. |
core:database | On-device local database |
core:domain | The heart of the app, which contains logic for determining whether the habit is due or not, computing streaks, etc. It operates on data that comes from the data layer. |
core:logic | Utilities and helper classes written in raw Kotlin and not dependent on Android SDK. |
core:model | Kotlin data classes and enums used throughout the app for abstraction |
core:testcommon | Common testing logic and fake classes that are used in tests throughout the app. |
core:ui | Jetpack Compose components, theming logic, and helpers for Android. |
feature | User interface with View Models, functionality associated with a specific feature or user journey. |