A shopping list application.
The application makes everyday shopping easier by enabling the user to list down items to buy.
While shopping, the application also helps to track items that are already collected.
MVVM + Clean
Multi-module: Core modules and Feature modules weakly connected by Dagger.
Java module with global const dependencies and versions.
Visible for all other modules.
Main module of the application responsible for "gluing" feature modules and providing single activity as navigation host.
Contains all the basic/reusable classes for work with UI, useful extensions, helpers and shared XML resources as well.
Visible for all feature modules.
Contains all the UI models both specific and shared.
Visible for all feature modules through transitive dependency in the CORE-UI-BASE module.
Contains all the business models both specific and shared.
In this case as an exception contains DTOs as well.
Visible for all feature modules through transitive dependency in the CORE-UI-MODEL module.
Visible for database CORE-DB-API and CORE-DB-IMPL modules through transitive dependency in the CORE-DB-ENTITY module.
API which provides *Store(s) for interaction with both local and remote databases.
Visible for all feature modules.
Stores and databases implementation.
Visible only for the App module.
Contains all the database models and mappers.
Visible only for CORE-DB-API and CORE-DB-IMPL
Provides basic functionality and transitions for navigation.
GlobalRouter is responsible for handling global navigation commands and sends them to registered local Navigator if needed.
Navigator is responsible for handling local navigation commands through Navigation.
GlobalRouter is visible for all feature modules, but navigator implementation is hidden.
Provides common DI annotations and GlobalFeatureProvider.
In the same time, features' screens implementation inside GlobalFeatureProvider are hidden by platform androidx.fragment.app.Fragment.
Provides useful abstractions for storing and recreation DI components.
Entry point for interaction with TrolleyList flow.
Can be visible for all interested modules.
Hidden implementation of the feature (Trolleys' list and Trolley create screens).
Visible only for APP module for "gluing".
Entry point for interaction with TrolleyDetails flow.
Can be visible for all interested modules.
Hidden implementation of the feature (TrolleyDetails screen).
Visible only for APP module for "gluing".