Android application
The app is available in the Play store.
Requirements
Architecture
The app uses Jetpack Compose, Dagger/Hilt and aims to implement a clean architecture.
Module structure
Besides the main app module, the app consists of the following library modules:
- balling
- common
- controller
- feed
- heating
- info
- overview
- refill
- schedule
- timedata
- ventilation
The main Template:App module contains the AndroidManifest and the main activity (As of November 2025, the app only uses one activity). The activity contains the navigation Template:NavHost in Template:OnCreate.
None of the other modules has a dependency to the main Template:App module.
The Template:Common module provides low-level functionalities and layout elements used in various places. The following functionalities are located in Template:Common module:
- Template:DataFetchResult: A wrapper class indicating the status of data fetching operation (Template:Success, Template:Error, Template:Loading, Template:Empty).
- Template:WebApiParams, Template:WebApiPostRequest, Template:WebApiPostRequestExecution, Template:WebApiUrls: Classes and objects used for communication from the app to the server.
- Template:ControllerProfileDao, Template:ControllerProfileDatabase: Classes which provide Room database functionality.
- Various classes used for dependency injection (Hilt)
- Template:SetValsSanityCheckResult: Class used for to communicate status of set values for Template:Heating and Template:Ventilation module.
- Template:ControllerProfile: Class containing the profile data of the server (address, port, credentials, ...)
- Template:GlobalConstants: Mainly UI-related strings (non-context-related) and some minor functional constants
- Composable functions for the main drop down menu
- Composable functions for the theme
- Composable functions for hyperlinks, text edit fields, headline
- Template:ViewNavigationRoutes: Object containing the routing information processed in main Template:App module
- Template:ScreenshotTestHelper: Helper class for executing the instrumented snapshot testing using the emulator.