diff --git a/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXMapView.kt b/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXMapView.kt index 7f92fe61b..7a07f1b09 100644 --- a/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXMapView.kt +++ b/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXMapView.kt @@ -202,6 +202,27 @@ open class RNMBXMapView(private val mContext: Context, var mManager: RNMBXMapVie private var wasGestureActive = false private var isGestureActive = false + private val startupCameraEvents = object { + private var isReady = false + private var hasPendingChange = false + + fun onCameraChanged() { + if (!isReady) { + hasPendingChange = true + return + } + sendCameraChangedEvents() + } + + fun markReady() { + if (isReady) return + isReady = true + if (hasPendingChange) { + hasPendingChange = false + sendCameraChangedEvents() + } + } + } var mapViewImpl: String? = null @@ -260,8 +281,7 @@ open class RNMBXMapView(private val mContext: Context, var mManager: RNMBXMapVie val _this = this map.addOnCameraChangeListener(OnCameraChangeListener { cameraChangedEventData -> - handleMapChangedEvent(EventTypes.REGION_IS_CHANGING) - handleMapChangedEvent(EventTypes.CAMERA_CHANGED) + startupCameraEvents.onCameraChanged() }) map.addOnMapIdleListener(OnMapIdleListener { mapIdleEventData -> @@ -856,6 +876,11 @@ open class RNMBXMapView(private val mContext: Context, var mManager: RNMBXMapVie // region Events + private fun sendCameraChangedEvents() { + handleMapChangedEvent(EventTypes.REGION_IS_CHANGING) + handleMapChangedEvent(EventTypes.CAMERA_CHANGED) + } + fun sendRegionDidChangeEvent() { handleMapChangedEvent(EventTypes.REGION_DID_CHANGE) mCameraChangeTracker.setReason(CameraChangeReason.NONE) @@ -1622,6 +1647,8 @@ open class RNMBXMapView(private val mContext: Context, var mManager: RNMBXMapVie super.onAttachedToWindow() Handler(Looper.getMainLooper()).post { lifecycle.afterAttachFromLooper() + // Camera.addToMap applies defaultSettings in the attach callbacks (#4213). + startupCameraEvents.markReady() } }