Skip to content

Commit 28d6727

Browse files
committed
feat(map): add setArea and use of coroutines
Added the setArea method to get the displayed portion of the map. Started to use co-routines for future API calls.
1 parent 1c75936 commit 28d6727

File tree

4 files changed

+39
-3
lines changed

4 files changed

+39
-3
lines changed

app/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,9 @@ dependencies {
154154
// ---------- FireBase ------------
155155
implementation(platform(libs.firebase.bom))
156156

157+
// ---------- OpenStreetMap ------------
158+
implementation(libs.osmdroid)
159+
157160
// Adds a remote binary dependency only for local tests.
158161
testImplementation(libs.junit)
159162

app/src/main/java/ch/hikemate/app/model/map/ListOfHikeRoutesViewModel.kt

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,14 @@ package ch.hikemate.app.model.map
22

33
import androidx.lifecycle.ViewModel
44
import androidx.lifecycle.ViewModelProvider
5+
import androidx.lifecycle.viewModelScope
6+
import kotlinx.coroutines.Dispatchers
57
import kotlinx.coroutines.flow.MutableStateFlow
68
import kotlinx.coroutines.flow.StateFlow
79
import kotlinx.coroutines.flow.asStateFlow
10+
import kotlinx.coroutines.launch
11+
import kotlinx.coroutines.withContext
12+
import org.osmdroid.util.BoundingBox
813

914
/**
1015
* ViewModel for the list of hike routes
@@ -21,6 +26,8 @@ open class ListOfHikeRoutesViewModel() : ViewModel() {
2126
private val selectedHikeRoute_ = MutableStateFlow<String?>(null) // TODO: should be a Route object
2227
open val selectedHikeRoute: StateFlow<String?> = selectedHikeRoute_.asStateFlow()
2328

29+
private val area_ = MutableStateFlow<BoundingBox?>(null)
30+
2431
// Creates a factory
2532
companion object {
2633
val Factory: ViewModelProvider.Factory =
@@ -32,12 +39,26 @@ open class ListOfHikeRoutesViewModel() : ViewModel() {
3239
}
3340
}
3441

42+
private suspend fun getRoutesAsync() {
43+
// TODO: Should call the API repository to get all the routes filtered by the area
44+
withContext(Dispatchers.IO) { Thread.sleep(100) }
45+
hikeRoutes_.value = listOf("Route 1", "Route 2", "Route 3")
46+
}
47+
3548
/** Gets all the routes from the database and updates the routes_ variable */
3649
fun getRoutes() {
37-
// TODO: should call the repository to get all the routes
38-
// repository.getRoutes(onSuccess = { routes_.value = it }, onFailure = {})
50+
viewModelScope.launch(Dispatchers.IO) { getRoutesAsync() }
51+
}
3952

40-
hikeRoutes_.value = listOf("Route 1", "Route 2", "Route 3")
53+
/**
54+
* Sets the current displayed area on the map and updates the list of routes displayed in the
55+
* list.
56+
*
57+
* @param area The area to be displayed
58+
*/
59+
fun setArea(area: BoundingBox) {
60+
area_.value = area
61+
getRoutes()
4162
}
4263

4364
/**

app/src/test/java/ch/hikemate/app/model/map/ListOfHikeRoutesViewModelTest.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package ch.hikemate.app.model.map
33
import org.junit.Assert.*
44
import org.junit.Before
55
import org.junit.Test
6+
import org.osmdroid.util.BoundingBox
67

78
/** Testing the ListOfRoutesViewModel class */
89
class ListOfHikeRoutesViewModelTest {
@@ -23,6 +24,8 @@ class ListOfHikeRoutesViewModelTest {
2324
@Test
2425
fun canGetRoutes() {
2526
listOfHikeRoutesViewModel.getRoutes()
27+
// Wait for the coroutine to finish
28+
Thread.sleep(500)
2629
assertNotEquals(listOfHikeRoutesViewModel.hikeRoutes.value.size, 0)
2730
}
2831

@@ -31,4 +34,12 @@ class ListOfHikeRoutesViewModelTest {
3134
listOfHikeRoutesViewModel.selectRoute("Route 1")
3235
assertEquals(listOfHikeRoutesViewModel.selectedHikeRoute.value, "Route 1")
3336
}
37+
38+
@Test
39+
fun canSetArea() {
40+
listOfHikeRoutesViewModel.setArea(BoundingBox(0.0, 0.0, 0.0, 0.0))
41+
// Wait for the coroutine to finish
42+
Thread.sleep(500)
43+
assertNotEquals(listOfHikeRoutesViewModel.hikeRoutes.value.size, 0)
44+
}
3445
}

gradle/libs.versions.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ kaspresso = { group = "com.kaspersky.android-components", name = "kaspresso", ve
5353
kaspresso-compose = { group = "com.kaspersky.android-components", name = "kaspresso-compose-support", version.ref = "kaspresso" }
5454

5555
robolectric = { module = "org.robolectric:robolectric", version.ref = "robolectric" }
56+
osmdroid = { module = "org.osmdroid:osmdroid-android", version = "6.1.14" }
5657

5758
# Firebase Libraries
5859
firebase-auth = { module = "com.google.firebase:firebase-auth", version.ref = "firebaseAuth" }

0 commit comments

Comments
 (0)