@rnmapbox/maps 10.0.0-rc.0 → 10.0.0-rc.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +2 -2
  2. package/android/rctmgl/build.gradle +1 -1
  3. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/AbstractEventEmitter.kt +75 -0
  4. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/annotation/RCTMGLMarkerViewManager.kt +1 -1
  5. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/camera/RCTMGLCamera.kt +92 -9
  6. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/images/RCTMGLImagesManager.kt +2 -2
  7. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/LocationComponentManager.kt +3 -2
  8. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/RCTMGLAndroidTextureMapViewManager.kt +23 -0
  9. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.kt +86 -17
  10. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/RCTMGLMapViewManager.kt +24 -8
  11. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/styles/sources/RCTMGLRasterSourceManager.kt +1 -1
  12. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/styles/sources/RCTMGLTileSourceManager.kt +1 -1
  13. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/styles/sources/RCTMGLVectorSourceManager.kt +1 -1
  14. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/AbstractEvent.kt +49 -0
  15. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/IEvent.kt +17 -0
  16. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/LocationEvent.kt +11 -16
  17. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/MapUserTrackingModeEvent.kt +10 -10
  18. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/constants/EventTypes.kt +44 -0
  19. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/modules/RCTMGLLocationModule.kt +36 -1
  20. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/modules/RCTMGLModule.kt +4 -3
  21. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/modules/RCTMGLOfflineModule.kt +474 -405
  22. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/utils/extensions/FeatureCollection.kt +10 -0
  23. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/utils/extensions/Geometry.kt +22 -0
  24. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/utils/extensions/JSONObject.kt +78 -0
  25. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/utils/extensions/ReadableArray.kt +1 -1
  26. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/utils/extensions/Value.kt +9 -0
  27. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/utils/writeableMapArrayOf.kt +41 -0
  28. package/ios/RCTMGL-v10/RCTMGLCamera.swift +1 -6
  29. package/ios/RCTMGL-v10/RCTMGLImages.swift +0 -1
  30. package/ios/RCTMGL-v10/RCTMGLLocationModule.m +2 -2
  31. package/ios/RCTMGL-v10/RCTMGLMapView.swift +7 -1
  32. package/ios/RCTMGL-v10/RCTMGLOfflineModule.swift +283 -307
  33. package/ios/install.md +7 -0
  34. package/lib/commonjs/components/MapView.js +12 -2
  35. package/lib/commonjs/components/MapView.js.map +1 -1
  36. package/lib/commonjs/components/NativeUserLocation.js.map +1 -1
  37. package/lib/commonjs/components/Terrain.js +1 -2
  38. package/lib/commonjs/components/Terrain.js.map +1 -1
  39. package/lib/commonjs/components/VectorSource.js +2 -0
  40. package/lib/commonjs/components/VectorSource.js.map +1 -1
  41. package/lib/commonjs/modules/location/locationManager.js +4 -0
  42. package/lib/commonjs/modules/location/locationManager.js.map +1 -1
  43. package/lib/module/components/MapView.js +12 -2
  44. package/lib/module/components/MapView.js.map +1 -1
  45. package/lib/module/components/NativeUserLocation.js.map +1 -1
  46. package/lib/module/components/Terrain.js +1 -2
  47. package/lib/module/components/Terrain.js.map +1 -1
  48. package/lib/module/components/VectorSource.js +3 -0
  49. package/lib/module/components/VectorSource.js.map +1 -1
  50. package/lib/module/modules/location/locationManager.js +4 -0
  51. package/lib/module/modules/location/locationManager.js.map +1 -1
  52. package/lib/typescript/components/MapView.d.ts +7 -1
  53. package/lib/typescript/components/MapView.d.ts.map +1 -1
  54. package/lib/typescript/components/NativeUserLocation.d.ts.map +1 -1
  55. package/lib/typescript/components/Terrain.d.ts.map +1 -1
  56. package/package.json +1 -1
  57. package/plugin/install.md +17 -0
  58. package/rnmapbox-maps.podspec +1 -1
  59. package/src/components/MapView.tsx +11 -3
  60. package/src/components/NativeUserLocation.tsx +5 -3
  61. package/src/components/Terrain.tsx +3 -5
  62. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/AbstractEventEmitter.java +0 -82
  63. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/RCTMGLAndroidTextureMapView.java +0 -16
  64. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/RCTMGLAndroidTextureMapViewManager.java +0 -31
  65. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/AbstractEvent.java +0 -62
  66. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/IEvent.java +0 -18
  67. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/constants/EventTypes.java +0 -51
@@ -8,7 +8,7 @@ import com.facebook.react.uimanager.annotations.ReactProp
8
8
  import com.mapbox.rctmgl.components.AbstractEventEmitter
9
9
 
10
10
  abstract class RCTMGLTileSourceManager<T : RCTMGLTileSource<*>?> internal constructor(
11
- reactApplicationContext: ReactApplicationContext?
11
+ reactApplicationContext: ReactApplicationContext
12
12
  ) : AbstractEventEmitter<T>(reactApplicationContext) {
13
13
  override fun getChildAt(source: T, childPosition: Int): View {
14
14
  return source!!.getChildAt(childPosition)
@@ -11,7 +11,7 @@ import com.mapbox.rctmgl.utils.ConvertUtils
11
11
  import com.mapbox.rctmgl.utils.ExpressionParser
12
12
  import javax.annotation.Nonnull
13
13
 
14
- class RCTMGLVectorSourceManager(reactApplicationContext: ReactApplicationContext?) :
14
+ class RCTMGLVectorSourceManager(reactApplicationContext: ReactApplicationContext) :
15
15
  RCTMGLTileSourceManager<RCTMGLVectorSource?>(reactApplicationContext) {
16
16
  @Nonnull
17
17
  override fun getName(): String {
@@ -0,0 +1,49 @@
1
+ package com.mapbox.rctmgl.events
2
+
3
+ import android.view.View
4
+ import com.facebook.react.bridge.Arguments
5
+ import com.facebook.react.bridge.WritableMap
6
+
7
+ abstract class AbstractEvent(view: View?, private val mEventType: String) : IEvent {
8
+ private var mTagID = 0
9
+ private val mTimestamp: Long
10
+
11
+ constructor(eventType: String) : this(null, eventType) {}
12
+
13
+ init {
14
+ if (view != null) {
15
+ mTagID = view.id
16
+ }
17
+ mTimestamp = System.currentTimeMillis()
18
+ }
19
+
20
+ override val iD
21
+ get() = mTagID
22
+
23
+ override val type
24
+ get() = mEventType
25
+
26
+ override fun equals(event: IEvent): Boolean {
27
+ return key == event.key && mEventType == event.type
28
+ }
29
+
30
+ override val payload
31
+ get() = Arguments.createMap()
32
+
33
+ override val timestamp
34
+ get() = mTimestamp
35
+
36
+ override fun toJSON(): WritableMap {
37
+ val map = Arguments.createMap()
38
+ map.putString("type", type)
39
+ val payloadClone = Arguments.createMap()
40
+ payloadClone.merge(payload)
41
+ map.putMap("payload", payloadClone)
42
+ return map
43
+ }
44
+
45
+ override fun canCoalesce(): Boolean {
46
+ // default behavior of com.facebook.react.uimanager.events.Event
47
+ return true
48
+ }
49
+ }
@@ -0,0 +1,17 @@
1
+ package com.mapbox.rctmgl.events
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+
5
+ /**
6
+ * Created by nickitaliano on 8/23/17.
7
+ */
8
+ interface IEvent {
9
+ val iD: Int
10
+ val key: String?
11
+ val type: String?
12
+ val timestamp: Long
13
+ fun equals(event: IEvent): Boolean
14
+ fun canCoalesce(): Boolean
15
+ val payload: WritableMap
16
+ fun toJSON(): WritableMap
17
+ }
@@ -3,10 +3,8 @@ package com.mapbox.rctmgl.events
3
3
  import android.location.Location
4
4
  import com.facebook.react.bridge.Arguments
5
5
  import com.mapbox.rctmgl.components.mapview.RCTMGLMapView
6
- import com.mapbox.rctmgl.events.IEvent
7
6
  import com.mapbox.rctmgl.events.constants.EventKeys
8
7
  import com.mapbox.rctmgl.events.constants.EventTypes
9
- import com.mapbox.rctmgl.events.LocationEvent
10
8
  import com.facebook.react.bridge.WritableMap
11
9
  import com.facebook.react.bridge.WritableNativeMap
12
10
  import java.util.*
@@ -20,21 +18,17 @@ class LocationEvent(private val location: Location, private val mapView: RCTMGLM
20
18
 
21
19
  constructor(location: Location) : this(location, null) {}
22
20
 
23
- override fun getID(): Int {
24
- return mapView?.id ?: -1
25
- }
21
+ override val iD
22
+ get() = mapView?.id ?: -1
26
23
 
27
- override fun getKey(): String {
28
- return EventKeys.USER_LOCATION_UPDATE
29
- }
24
+ override val key
25
+ get() = EventKeys.USER_LOCATION_UPDATE
30
26
 
31
- override fun getType(): String {
32
- return EventTypes.USER_LOCATION_UPDATED
33
- }
27
+ override val type
28
+ get() = EventTypes.USER_LOCATION_UPDATED
34
29
 
35
- override fun getTimestamp(): Long {
36
- return System.currentTimeMillis()
37
- }
30
+ override val timestamp
31
+ get() = System.currentTimeMillis()
38
32
 
39
33
  override fun equals(event: IEvent): Boolean {
40
34
  val other = event as LocationEvent
@@ -45,14 +39,15 @@ class LocationEvent(private val location: Location, private val mapView: RCTMGLM
45
39
  return uUID == event.uUID
46
40
  }
47
41
 
48
- override fun getPayload(): WritableMap {
42
+ override val payload: WritableMap
43
+ get() {
49
44
  val positionProperties: WritableMap = WritableNativeMap()
50
45
  val coords: WritableMap = WritableNativeMap()
51
46
  coords.putDouble("longitude", location.longitude)
52
47
  coords.putDouble("latitude", location.latitude)
53
48
  coords.putDouble("altitude", location.altitude)
54
49
  coords.putDouble("accuracy", location.accuracy.toDouble())
55
- // A better solution will be to pull the heading from the compass engine,
50
+ // A better solution will be to pull the heading from the compass engine,
56
51
  // unfortunately the api is not publicly available in the mapbox sdk
57
52
  coords.putDouble("heading", location.bearing.toDouble())
58
53
  coords.putDouble("course", location.bearing.toDouble())
@@ -7,15 +7,15 @@ import com.mapbox.rctmgl.components.location.UserTrackingMode
7
7
  import com.mapbox.rctmgl.events.constants.EventKeys
8
8
  import com.mapbox.rctmgl.events.constants.EventTypes
9
9
 
10
- class MapUserTrackingModeEvent(view: View?, val userTrackingMode: Int) : AbstractEvent(view, EventTypes.MAP_USER_TRACKING_MODE_CHANGE) {
11
- override fun getKey(): String {
12
- return EventKeys.MAP_USER_TRACKING_MODE_CHANGE;
13
- }
10
+ class MapUserTrackingModeEvent(view: View?, val userTrackingMode: Int, val basePayload: WritableMap? = null) : AbstractEvent(view, EventTypes.MAP_USER_TRACKING_MODE_CHANGE) {
11
+ override val key
12
+ get() = EventKeys.MAP_USER_TRACKING_MODE_CHANGE;
14
13
 
15
- override fun getPayload(): WritableMap {
16
- val payload = Arguments.createMap()
17
- payload.putBoolean("followUserLocation", userTrackingMode != UserTrackingMode.NONE)
18
- payload.putString("followUserMode", UserTrackingMode.toString(userTrackingMode))
19
- return payload
20
- }
14
+ override val payload : WritableMap
15
+ get() = {
16
+ val payload = basePayload?.copy() ?: Arguments.createMap()
17
+ payload.putBoolean("followUserLocation", userTrackingMode != UserTrackingMode.NONE)
18
+ payload.putString("followUserMode", UserTrackingMode.toString(userTrackingMode))
19
+ payload
20
+ }.invoke()
21
21
  }
@@ -0,0 +1,44 @@
1
+ package com.mapbox.rctmgl.events.constants
2
+
3
+ object EventTypes {
4
+ // map event types
5
+ const val MAP_CLICK = "press"
6
+ const val MAP_LONG_CLICK = "longpress"
7
+ const val MAP_USER_TRACKING_MODE_CHANGE = "usertrackingmodechange"
8
+ const val REGION_WILL_CHANGE = "regionwillchange"
9
+ const val REGION_IS_CHANGING = "regionischanging" // deprecated
10
+ const val CAMERA_CHANGED = "camerachanged"
11
+ const val REGION_DID_CHANGE = "regiondidchange"
12
+ const val MAP_IDLE = "mapidle"
13
+ const val USER_LOCATION_UPDATED = "userlocationdupdated"
14
+ const val WILL_START_LOADING_MAP = "willstartloadingmap"
15
+ const val DID_FINISH_LOADING_MAP = "didfinishloadingmap"
16
+ const val DID_FAIL_LOADING_MAP = "didfailloadingmap"
17
+ const val WILL_START_RENDERING_FRAME = "willstartrenderingframe"
18
+ const val DID_FINISH_RENDERING_FRAME = "didfinishrenderingframe"
19
+ const val DID_FINISH_RENDERING_FRAME_FULLY = "didfinishrenderingframefully"
20
+ const val WILL_START_RENDERING_MAP = "willstartrenderingmap"
21
+ const val DID_FINISH_RENDERING_MAP = "didfinishrenderingmap"
22
+ const val DID_FINISH_RENDERING_MAP_FULLY = "didfinishrenderingmapfully"
23
+ const val DID_FINISH_LOADING_STYLE = "didfinishloadingstyle"
24
+
25
+ // point annotation event types
26
+ const val ANNOTATION_SELECTED = "annotationselected"
27
+ const val ANNOTATION_DESELECTED = "annotationdeselected"
28
+ const val ANNOTATION_DRAG_START = "annotationdragstart"
29
+ const val ANNOTATION_DRAG = "annotationdrag"
30
+ const val ANNOTATION_DRAG_END = "annotationdragend"
31
+
32
+ // offline event types
33
+ const val OFFLINE_ERROR = "offlineerror"
34
+ const val OFFLINE_TILE_LIMIT = "offlinetilelimit"
35
+ const val OFFLINE_STATUS = "offlinestatus"
36
+
37
+ // shape source event types
38
+ const val SHAPE_SOURCE_LAYER_CLICK = "shapesourcelayerpress"
39
+ const val VECTOR_SOURCE_LAYER_CLICK = "vectorsourcelayerpress"
40
+ const val RASTER_SOURCE_LAYER_CLICK = "rastersourcelayerpress"
41
+
42
+ // image missing event type
43
+ const val IMAGES_MISSING = "imagesmissing"
44
+ }
@@ -12,6 +12,9 @@ import com.mapbox.rctmgl.events.EventEmitter
12
12
  import com.mapbox.rctmgl.location.LocationManager.Companion.getInstance
13
13
  import java.lang.Exception
14
14
 
15
+ data class LocationEventThrottle(var waitBetweenEvents: Double? = null, var lastSentTimestamp: Long? = null) {
16
+ }
17
+
15
18
  @ReactModule(name = RCTMGLLocationModule.REACT_CLASS)
16
19
  class RCTMGLLocationModule(reactContext: ReactApplicationContext) :
17
20
  ReactContextBaseJavaModule(reactContext) {
@@ -19,6 +22,7 @@ class RCTMGLLocationModule(reactContext: ReactApplicationContext) :
19
22
  private var mMinDisplacement = 0f
20
23
  private val locationManager: LocationManager? = getInstance(reactContext)
21
24
  private var mLastLocation: Location? = null
25
+ private var locationEventThrottle: LocationEventThrottle = LocationEventThrottle()
22
26
 
23
27
  private val lifecycleEventListener: LifecycleEventListener = object : LifecycleEventListener {
24
28
  override fun onHostResume() {
@@ -52,7 +56,7 @@ class RCTMGLLocationModule(reactContext: ReactApplicationContext) :
52
56
  }
53
57
  }
54
58
  mLastLocation = location
55
- if (changed && (location != null)) {
59
+ if (changed && (location != null) && shouldSendLocationEvent()) {
56
60
  val locationEvent = LocationEvent(location)
57
61
  val emitter = EventEmitter.getModuleEmitter(reactApplicationContext)
58
62
  emitter?.emit(LOCATION_UPDATE, locationEvent.payload)
@@ -145,6 +149,37 @@ class RCTMGLLocationModule(reactContext: ReactApplicationContext) :
145
149
  mLastLocation = null
146
150
  }
147
151
 
152
+ // region Location event throttle
153
+ @ReactMethod
154
+ fun setLocationEventThrottle(throttleValue: Double) {
155
+ if (throttleValue > 0) {
156
+ locationEventThrottle.waitBetweenEvents = throttleValue;
157
+ } else {
158
+ locationEventThrottle.waitBetweenEvents = null
159
+ }
160
+ }
161
+
162
+ fun shouldSendLocationEvent(): Boolean {
163
+ val waitBetweenEvents = locationEventThrottle.waitBetweenEvents
164
+ if (waitBetweenEvents == null) {
165
+ return true
166
+ }
167
+
168
+ val currentTimestamp = System.nanoTime()
169
+ val lastSentTimestamp = locationEventThrottle.lastSentTimestamp
170
+ if (lastSentTimestamp == null) {
171
+ return true
172
+ }
173
+
174
+ if ((currentTimestamp - lastSentTimestamp) > 1000.0*waitBetweenEvents) {
175
+ return true
176
+ }
177
+
178
+ return false
179
+ }
180
+ // endregion
181
+
182
+
148
183
  companion object {
149
184
  const val REACT_CLASS = "RCTMGLLocationModule"
150
185
  const val LOCATION_UPDATE = "MapboxUserLocationUpdate"
@@ -87,9 +87,10 @@ class RCTMGLModule(private val mReactContext: ReactApplicationContext) : ReactCo
87
87
 
88
88
  // offline region download states
89
89
  val offlinePackDownloadStates: MutableMap<String, String> = HashMap()
90
- offlinePackDownloadStates["Inactive"] = RCTMGLOfflineModule.INACTIVE_REGION_DOWNLOAD_STATE
91
- offlinePackDownloadStates["Active"] = RCTMGLOfflineModule.ACTIVE_REGION_DOWNLOAD_STATE
92
- offlinePackDownloadStates["Complete"] = RCTMGLOfflineModule.COMPLETE_REGION_DOWNLOAD_STATE
90
+ offlinePackDownloadStates["Inactive"] = TileRegionPackState.INACTIVE.rawValue
91
+ offlinePackDownloadStates["Active"] = TileRegionPackState.ACTIVE.rawValue
92
+ offlinePackDownloadStates["Complete"] = TileRegionPackState.COMPLETE.rawValue
93
+ offlinePackDownloadStates["Unknown"] = TileRegionPackState.UNKNOWN.rawValue
93
94
 
94
95
  // offline module callback names
95
96
  val offlineModuleCallbackNames: MutableMap<String, String> = HashMap()