Android application: Difference between revisions
No edit summary |
No edit summary |
||
| Line 2: | Line 2: | ||
== Requirements == | == Requirements == | ||
== Architecture == | == Architecture == | ||
The app | The app is written completely in Kotlin using Jetpack Compose, Dagger/Hilt and aiming to implement a clean architecture. | ||
=== Module structure === | === Module structure === | ||
Besides the main app module, the app consists of the following library modules: | Besides the main app module, the app consists of the following library modules: | ||
| Line 38: | Line 38: | ||
=== Layer structure === | === Layer structure === | ||
The code is separated into the following layers: | |||
<code> | |||
[module]/ | |||
├── src/main/kotlin/com/laimburggasse/aquariumcontrol/[module]/data/ | |||
│ ├── remote/ // Network/API service implementations (e.g., Retrofit) | |||
│ │ └── dto/ | |||
│ │ └── Dto.kt | |||
│ │ └── UserApiService.kt | |||
│ ├── repository.kt | |||
├── src/main/kotlin/com/laimburggasse/aquariumcontrol/[module]/domain/ | |||
│ ├── model/ // Data Transfer Objects (DTOs) for network/database | |||
│ │ └── UserDto.kt | |||
│ ├── local/ // Local persistence (e.g., Room DAOs, SharedPreferences) | |||
│ │ └── UserDao.kt | |||
│ ├── mapper/ // Functions to map DTOs to Domain models and vice-versa | |||
│ │ └── UserMapper.kt | |||
│ └── repository/ // IMPLEMENTATIONS of the Domain repository interfaces | |||
│ └── UserRepositoryImpl.kt // Implements domain.repository.UserRepository | |||
└── build.gradle // Dependencies for Room, Retrofit, etc. | |||
</code> | |||
== Test strategy == | == Test strategy == | ||
=== Unit tests === | === Unit tests === | ||
Revision as of 16:09, 19 November 2025
The app is available in the Play store.
Requirements
Architecture
The app is written completely in Kotlin using Jetpack Compose, Dagger/Hilt and aiming 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 app module contains the AndroidManifest and the main activity (As of November 2025, the app only uses one activity).
The activity contains the navigation NavHost in onCreate.
None of the other modules has a dependency to the main app module.
The common module provides low-level functionalities and layout elements used in various places.
The following functionalities are located in common module:
DataFetchResult: A wrapper class indicating the status of data fetching operation (Success,Error,Loading,Empty).WebApiParams,WebApiPostRequest,WebApiPostRequestExecution,WebApiUrls: Classes and objects used for communication from the app to the server.ControllerProfileDao,ControllerProfileDatabase: Classes which provide Room database functionality.- Various classes used for dependency injection (Hilt)
SetValsSanityCheckResult: Class used for to communicate status of set values forheatingandventilationmodule.ControllerProfile: Class containing the profile data of the server (address, port, credentials, ...)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
ViewNavigationRoutes: Object containing the routing information processed in mainappmoduleScreenshotTestHelper: Helper class for executing the instrumented snapshot testing using the emulator.
Layer structure
The code is separated into the following layers:
[module]/
├── src/main/kotlin/com/laimburggasse/aquariumcontrol/[module]/data/
│ ├── remote/ // Network/API service implementations (e.g., Retrofit)
│ │ └── dto/
│ │ └── Dto.kt
│ │ └── UserApiService.kt
│ ├── repository.kt
├── src/main/kotlin/com/laimburggasse/aquariumcontrol/[module]/domain/
│ ├── model/ // Data Transfer Objects (DTOs) for network/database
│ │ └── UserDto.kt
│ ├── local/ // Local persistence (e.g., Room DAOs, SharedPreferences)
│ │ └── UserDao.kt
│ ├── mapper/ // Functions to map DTOs to Domain models and vice-versa
│ │ └── UserMapper.kt
│ └── repository/ // IMPLEMENTATIONS of the Domain repository interfaces
│ └── UserRepositoryImpl.kt // Implements domain.repository.UserRepository
└── build.gradle // Dependencies for Room, Retrofit, etc.
Test strategy
Unit tests
Compose preview screenshot tests
Instrumented tests
Release procedure