Skip to content

Commit 657466f

Browse files
authored
Polyline demo (#53)
* Implemeting polyline demo * Fix: circle click event listener does not work * Implement updatePolyline of PolylineOverlayManagerImpl * fix: polyline change does not work * fix: polyline does not update when a marker is dragged on Google Maps and Mapbox * fix: polyline does not update when a marker is dragged on Here and ArcGIS
1 parent c0dc7b0 commit 657466f

34 files changed

Lines changed: 1154 additions & 774 deletions

File tree

example-app/src/main/java/com/mapconductor/example/DemoAppScreen.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.compose.foundation.layout.fillMaxSize
55
import androidx.compose.material.icons.Icons
66
import androidx.compose.material.icons.filled.CheckCircle
77
import androidx.compose.material.icons.filled.Home
8+
import androidx.compose.material.icons.filled.PlayArrow
89
import androidx.compose.material3.Text
910
import androidx.compose.runtime.Composable
1011
import androidx.compose.runtime.getValue
@@ -13,6 +14,7 @@ import androidx.compose.ui.Modifier
1314
import androidx.lifecycle.viewmodel.compose.viewModel
1415
import com.mapconductor.example.navigation.NavigationViewModel
1516
import com.mapconductor.example.pages.circle.CircleMapPage
17+
import com.mapconductor.example.pages.polyline.PolylineMapPage
1618
import com.mapconductor.example.pages.stores.StoreMapPage
1719
import com.mapconductor.example.ui.sidebar.Sidebar
1820
import com.mapconductor.example.ui.sidebar.SidebarItem
@@ -38,6 +40,12 @@ fun DemoAppScreen() {
3840
icon = Icons.Default.CheckCircle,
3941
route = "circle",
4042
),
43+
SidebarItem(
44+
id = "polyline",
45+
title = "Polyline Demo",
46+
icon = Icons.Default.PlayArrow,
47+
route = "polyline",
48+
),
4149
// SidebarItem(
4250
// id = "examples",
4351
// title = "Map Examples",
@@ -67,6 +75,11 @@ fun DemoAppScreen() {
6775
onToggleSidebar = navigationViewModel::toggleSidebar,
6876
)
6977
}
78+
"polyline" -> {
79+
PolylineMapPage(
80+
onToggleSidebar = navigationViewModel::toggleSidebar,
81+
)
82+
}
7083
"settings" -> {
7184
// Placeholder for settings page
7285
Box(

example-app/src/main/java/com/mapconductor/example/MapViewContainer.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.mapconductor.core.circle.OnCircleEventHandler
99
import com.mapconductor.core.map.MapViewState
1010
import com.mapconductor.core.map.OnMapEventHandler
1111
import com.mapconductor.core.marker.OnMarkerEventHandler
12+
import com.mapconductor.core.polyline.OnPolylineEventHandler
1213
import com.mapconductor.googlemaps.GoogleMapViewState
1314
import com.mapconductor.googlemaps.GoogleMapsView
1415
import com.mapconductor.here.HereMapView
@@ -28,6 +29,7 @@ fun MapViewContainer(
2829
onMarkerAnimateStart: OnMarkerEventHandler? = null,
2930
onMarkerAnimateEnd: OnMarkerEventHandler? = null,
3031
onCircleClick: OnCircleEventHandler? = null,
32+
onPolylineClick: OnPolylineEventHandler? = null,
3133
content: @Composable MapViewScope.() -> Unit,
3234
) {
3335
when (state) {
@@ -43,6 +45,7 @@ fun MapViewContainer(
4345
onMarkerAnimateStart = onMarkerAnimateStart,
4446
onMarkerAnimateEnd = onMarkerAnimateEnd,
4547
onCircleClick = onCircleClick,
48+
onPolylineClick = onPolylineClick,
4649
content = content,
4750
)
4851

@@ -57,6 +60,8 @@ fun MapViewContainer(
5760
onMarkerDragEnd = onMarkerDragEnd,
5861
onMarkerAnimateStart = onMarkerAnimateStart,
5962
onMarkerAnimateEnd = onMarkerAnimateEnd,
63+
onCircleClick = onCircleClick,
64+
onPolylineClick = onPolylineClick,
6065
content = content,
6166
)
6267

@@ -72,6 +77,7 @@ fun MapViewContainer(
7277
onMarkerAnimateStart = onMarkerAnimateStart,
7378
onMarkerAnimateEnd = onMarkerAnimateEnd,
7479
onCircleClick = onCircleClick,
80+
onPolylineClick = onPolylineClick,
7581
content = content,
7682
)
7783

@@ -87,6 +93,7 @@ fun MapViewContainer(
8793
onMarkerAnimateStart = onMarkerAnimateStart,
8894
onMarkerAnimateEnd = onMarkerAnimateEnd,
8995
onCircleClick = onCircleClick,
96+
onPolylineClick = onPolylineClick,
9097
content = content,
9198
)
9299

example-app/src/main/java/com/mapconductor/example/navigation/NavigationViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import androidx.compose.runtime.mutableStateOf
55
import androidx.lifecycle.ViewModel
66

77
class NavigationViewModel : ViewModel() {
8-
private val _currentPage = mutableStateOf("map")
8+
private val _currentPage = mutableStateOf("polyline")
99
val currentPage: State<String> = _currentPage
1010

1111
private val _isSidebarExpanded = mutableStateOf(false)

example-app/src/main/java/com/mapconductor/example/pages/circle/CircleMapComponent.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@ fun CircleMapComponent(
1616
mapViewState: MapViewState<*>?,
1717
viewModel: CirclePageViewModel,
1818
modifier: Modifier = Modifier,
19-
onMapClickHandler: OnMapEventHandler = {},
20-
onMarkerClickHandler: OnMarkerEventHandler = {},
21-
onCircleClickHandler: OnCircleEventHandler = {},
19+
onMapClick: OnMapEventHandler = {},
20+
onMarkerClick: OnMarkerEventHandler = {},
21+
onCircleClick: OnCircleEventHandler = {},
2222
onMarkerDrag: OnMarkerEventHandler = {},
2323
) {
24-
mapViewState?.let { mapViewState ->
24+
mapViewState?.let { it ->
2525
MapViewContainer(
2626
modifier = modifier,
27-
state = mapViewState,
28-
onMapClick = onMapClickHandler,
29-
onMarkerClick = onMarkerClickHandler,
30-
onCircleClick = onCircleClickHandler,
27+
state = it,
28+
onMapClick = onMapClick,
29+
onMarkerClick = onMarkerClick,
30+
onCircleClick = onCircleClick,
3131
onMarkerDrag = onMarkerDrag,
3232
) {
3333
// Circle

example-app/src/main/java/com/mapconductor/example/pages/circle/CircleMapPage.kt

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,19 @@ package com.mapconductor.example.pages.circle
22

33
import androidx.compose.foundation.layout.calculateEndPadding
44
import androidx.compose.foundation.layout.calculateStartPadding
5+
import androidx.compose.foundation.layout.fillMaxSize
56
import androidx.compose.foundation.layout.padding
7+
import androidx.compose.material3.Text
68
import androidx.compose.runtime.Composable
79
import androidx.compose.runtime.collectAsState
810
import androidx.compose.ui.Alignment
911
import androidx.compose.ui.Modifier
12+
import androidx.compose.ui.res.stringResource
1013
import androidx.compose.ui.unit.LayoutDirection
1114
import androidx.compose.ui.unit.dp
15+
import com.mapconductor.example.R
1216
import com.mapconductor.example.toast.ToastHost
1317
import com.mapconductor.example.ui.DemoMapPageScaffold
14-
import com.mapconductor.example.ui.MapViewStatePanel
1518
import com.mapconductor.example.ui.MessageCard
1619

1720
@Composable
@@ -29,9 +32,9 @@ fun CircleMapPage(
2932
CircleMapComponent(
3033
mapViewState = mapViewState.value,
3134
viewModel = viewModel,
32-
onMapClickHandler = viewModel::onMapClick,
33-
onMarkerClickHandler = viewModel::onMarkerClick,
34-
onCircleClickHandler = viewModel::onCircleClick,
35+
onMapClick = viewModel::onMapClick,
36+
onMarkerClick = viewModel::onMarkerClick,
37+
onCircleClick = viewModel::onCircleClick,
3538
onMarkerDrag = viewModel::onMarkerDrag,
3639
)
3740

@@ -47,11 +50,9 @@ fun CircleMapPage(
4750
),
4851
title = "Messages",
4952
) {
50-
MapViewStatePanel(
51-
mapViewState.value
52-
?.mapCameraPosition
53-
?.collectAsState()
54-
?.value,
53+
Text(
54+
text = stringResource(R.string.circle_example_description),
55+
modifier = Modifier.fillMaxSize(),
5556
)
5657
}
5758

0 commit comments

Comments
 (0)