Skip to content

Commit 52ff3f4

Browse files
committed
Give androidRenderMode precedence when determing rendering
1 parent 91d2e35 commit 52ff3f4

File tree

2 files changed

+42
-12
lines changed

2 files changed

+42
-12
lines changed

android/src/main/java/com/rnmapbox/rnmbx/components/location/RNMBXNativeUserLocation.kt

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,22 @@ class RNMBXNativeUserLocation(context: Context) : AbstractMapFeature(context), O
5555

5656
// region bearing
5757
var androidRenderMode: RenderMode? = null
58+
set(value) {
59+
field = value
60+
_apply()
61+
}
62+
5863
var puckBearing: PuckBearing? = null
64+
set(value) {
65+
field = value
66+
_apply()
67+
}
68+
5969
var puckBearingEnabled: Boolean? = null
70+
set(value) {
71+
field = value
72+
_apply()
73+
}
6074
// endregion
6175

6276
enum class PuckImagePart {
@@ -125,36 +139,45 @@ class RNMBXNativeUserLocation(context: Context) : AbstractMapFeature(context), O
125139

126140
private fun _apply(mapView: MapView) {
127141
val location2 = mapView.location2;
128-
129-
val withBearing = puckBearingEnabled ?: when (androidRenderMode ?: RenderMode.NORMAL) {
130-
RenderMode.GPS -> true
131-
RenderMode.COMPASS -> true
132-
RenderMode.NORMAL -> false
142+
// Log a warning if both puckBearingEnabled and androidRenderMode are provided
143+
if (puckBearingEnabled != null && androidRenderMode != null) {
144+
Logger.w(LOG_TAG, "Both `puckBearingEnabled` and `androidRenderMode` are provided. `androidRenderMode` takes precedence, and `puckBearingEnabled` will be ignored.")
133145
}
134146

135-
// Always start with the default puck
136-
location2.locationPuck = createDefault2DPuck(withBearing = withBearing)
147+
val withBearing = androidRenderMode?.let { it != RenderMode.NORMAL } ?: (puckBearingEnabled == true)
148+
val puck = createDefault2DPuck(withBearing = withBearing)
137149

138-
// If custom images are provided, overwrite the corresponding fields
150+
// Update the bearing image based on androidRenderMode
151+
androidRenderMode?.let { renderMode ->
152+
when (renderMode) {
153+
RenderMode.GPS -> puck.bearingImage = AppCompatResourcesV11.getDrawableImageHolder(context, LR.drawable.mapbox_user_bearing_icon)
154+
RenderMode.COMPASS -> puck.bearingImage = AppCompatResourcesV11.getDrawableImageHolder(context, LR.drawable.mapbox_user_puck_icon)
155+
RenderMode.NORMAL -> puck.bearingImage = AppCompatResourcesV11.getDrawableImageHolder(context, LR.drawable.mapbox_user_stroke_icon)
156+
}
157+
}
158+
159+
// Overwrite images if custom ones are provided
139160
if (images.isNotEmpty()) {
140-
(location2.locationPuck as? LocationPuck2D)?.apply {
161+
(puck as? LocationPuck2D)?.apply {
141162
topImage = images[PuckImagePart.TOP] ?: topImage
142163
bearingImage = images[PuckImagePart.BEARING] ?: bearingImage
143164
shadowImage = images[PuckImagePart.SHADOW] ?: shadowImage
144165
scaleExpression = scale?.toJson() ?: scaleExpression
145166
}
146167
}
147168

148-
// If visibility is false, overwrite the images with empty placeholders
169+
// Handle visibility: use empty placeholders if not visible
149170
if (!visible) {
150171
val empty = AppCompatResourcesV11.getDrawableImageHolder(mContext, R.drawable.empty)
151-
(location2.locationPuck as? LocationPuck2D)?.apply {
172+
(puck as? LocationPuck2D)?.apply {
152173
topImage = empty
153174
bearingImage = empty
154175
shadowImage = empty
155176
}
156177
}
157178

179+
location2.locationPuck = puck
180+
158181
this.puckBearing?.let {
159182
location2.puckBearing = it
160183
}
@@ -175,7 +198,7 @@ class RNMBXNativeUserLocation(context: Context) : AbstractMapFeature(context), O
175198
ReadableType.Number ->
176199
location2.pulsingColor = pulsing.getInt("color")
177200
else ->
178-
Logger.e(LOG_TAG, "pusling.color should be either a map or a number, but was ${pulsing.getDynamic("color")}")
201+
Logger.e(LOG_TAG, "pulsing.color should be either a map or a number, but was ${pulsing.getDynamic("color")}")
179202
}
180203
}
181204
pulsing.getAndLogIfNotBoolean("isEnabled")?.let { enabled ->

android/src/main/java/com/rnmapbox/rnmbx/components/location/RNMBXNativeUserLocationManager.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,18 @@ class RNMBXNativeUserLocationManager : ViewGroupManager<RNMBXNativeUserLocation>
2929
override fun setAndroidRenderMode(userLocation: RNMBXNativeUserLocation, mode: Dynamic) {
3030
if (!mode.isNull) {
3131
Logger.e("RNMBXNativeUserLocationManager", "androidRenderMode is deprecated, use puckBearing instead")
32+
} else {
33+
userLocation.androidRenderMode = null
34+
return
3235
}
3336
when (mode.asString()) {
3437
"compass" -> userLocation.androidRenderMode = RenderMode.COMPASS
3538
"gps" -> userLocation.androidRenderMode = RenderMode.GPS
3639
"normal" -> userLocation.androidRenderMode = RenderMode.NORMAL
40+
else -> {
41+
Logger.e("RNMBXNativeUserLocationManager", "Invalid androidRenderMode value: ${mode.asString()}")
42+
userLocation.androidRenderMode = null
43+
}
3744
}
3845
}
3946

0 commit comments

Comments
 (0)