diff --git a/android/src/main/java/com/rnmapbox/rnmbx/events/MapSteadyEvent.kt b/android/src/main/java/com/rnmapbox/rnmbx/events/MapSteadyEvent.kt index 18d9f9981..80cff669c 100644 --- a/android/src/main/java/com/rnmapbox/rnmbx/events/MapSteadyEvent.kt +++ b/android/src/main/java/com/rnmapbox/rnmbx/events/MapSteadyEvent.kt @@ -7,7 +7,7 @@ import com.facebook.react.bridge.WritableMap /** * Direct event for CameraGestureObserver -> onMapSteady * JS registrationName: onMapSteady - * Native event name (key): topOnMapSteady + * Native event name (key): onMapSteady */ class MapSteadyEvent( view: View?, @@ -16,7 +16,7 @@ class MapSteadyEvent( private val lastGestureType: String? ) : AbstractEvent(view, "mapSteady") { override val key: String - get() = "topOnMapSteady" + get() = "onMapSteady" override val payload: WritableMap get() = Arguments.createMap().apply { @@ -34,6 +34,12 @@ class MapSteadyEvent( putDouble("timestamp", System.currentTimeMillis().toDouble()) } + override fun toJSON(): WritableMap { + val map = Arguments.createMap() + map.merge(payload) + return map + } + override fun canCoalesce(): Boolean { // Do not coalesce - each steady/timeout event is significant return false diff --git a/android/src/main/java/com/rnmapbox/rnmbx/events/RNMBXCameraGestureObserver.kt b/android/src/main/java/com/rnmapbox/rnmbx/events/RNMBXCameraGestureObserver.kt index 52a99143f..dbeced997 100644 --- a/android/src/main/java/com/rnmapbox/rnmbx/events/RNMBXCameraGestureObserver.kt +++ b/android/src/main/java/com/rnmapbox/rnmbx/events/RNMBXCameraGestureObserver.kt @@ -37,7 +37,6 @@ class RNMBXCameraGestureObserver( private var lastTransitionEndedAtMs: Double? = null private var quietRunnable: Runnable? = null private var timeoutRunnable: Runnable? = null - private var emittedForCurrentActivity: Boolean = false private val quietMs: Double get() = quietPeriodMs ?: 200.0 private val maxMs: Double? get() = maxIntervalMs @@ -84,9 +83,9 @@ class RNMBXCameraGestureObserver( } private fun scheduleQuietCheck() { + cancelQuietTimer() val delay = quietMs if (delay <= 0) { - cancelQuietTimer() maybeEmitSteady() return } @@ -99,8 +98,10 @@ class RNMBXCameraGestureObserver( } private fun scheduleTimeout() { + if (timeoutRunnable != null) return val delay = maxMs ?: return val runnable = Runnable { + timeoutRunnable = null emitTimeout() } timeoutRunnable = scheduleTimer(delay, runnable) @@ -108,7 +109,6 @@ class RNMBXCameraGestureObserver( private fun markActivity(gestureType: String? = null) { if (gestureType != null) lastGestureType = gestureType - emittedForCurrentActivity = false scheduleQuietCheck() scheduleTimeout() } @@ -122,7 +122,6 @@ class RNMBXCameraGestureObserver( } private fun emitSteady(idleDurationMs: Double) { - if (emittedForCurrentActivity) return cancelQuietTimer() cancelTimeoutTimer() val gesture = lastGestureType @@ -131,7 +130,6 @@ class RNMBXCameraGestureObserver( MapSteadyEvent.make(this, "steady", idleDurationMs, gesture) ) lastGestureType = null - emittedForCurrentActivity = true } private fun emitTimeout() { diff --git a/android/src/main/java/com/rnmapbox/rnmbx/events/RNMBXCameraGestureObserverManager.kt b/android/src/main/java/com/rnmapbox/rnmbx/events/RNMBXCameraGestureObserverManager.kt index c0d5865ed..7708ced26 100644 --- a/android/src/main/java/com/rnmapbox/rnmbx/events/RNMBXCameraGestureObserverManager.kt +++ b/android/src/main/java/com/rnmapbox/rnmbx/events/RNMBXCameraGestureObserverManager.kt @@ -65,7 +65,7 @@ class RNMBXCameraGestureObserverManager(private val mContext: ReactApplicationCo // Map the native event name to the JS registration name for direct events override fun customEvents(): Map = mapOf( - "topOnMapSteady" to "onMapSteady" + "onMapSteady" to "onMapSteady" ) companion object {