Skip to content

Commit e448bbb

Browse files
author
Marco Romano
authored
maplibre-compose allow customisation of location dot style (#929)
- And style it according to our designs. Related to: - element-hq/element-meta#1682
1 parent ec79c44 commit e448bbb

File tree

4 files changed

+42
-17
lines changed

4 files changed

+42
-17
lines changed

features/location/impl/src/main/kotlin/io/element/android/features/location/impl/MapDefaults.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import android.Manifest
2020
import android.view.Gravity
2121
import androidx.compose.runtime.Composable
2222
import androidx.compose.runtime.ReadOnlyComposable
23+
import androidx.compose.ui.graphics.Color
2324
import com.mapbox.mapboxsdk.camera.CameraPosition
2425
import com.mapbox.mapboxsdk.geometry.LatLng
2526
import io.element.android.libraries.maplibre.compose.MapLocationSettings
@@ -53,6 +54,13 @@ object MapDefaults {
5354
val locationSettings: MapLocationSettings
5455
get() = MapLocationSettings(
5556
locationEnabled = false,
57+
backgroundTintColor = Color.White,
58+
foregroundTintColor = Color.Black,
59+
backgroundStaleTintColor = Color.White,
60+
foregroundStaleTintColor = Color.Black,
61+
accuracyColor = Color.Black,
62+
pulseEnabled = true,
63+
pulseColor = Color.Black,
5664
)
5765

5866
val centerCameraPosition = CameraPosition.Builder()

libraries/maplibre-compose/src/main/kotlin/io/element/android/libraries/maplibre/compose/MapLocationSettings.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
package io.element.android.libraries.maplibre.compose
2020

21+
import androidx.compose.ui.graphics.Color
22+
2123
internal val DefaultMapLocationSettings = MapLocationSettings()
2224

2325
/**
@@ -28,4 +30,11 @@ internal val DefaultMapLocationSettings = MapLocationSettings()
2830
*/
2931
public data class MapLocationSettings(
3032
public val locationEnabled: Boolean = false,
33+
public val backgroundTintColor: Color = Color.Unspecified,
34+
public val foregroundTintColor: Color = Color.Unspecified,
35+
public val backgroundStaleTintColor: Color = Color.Unspecified,
36+
public val foregroundStaleTintColor: Color = Color.Unspecified,
37+
public val accuracyColor: Color = Color.Unspecified,
38+
public val pulseEnabled: Boolean = false,
39+
public val pulseColor: Color = Color.Unspecified
3140
)

libraries/maplibre-compose/src/main/kotlin/io/element/android/libraries/maplibre/compose/MapUpdater.kt

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,21 @@ internal class MapPropertiesNode(
3939
style: Style,
4040
context: Context,
4141
cameraPositionState: CameraPositionState,
42+
locationSettings: MapLocationSettings,
4243
) : MapNode {
4344

4445
init {
4546
map.locationComponent.activateLocationComponent(
4647
LocationComponentActivationOptions.Builder(context, style)
4748
.locationComponentOptions(
4849
LocationComponentOptions.builder(context)
49-
.pulseEnabled(true)
50+
.backgroundTintColor(locationSettings.backgroundTintColor.toArgb())
51+
.foregroundTintColor(locationSettings.foregroundTintColor.toArgb())
52+
.backgroundStaleTintColor(locationSettings.backgroundStaleTintColor.toArgb())
53+
.foregroundStaleTintColor(locationSettings.foregroundStaleTintColor.toArgb())
54+
.accuracyColor(locationSettings.accuracyColor.toArgb())
55+
.pulseEnabled(locationSettings.pulseEnabled)
56+
.pulseColor(locationSettings.pulseColor.toArgb())
5057
.build()
5158
)
5259
.locationEngineRequest(
@@ -116,9 +123,9 @@ internal class MapPropertiesNode(
116123
@Composable
117124
internal inline fun MapUpdater(
118125
cameraPositionState: CameraPositionState,
119-
mapLocationSettings: MapLocationSettings,
120-
mapUiSettings: MapUiSettings,
121-
mapSymbolManagerSettings: MapSymbolManagerSettings,
126+
locationSettings: MapLocationSettings,
127+
uiSettings: MapUiSettings,
128+
symbolManagerSettings: MapSymbolManagerSettings,
122129
) {
123130
val mapApplier = currentComposer.applier as MapApplier
124131
val map = mapApplier.map
@@ -132,21 +139,22 @@ internal inline fun MapUpdater(
132139
style = style,
133140
context = context,
134141
cameraPositionState = cameraPositionState,
142+
locationSettings = locationSettings,
135143
)
136144
},
137145
update = {
138-
set(mapLocationSettings.locationEnabled) { map.locationComponent.isLocationComponentEnabled = it }
146+
set(locationSettings.locationEnabled) { map.locationComponent.isLocationComponentEnabled = it }
139147

140-
set(mapUiSettings.compassEnabled) { map.uiSettings.isCompassEnabled = it }
141-
set(mapUiSettings.rotationGesturesEnabled) { map.uiSettings.isRotateGesturesEnabled = it }
142-
set(mapUiSettings.scrollGesturesEnabled) { map.uiSettings.isScrollGesturesEnabled = it }
143-
set(mapUiSettings.tiltGesturesEnabled) { map.uiSettings.isTiltGesturesEnabled = it }
144-
set(mapUiSettings.zoomGesturesEnabled) { map.uiSettings.isZoomGesturesEnabled = it }
145-
set(mapUiSettings.logoGravity) { map.uiSettings.logoGravity = it }
146-
set(mapUiSettings.attributionGravity) { map.uiSettings.attributionGravity = it }
147-
set(mapUiSettings.attributionTintColor) { map.uiSettings.setAttributionTintColor(it.toArgb()) }
148+
set(uiSettings.compassEnabled) { map.uiSettings.isCompassEnabled = it }
149+
set(uiSettings.rotationGesturesEnabled) { map.uiSettings.isRotateGesturesEnabled = it }
150+
set(uiSettings.scrollGesturesEnabled) { map.uiSettings.isScrollGesturesEnabled = it }
151+
set(uiSettings.tiltGesturesEnabled) { map.uiSettings.isTiltGesturesEnabled = it }
152+
set(uiSettings.zoomGesturesEnabled) { map.uiSettings.isZoomGesturesEnabled = it }
153+
set(uiSettings.logoGravity) { map.uiSettings.logoGravity = it }
154+
set(uiSettings.attributionGravity) { map.uiSettings.attributionGravity = it }
155+
set(uiSettings.attributionTintColor) { map.uiSettings.setAttributionTintColor(it.toArgb()) }
148156

149-
set(mapSymbolManagerSettings.iconAllowOverlap) { symbolManager.iconAllowOverlap = it }
157+
set(symbolManagerSettings.iconAllowOverlap) { symbolManager.iconAllowOverlap = it }
150158

151159
update(cameraPositionState) { this.cameraPositionState = it }
152160
}

libraries/maplibre-compose/src/main/kotlin/io/element/android/libraries/maplibre/compose/MapboxMap.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,9 @@ public fun MapboxMap(
124124
) {
125125
MapUpdater(
126126
cameraPositionState = currentCameraPositionState,
127-
mapUiSettings = currentUiSettings,
128-
mapLocationSettings = currentMapLocationSettings,
129-
mapSymbolManagerSettings = currentSymbolManagerSettings,
127+
uiSettings = currentUiSettings,
128+
locationSettings = currentMapLocationSettings,
129+
symbolManagerSettings = currentSymbolManagerSettings,
130130
)
131131
CompositionLocalProvider(
132132
LocalCameraPositionState provides cameraPositionState,

0 commit comments

Comments
 (0)