The native android client for Artemis, an interactive learning platform with individual feedback. It is available on the Google PlayStore.
For the iOS app, check this repository
The project structure is heavily inspired by nowinandroid. The modularization is heavily borrowed from the one described in nowinandroid. The modularization helps keeping the app maintainable, fastens up build times and allows it to easily scale with new features.
The modularization is split up into two parent modules:
- core: Shares common code between features and code not directly related to features.
- common: Code used in every other module
- data: Request and send data over the network
- datastore: Permanently store data in the application, e.g. access tokens.
- device: Provides information about the status of the device, e.g. network connectivity.
- model: Represent the data sent by the server, e.g. exercises, lectures. Uses kotlinx serialization.
- ui: Common ui needed by more than one feature module.
- websocket: Receive updates from the server.
- feature: Submodules directly implementing features such as the dashboard.
The following libraries and tools are utilized:
- Jetpack Compose: UI
- Koin: Dependency Injection
- Kotlin Flows: Reactive programing
- AndroidX DataStore: Persistently store key-value pairs
To run this project, you need a recent version of Android Studio or IntelliJ (not guaranteed to work) and the AndroidSDK installed. If you want to run the end-to-end tests, you will also need docker.
Alternative, you can install the Android SDK as described here: https://benshapi.ro/post/android-sdk-without-android-studio
This project is configured to support multiple flavor dimensions:
- TUM or unrestricted: For TUM builds, users are forced to connect to the TUM Artemis instance.
- Beta or production: In beta builds, an extra label and dialog is displayed to signal that the build may contain bugs.
We use both unit tests and end-to-end integration tests. Before running the end-to-end tests, consider the licenses section in this readme.
- To run the unit tests, execute
./gradlew test -Dskip.unit-tests=false -Dskip.e2e=true -Dskip.debugVariants=true -Dskip.flavor.unrestricted=true -Dskip.flavor.beta=true
- To run the end-to-end tests, first start artemis locally in docker:
docker compose -f docker/e2e-tests.yml up artemis-app-setup
./gradlew test -Dskip.unit-tests=true -Dskip.e2e=false -Dskip.debugVariants=true -Dskip.flavor.unrestricted=true -Dskip.flavor.beta=true
For AndroidStudio, there are also preconfigured run configurations available.
Screenshots can be generated using preview-composables in the debug
source sets. They are annotated with @PlayStoreScreenshots
. To get the screenshots, right click the rendered preview
in AndroidStudio and select copy-image.
By building the dockerfile or using its derived images, you accept the terms in the following license agreements: