This app aims to bring a clear overview of BTH to it´s users. It will feature accessible routes as well as the quickest possible route the user can take to get from one place to another. This app is made for everyone, from visitors to students, it´s function is appealing to anyone who finds themselves lost in BTH.
The app has a Model-View-ViewModel (MVVM) pattern to keep the code organized:
- View (User interface): Everything seen on the screen (how the app looks and reacts to changes). Composed of Jetpack Compose functions (e.g., PathScreen, HomeScreen). These components are responsible for the UI display and capturing user input.
- ViewModel (bridge): It connects the screen with the data. It remembers which rooms were selected so the information stays ready when changing screens. It receives navigation parameters (start and destination rooms) from the PathScreen via the setRooms() method and preserves this state for the NavigationScreen.
- Model (data and logic): It contains the list of all rooms and the logic to find them. The InMemoryRoomDao handles room searching and data retrieval, managing the Room and POI domain objects.
| # | As a | I want/need to | so that | Acceptance Criteria |
|---|---|---|---|---|
| US1 | As a user, | I want to search for a lecture room by name or number, | so that I can arrive on time without confusion. | Return the building letter and pin on a map |
| US1 | As a user, | I want to search for a lecture room by name or number, | so that I can arrive on time without confusion. | Return the building letter and pin on a map |
| US2 | As a user, | I want to filter locations based on their type, | so that I have an overview of all meeting rooms. | Have attributes for all rooms, filter based on that in a list |
| US3 | As a user, | I want visual navigation instructions for a location, | so that I know in which direction I have to go. | Use icons (arrows, clocks, etc) instead of language |
| US4 | As a user, | I want to explore points of interest like the library or cafeteria | so that I can experience campus life. | Have “POI” attribute that is a popular meeting place (Starbucks machine, EXPEN, etc) |
| US5 | As a user, | I want to search for all rooms on a floor | so that I can familiarise myself with all the rooms | After specifying a building, view all its floors and lecture halls floor by floor |
| US6 | As a user, | I want to be able to search with different arguments | so that I can specify if I’m wheelchair-bound, in bad weather | The path taken needs to take the arguments into account |
| US7 | As a user, | I want to know where the lifts and ramps are | so that I can navigate BTH if I have an ability impairment | Use icons and detailed descriptions |
| US8 | As a user, | I want to know the capacity of the place I want to arrive at | so that I can distinguish visually if I am in the correct location upon arrival | Have a categorical (S,M,L) representation of capacity for all rooms |
Track the development status of the app.
Use [ ] for not implemented [x] for implemented.
[x] US1
[x] US2
[x] US3 poorly but it is implemented
[x] US4
[x] US5
[x] US6
[ ] US7
[x] US8
Open the project in Android studio. Go to Build -> Generate App Bundles or APKs -> Generate APKs. Android Studio will compile the app and tell you where the APK file is located (usually in app/build/outputs/apk/debug). Now you can install the APK on your Android device.
./gradlew test --rerun-tasksRunning UI tests requires API33 or below, otherwise conflicts occur within, so UI tests are being run on a PIXEL5, API33
- Start an Android emulator.
- Click the green "Run" arrow at the top of Android Studio.
- Select the target device.
- The app will now compile and be launched automatically on the selected device.
This project is licensed under the MIT License – see the LICENSE file for details.


