Skip to content

Commit 6e60469

Browse files
committed
Give androidRenderMode precedence when determing rendering
1 parent 91d2e35 commit 6e60469

File tree

2 files changed

+43
-15
lines changed

2 files changed

+43
-15
lines changed

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

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,23 @@ 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+
}
74+
6075
// endregion
6176

6277
enum class PuckImagePart {
@@ -125,36 +140,42 @@ class RNMBXNativeUserLocation(context: Context) : AbstractMapFeature(context), O
125140

126141
private fun _apply(mapView: MapView) {
127142
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
143+
// Log a warning if both puckBearingEnabled and androidRenderMode are provided
144+
if (puckBearingEnabled != null && androidRenderMode != null) {
145+
Logger.e(LOG_TAG, "Both `puckBearingEnabled` and `androidRenderMode` are provided. `androidRenderMode` takes precedence, and `puckBearingEnabled` will be ignored.")
133146
}
134147

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

138-
// If custom images are provided, overwrite the corresponding fields
151+
// Update the bearing image based on androidRenderMode
152+
androidRenderMode?.let { renderMode ->
153+
when (renderMode) {
154+
RenderMode.GPS -> puck.bearingImage = AppCompatResourcesV11.getDrawableImageHolder(context,LR.drawable.mapbox_user_bearing_icon)
155+
RenderMode.COMPASS -> puck.bearingImage = AppCompatResourcesV11.getDrawableImageHolder(context,LR.drawable.mapbox_user_puck_icon)
156+
RenderMode.NORMAL -> puck.bearingImage = AppCompatResourcesV11.getDrawableImageHolder(context,LR.drawable.mapbox_user_stroke_icon)
157+
}
158+
}
159+
160+
// Overwrite images if custom ones are provided
139161
if (images.isNotEmpty()) {
140-
(location2.locationPuck as? LocationPuck2D)?.apply {
162+
(puck as? LocationPuck2D)?.apply {
141163
topImage = images[PuckImagePart.TOP] ?: topImage
142164
bearingImage = images[PuckImagePart.BEARING] ?: bearingImage
143165
shadowImage = images[PuckImagePart.SHADOW] ?: shadowImage
144166
scaleExpression = scale?.toJson() ?: scaleExpression
145167
}
146168
}
147169

148-
// If visibility is false, overwrite the images with empty placeholders
170+
// Handle visibility: use empty placeholders if not visible
149171
if (!visible) {
172+
Logger.e(LOG_TAG, "Setting puck to invisible")
150173
val empty = AppCompatResourcesV11.getDrawableImageHolder(mContext, R.drawable.empty)
151-
(location2.locationPuck as? LocationPuck2D)?.apply {
152-
topImage = empty
153-
bearingImage = empty
154-
shadowImage = empty
155-
}
174+
(puck as? LocationPuck2D)?.apply {topImage = empty; bearingImage = empty; shadowImage = empty}
156175
}
157176

177+
location2.locationPuck = puck
178+
158179
this.puckBearing?.let {
159180
location2.puckBearing = it
160181
}

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)