@rnmapbox/maps 10.1.12 → 10.1.14
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.
- package/android/src/main/java/com/rnmapbox/rnmbx/RNMBXPackage.kt +13 -2
- package/android/src/main/java/com/rnmapbox/rnmbx/components/annotation/RNMBXPointAnnotationCoordinator.kt +39 -40
- package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/CameraStop.kt +9 -15
- package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/CameraUpdateItem.kt +1 -2
- package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt +15 -13
- package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCameraManager.kt +4 -3
- package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCameraModule.kt +51 -0
- package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXVIewportManager.kt +2 -1
- package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/constants/CameraMode.java +3 -2
- package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/RNMBXStyleFactory.kt +1046 -987
- package/android/src/main/java/com/rnmapbox/rnmbx/modules/RNMBXModule.kt +1 -0
- package/android/src/main/java/com/rnmapbox/rnmbx/utils/ViewTagResolver.kt +10 -2
- package/android/src/main/old-arch/com/rnmapbox/rnmbx/NativeRNMBXCameraModuleSpec.java +41 -0
- package/ios/RNMBX/RNMBXCamera.swift +49 -54
- package/ios/RNMBX/RNMBXCameraModule.h +18 -0
- package/ios/RNMBX/RNMBXCameraModule.mm +67 -0
- package/lib/commonjs/components/Camera.js +14 -15
- package/lib/commonjs/components/Camera.js.map +1 -1
- package/lib/commonjs/components/Viewport.js +2 -43
- package/lib/commonjs/components/Viewport.js.map +1 -1
- package/lib/commonjs/specs/NativeRNMBXCameraModule.js +10 -0
- package/lib/commonjs/specs/NativeRNMBXCameraModule.js.map +1 -0
- package/lib/commonjs/utils/NativeCommands.js +50 -0
- package/lib/commonjs/utils/NativeCommands.js.map +1 -0
- package/lib/module/components/Camera.js +15 -16
- package/lib/module/components/Camera.js.map +1 -1
- package/lib/module/components/Viewport.js +1 -42
- package/lib/module/components/Viewport.js.map +1 -1
- package/lib/module/specs/NativeRNMBXCameraModule.js +6 -0
- package/lib/module/specs/NativeRNMBXCameraModule.js.map +1 -0
- package/lib/module/utils/NativeCommands.js +43 -0
- package/lib/module/utils/NativeCommands.js.map +1 -0
- package/lib/typescript/src/components/Camera.d.ts.map +1 -1
- package/lib/typescript/src/components/Viewport.d.ts +0 -3
- package/lib/typescript/src/components/Viewport.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeRNMBXCameraModule.d.ts +27 -0
- package/lib/typescript/src/specs/NativeRNMBXCameraModule.d.ts.map +1 -0
- package/lib/typescript/src/utils/NativeCommands.d.ts +25 -0
- package/lib/typescript/src/utils/NativeCommands.d.ts.map +1 -0
- package/package.json +1 -1
- package/setup-jest.js +4 -0
- package/src/components/Camera.tsx +22 -10
- package/src/components/Viewport.tsx +2 -94
- package/src/specs/NativeRNMBXCameraModule.ts +36 -0
- package/src/utils/NativeCommands.ts +89 -0
|
@@ -13,6 +13,7 @@ import com.rnmapbox.rnmbx.components.annotation.RNMBXMarkerViewManager
|
|
|
13
13
|
import com.rnmapbox.rnmbx.components.annotation.RNMBXPointAnnotationManager
|
|
14
14
|
import com.rnmapbox.rnmbx.components.annotation.RNMBXPointAnnotationModule
|
|
15
15
|
import com.rnmapbox.rnmbx.components.camera.RNMBXCameraManager
|
|
16
|
+
import com.rnmapbox.rnmbx.components.camera.RNMBXCameraModule
|
|
16
17
|
import com.rnmapbox.rnmbx.components.camera.RNMBXViewport
|
|
17
18
|
import com.rnmapbox.rnmbx.components.camera.RNMBXViewportManager
|
|
18
19
|
import com.rnmapbox.rnmbx.components.camera.RNMBXViewportModule
|
|
@@ -96,6 +97,7 @@ class RNMBXPackage : TurboReactPackage() {
|
|
|
96
97
|
RNMBXSnapshotModule.REACT_CLASS -> return RNMBXSnapshotModule(reactApplicationContext)
|
|
97
98
|
RNMBXLogging.REACT_CLASS -> return RNMBXLogging(reactApplicationContext)
|
|
98
99
|
NativeMapViewModule.NAME -> return NativeMapViewModule(reactApplicationContext, getViewTagResolver(reactApplicationContext, s))
|
|
100
|
+
RNMBXCameraModule.NAME -> return RNMBXCameraModule(reactApplicationContext, getViewTagResolver(reactApplicationContext, s))
|
|
99
101
|
RNMBXViewportModule.NAME -> return RNMBXViewportModule(reactApplicationContext, getViewTagResolver(reactApplicationContext, s))
|
|
100
102
|
RNMBXShapeSourceModule.NAME -> return RNMBXShapeSourceModule(reactApplicationContext, getViewTagResolver(reactApplicationContext, s))
|
|
101
103
|
RNMBXImageModule.NAME -> return RNMBXImageModule(reactApplicationContext, getViewTagResolver(reactApplicationContext, s))
|
|
@@ -114,8 +116,8 @@ class RNMBXPackage : TurboReactPackage() {
|
|
|
114
116
|
val managers: MutableList<ViewManager<*, *>> = ArrayList()
|
|
115
117
|
|
|
116
118
|
// components
|
|
117
|
-
managers.add(RNMBXCameraManager(reactApplicationContext))
|
|
118
|
-
managers.add(RNMBXViewportManager(reactApplicationContext))
|
|
119
|
+
managers.add(RNMBXCameraManager(reactApplicationContext, getViewTagResolver(reactApplicationContext, "RNMBXCameraManager")))
|
|
120
|
+
managers.add(RNMBXViewportManager(reactApplicationContext, getViewTagResolver(reactApplicationContext, "RNMBXViewportManager")))
|
|
119
121
|
managers.add(RNMBXMapViewManager(reactApplicationContext, getViewTagResolver(reactApplicationContext, "RNMBXMapViewManager")))
|
|
120
122
|
managers.add(RNMBXStyleImportManager(reactApplicationContext))
|
|
121
123
|
managers.add(RNMBXModelsManager(reactApplicationContext))
|
|
@@ -245,6 +247,15 @@ class RNMBXPackage : TurboReactPackage() {
|
|
|
245
247
|
false, // isCxxModule
|
|
246
248
|
isTurboModule // isTurboModule
|
|
247
249
|
)
|
|
250
|
+
moduleInfos[RNMBXCameraModule.NAME] = ReactModuleInfo(
|
|
251
|
+
RNMBXCameraModule.NAME,
|
|
252
|
+
RNMBXCameraModule.NAME,
|
|
253
|
+
false, // canOverrideExistingModule
|
|
254
|
+
false, // needsEagerInit
|
|
255
|
+
false, // hasConstants
|
|
256
|
+
false, // isCxxModule
|
|
257
|
+
isTurboModule // isTurboModule
|
|
258
|
+
)
|
|
248
259
|
moduleInfos[RNMBXShapeSourceModule.NAME] = ReactModuleInfo(
|
|
249
260
|
RNMBXShapeSourceModule.NAME,
|
|
250
261
|
RNMBXShapeSourceModule.NAME,
|
|
@@ -29,6 +29,45 @@ class RNMBXPointAnnotationCoordinator(val mapView: MapView) {
|
|
|
29
29
|
onAnnotationClick(pointAnnotation)
|
|
30
30
|
false
|
|
31
31
|
})
|
|
32
|
+
manager.addDragListener(object : OnPointAnnotationDragListener {
|
|
33
|
+
override fun onAnnotationDragStarted(_annotation: Annotation<*>) {
|
|
34
|
+
annotationDragged = true;
|
|
35
|
+
var reactAnnotation: RNMBXPointAnnotation? = null
|
|
36
|
+
for (key in annotations.keys) {
|
|
37
|
+
val annotation = annotations[key]
|
|
38
|
+
val curMarkerID = annotation?.mapboxID
|
|
39
|
+
if (_annotation.id == curMarkerID) {
|
|
40
|
+
reactAnnotation = annotation
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
reactAnnotation?.let { it.onDragStart() }
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
override fun onAnnotationDrag(_annotation: Annotation<*>) {
|
|
47
|
+
var reactAnnotation: RNMBXPointAnnotation? = null
|
|
48
|
+
for (key in annotations.keys) {
|
|
49
|
+
val annotation = annotations[key]
|
|
50
|
+
val curMarkerID = annotation?.mapboxID
|
|
51
|
+
if (_annotation.id == curMarkerID) {
|
|
52
|
+
reactAnnotation = annotation
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
reactAnnotation?.let { it.onDrag() }
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
override fun onAnnotationDragFinished(_annotation: Annotation<*>) {
|
|
59
|
+
annotationDragged = false;
|
|
60
|
+
var reactAnnotation: RNMBXPointAnnotation? = null
|
|
61
|
+
for (key in annotations.keys) {
|
|
62
|
+
val annotation = annotations[key]
|
|
63
|
+
val curMarkerID = annotation?.mapboxID
|
|
64
|
+
if (_annotation.id == curMarkerID) {
|
|
65
|
+
reactAnnotation = annotation
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
reactAnnotation?.let { it.onDragEnd() }
|
|
69
|
+
}
|
|
70
|
+
})
|
|
32
71
|
}
|
|
33
72
|
|
|
34
73
|
fun getAndClearAnnotationClicked(): Boolean {
|
|
@@ -70,46 +109,6 @@ class RNMBXPointAnnotationCoordinator(val mapView: MapView) {
|
|
|
70
109
|
newSelected = null
|
|
71
110
|
}
|
|
72
111
|
|
|
73
|
-
manager.addDragListener(object : OnPointAnnotationDragListener {
|
|
74
|
-
override fun onAnnotationDragStarted(_annotation: Annotation<*>) {
|
|
75
|
-
annotationDragged = true;
|
|
76
|
-
var reactAnnotation: RNMBXPointAnnotation? = null
|
|
77
|
-
for (key in annotations.keys) {
|
|
78
|
-
val annotation = annotations[key]
|
|
79
|
-
val curMarkerID = annotation?.mapboxID
|
|
80
|
-
if (_annotation.id == curMarkerID) {
|
|
81
|
-
reactAnnotation = annotation
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
reactAnnotation?.let { it.onDragStart() }
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
override fun onAnnotationDrag(_annotation: Annotation<*>) {
|
|
88
|
-
var reactAnnotation: RNMBXPointAnnotation? = null
|
|
89
|
-
for (key in annotations.keys) {
|
|
90
|
-
val annotation = annotations[key]
|
|
91
|
-
val curMarkerID = annotation?.mapboxID
|
|
92
|
-
if (_annotation.id == curMarkerID) {
|
|
93
|
-
reactAnnotation = annotation
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
reactAnnotation?.let { it.onDrag() }
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
override fun onAnnotationDragFinished(_annotation: Annotation<*>) {
|
|
100
|
-
annotationDragged = false;
|
|
101
|
-
var reactAnnotation: RNMBXPointAnnotation? = null
|
|
102
|
-
for (key in annotations.keys) {
|
|
103
|
-
val annotation = annotations[key]
|
|
104
|
-
val curMarkerID = annotation?.mapboxID
|
|
105
|
-
if (_annotation.id == curMarkerID) {
|
|
106
|
-
reactAnnotation = annotation
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
reactAnnotation?.let { it.onDragEnd() }
|
|
110
|
-
}
|
|
111
|
-
})
|
|
112
|
-
|
|
113
112
|
oldSelected?.let { deselectAnnotation(it) }
|
|
114
113
|
newSelected?.let { selectAnnotation(it) }
|
|
115
114
|
|
|
@@ -31,8 +31,6 @@ class CameraStop {
|
|
|
31
31
|
private var mDuration = 2000
|
|
32
32
|
private var mCallback: Animator.AnimatorListener? = null
|
|
33
33
|
|
|
34
|
-
var ts: Int? = null
|
|
35
|
-
|
|
36
34
|
fun setBearing(bearing: Double) {
|
|
37
35
|
mBearing = bearing
|
|
38
36
|
}
|
|
@@ -97,12 +95,10 @@ class CameraStop {
|
|
|
97
95
|
fun toCameraUpdate(mapView: RNMBXMapView): CameraUpdateItem {
|
|
98
96
|
val map = mapView.getMapboxMap()
|
|
99
97
|
val currentCamera = map.cameraState
|
|
98
|
+
|
|
100
99
|
val builder = CameraOptions.Builder()
|
|
101
100
|
builder.center(currentCamera.center)
|
|
102
101
|
builder.bearing(currentCamera.bearing)
|
|
103
|
-
|
|
104
|
-
val currentPadding = currentCamera.padding
|
|
105
|
-
|
|
106
102
|
builder.padding(currentCamera.padding)
|
|
107
103
|
builder.zoom(currentCamera.zoom)
|
|
108
104
|
if (mBearing != null) {
|
|
@@ -111,7 +107,11 @@ class CameraStop {
|
|
|
111
107
|
if (mTilt != null) {
|
|
112
108
|
builder.pitch(mTilt)
|
|
113
109
|
}
|
|
110
|
+
if (mZoom != null) {
|
|
111
|
+
builder.zoom(mZoom)
|
|
112
|
+
}
|
|
114
113
|
|
|
114
|
+
val currentPadding = currentCamera.padding
|
|
115
115
|
val paddingLeft: Int = mPaddingLeft ?: currentPadding.left.toInt()
|
|
116
116
|
val paddingTop: Int = mPaddingTop ?: currentPadding.top.toInt()
|
|
117
117
|
val paddingRight: Int = mPaddingRight ?: currentPadding.right.toInt()
|
|
@@ -119,10 +119,10 @@ class CameraStop {
|
|
|
119
119
|
val cameraPadding = intArrayOf(paddingLeft, paddingTop, paddingRight, paddingBottom)
|
|
120
120
|
val cameraPaddingClipped = clippedPadding(cameraPadding, mapView)
|
|
121
121
|
val cameraPaddingEdgeInsets = convert(cameraPaddingClipped)
|
|
122
|
+
builder.padding(cameraPaddingEdgeInsets)
|
|
122
123
|
|
|
123
124
|
if (mLatLng != null) {
|
|
124
125
|
builder.center(mLatLng!!.point)
|
|
125
|
-
builder.padding(cameraPaddingEdgeInsets)
|
|
126
126
|
} else if (mBounds != null) {
|
|
127
127
|
val tilt = if (mTilt != null) mTilt!! else currentCamera.pitch
|
|
128
128
|
val bearing = if (mBearing != null) mBearing!! else currentCamera.bearing
|
|
@@ -133,17 +133,14 @@ class CameraStop {
|
|
|
133
133
|
bearing,
|
|
134
134
|
tilt
|
|
135
135
|
)
|
|
136
|
-
|
|
137
136
|
builder.center(boundsCamera.center)
|
|
138
137
|
builder.anchor(boundsCamera.anchor)
|
|
139
138
|
builder.zoom(boundsCamera.zoom)
|
|
139
|
+
builder.bearing(boundsCamera.bearing)
|
|
140
|
+
builder.pitch(boundsCamera.pitch)
|
|
140
141
|
builder.padding(boundsCamera.padding)
|
|
141
142
|
}
|
|
142
143
|
|
|
143
|
-
if (mZoom != null) {
|
|
144
|
-
builder.zoom(mZoom)
|
|
145
|
-
}
|
|
146
|
-
|
|
147
144
|
return CameraUpdateItem(map, builder.build(), mDuration, mCallback, mMode)
|
|
148
145
|
}
|
|
149
146
|
|
|
@@ -156,10 +153,6 @@ class CameraStop {
|
|
|
156
153
|
): CameraStop {
|
|
157
154
|
val stop = CameraStop()
|
|
158
155
|
|
|
159
|
-
if (readableMap.hasKey("__updateTS")) {
|
|
160
|
-
stop.ts = readableMap.getInt("__updateTS")
|
|
161
|
-
}
|
|
162
|
-
|
|
163
156
|
if (readableMap.hasKey("pitch")) {
|
|
164
157
|
stop.setTilt(readableMap.getDouble("pitch"))
|
|
165
158
|
}
|
|
@@ -201,6 +194,7 @@ class CameraStop {
|
|
|
201
194
|
when (readableMap.getInt("mode")) {
|
|
202
195
|
CameraMode.FLIGHT -> stop.setMode(CameraMode.FLIGHT)
|
|
203
196
|
CameraMode.LINEAR -> stop.setMode(CameraMode.LINEAR)
|
|
197
|
+
CameraMode.MOVE -> stop.setMode(CameraMode.MOVE)
|
|
204
198
|
CameraMode.NONE -> stop.setMode(CameraMode.NONE)
|
|
205
199
|
else -> stop.setMode(CameraMode.EASE)
|
|
206
200
|
}
|
|
@@ -83,7 +83,7 @@ class CameraUpdateItem(
|
|
|
83
83
|
val animationOptions = MapAnimationOptions.Builder();
|
|
84
84
|
|
|
85
85
|
// animateCamera / easeCamera only allows positive duration
|
|
86
|
-
if (duration == 0 || mCameraMode == CameraMode.NONE) {
|
|
86
|
+
if (duration == 0 || mCameraMode == CameraMode.MOVE || mCameraMode == CameraMode.NONE) {
|
|
87
87
|
map.flyToV11(mCameraUpdate, animationOptions.apply {
|
|
88
88
|
duration(0)
|
|
89
89
|
},
|
|
@@ -109,7 +109,6 @@ class CameraUpdateItem(
|
|
|
109
109
|
callback
|
|
110
110
|
)
|
|
111
111
|
}
|
|
112
|
-
null
|
|
113
112
|
}
|
|
114
113
|
|
|
115
114
|
override fun cancel(mayInterruptIfRunning: Boolean): Boolean {
|
|
@@ -3,6 +3,7 @@ package com.rnmapbox.rnmbx.components.camera
|
|
|
3
3
|
import android.animation.Animator
|
|
4
4
|
import android.content.Context
|
|
5
5
|
import android.location.Location
|
|
6
|
+
import com.facebook.react.bridge.Dynamic
|
|
6
7
|
import com.facebook.react.bridge.ReadableMap
|
|
7
8
|
import com.mapbox.maps.plugin.gestures.gestures
|
|
8
9
|
import com.rnmapbox.rnmbx.location.LocationManager.Companion.getInstance
|
|
@@ -15,6 +16,7 @@ import com.mapbox.maps.plugin.locationcomponent.OnIndicatorBearingChangedListene
|
|
|
15
16
|
import com.mapbox.maps.plugin.locationcomponent.OnIndicatorPositionChangedListener
|
|
16
17
|
import com.facebook.react.bridge.WritableMap
|
|
17
18
|
import com.facebook.react.bridge.WritableNativeMap
|
|
19
|
+
import com.facebook.react.uimanager.annotations.ReactProp
|
|
18
20
|
import com.mapbox.maps.*
|
|
19
21
|
import com.mapbox.maps.plugin.locationcomponent.location
|
|
20
22
|
import com.mapbox.maps.plugin.viewport.ViewportStatus
|
|
@@ -113,15 +115,18 @@ class RNMBXCamera(private val mContext: Context, private val mManager: RNMBXCame
|
|
|
113
115
|
}
|
|
114
116
|
}
|
|
115
117
|
fun setStop(stop: CameraStop) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
stop.let { updateCamera(it) }
|
|
121
|
-
}
|
|
118
|
+
mCameraStop = stop
|
|
119
|
+
stop.setCallback(mCameraCallback)
|
|
120
|
+
if (mMapView != null) {
|
|
121
|
+
stop.let { updateCamera(it) }
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
+
fun updateCameraStop(map: ReadableMap) {
|
|
126
|
+
val stop = CameraStop.fromReadableMap(mContext, map, null)
|
|
127
|
+
setStop(stop)
|
|
128
|
+
}
|
|
129
|
+
|
|
125
130
|
fun setDefaultStop(stop: CameraStop?) {
|
|
126
131
|
mDefaultStop = stop
|
|
127
132
|
}
|
|
@@ -174,15 +179,12 @@ class RNMBXCamera(private val mContext: Context, private val mManager: RNMBXCame
|
|
|
174
179
|
private fun updateMaxBounds() {
|
|
175
180
|
withMapView { mapView ->
|
|
176
181
|
val map = mapView.getMapboxMap()
|
|
177
|
-
val maxBounds = mMaxBounds
|
|
178
182
|
val builder = CameraBoundsOptions.Builder()
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
}
|
|
183
|
-
mMinZoomLevel?.let { builder.minZoom(it) }
|
|
184
|
-
mMaxZoomLevel?.let { builder.maxZoom(it) }
|
|
183
|
+
builder.bounds(mMaxBounds?.toBounds())
|
|
184
|
+
builder.minZoom(mMinZoomLevel ?: 0.0) // Passing null does not reset this value.
|
|
185
|
+
builder.maxZoom(mMaxZoomLevel ?: 25.0) // Passing null does not reset this value.
|
|
185
186
|
map.setBounds(builder.build())
|
|
187
|
+
mCameraStop?.let { updateCamera(it) }
|
|
186
188
|
}
|
|
187
189
|
}
|
|
188
190
|
|
|
@@ -9,11 +9,12 @@ import com.mapbox.geojson.FeatureCollection
|
|
|
9
9
|
import com.rnmapbox.rnmbx.components.AbstractEventEmitter
|
|
10
10
|
import com.rnmapbox.rnmbx.components.camera.CameraStop.Companion.fromReadableMap
|
|
11
11
|
import com.rnmapbox.rnmbx.utils.GeoJSONUtils.toLatLngBounds
|
|
12
|
+
import com.rnmapbox.rnmbx.utils.ViewTagResolver
|
|
12
13
|
import com.rnmapbox.rnmbx.utils.extensions.asBooleanOrNull
|
|
13
14
|
import com.rnmapbox.rnmbx.utils.extensions.asDoubleOrNull
|
|
14
15
|
import com.rnmapbox.rnmbx.utils.extensions.asStringOrNull
|
|
15
16
|
|
|
16
|
-
class RNMBXCameraManager(private val mContext: ReactApplicationContext) :
|
|
17
|
+
class RNMBXCameraManager(private val mContext: ReactApplicationContext, val viewTagResolver: ViewTagResolver) :
|
|
17
18
|
AbstractEventEmitter<RNMBXCamera?>(
|
|
18
19
|
mContext
|
|
19
20
|
), RNMBXCameraManagerInterface<RNMBXCamera> {
|
|
@@ -58,12 +59,12 @@ class RNMBXCameraManager(private val mContext: ReactApplicationContext) :
|
|
|
58
59
|
|
|
59
60
|
@ReactProp(name = "minZoomLevel")
|
|
60
61
|
override fun setMinZoomLevel(camera: RNMBXCamera, value: Dynamic) {
|
|
61
|
-
camera.setMinZoomLevel(value.
|
|
62
|
+
camera.setMinZoomLevel(value.asDoubleOrNull())
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
@ReactProp(name = "maxZoomLevel")
|
|
65
66
|
override fun setMaxZoomLevel(camera: RNMBXCamera, value: Dynamic) {
|
|
66
|
-
camera.setMaxZoomLevel(value.
|
|
67
|
+
camera.setMaxZoomLevel(value.asDoubleOrNull())
|
|
67
68
|
}
|
|
68
69
|
|
|
69
70
|
@ReactProp(name = "followUserLocation")
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
package com.rnmapbox.rnmbx.components.camera
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Callback
|
|
4
|
+
import com.facebook.react.bridge.Promise
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.bridge.ReadableArray
|
|
7
|
+
import com.facebook.react.bridge.ReadableMap
|
|
8
|
+
import com.facebook.react.bridge.WritableMap
|
|
9
|
+
import com.facebook.react.bridge.WritableNativeMap
|
|
10
|
+
import com.rnmapbox.rnmbx.NativeRNMBXCameraModuleSpec
|
|
11
|
+
import com.rnmapbox.rnmbx.components.mapview.CommandResponse
|
|
12
|
+
import com.rnmapbox.rnmbx.utils.ViewTagResolver
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class RNMBXCameraModule(context: ReactApplicationContext, val viewTagResolver: ViewTagResolver) : NativeRNMBXCameraModuleSpec(context) {
|
|
16
|
+
private fun withViewportOnUIThread(
|
|
17
|
+
viewRef: Double?,
|
|
18
|
+
reject: Promise,
|
|
19
|
+
fn: (RNMBXCamera) -> Unit
|
|
20
|
+
) {
|
|
21
|
+
if (viewRef == null) {
|
|
22
|
+
reject.reject(Exception("viewRef is null"))
|
|
23
|
+
} else {
|
|
24
|
+
viewTagResolver.withViewResolved(viewRef.toInt(), reject, fn)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
private fun createCommandResponse(promise: Promise): CommandResponse = object : CommandResponse {
|
|
29
|
+
override fun success(builder: (WritableMap) -> Unit) {
|
|
30
|
+
val payload: WritableMap = WritableNativeMap()
|
|
31
|
+
builder(payload)
|
|
32
|
+
|
|
33
|
+
promise.resolve(payload)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
override fun error(message: String) {
|
|
37
|
+
promise.reject(Exception(message))
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
companion object {
|
|
42
|
+
const val NAME = "RNMBXCameraModule"
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
override fun updateCameraStop(viewRef: Double?, stop: ReadableMap, promise: Promise) {
|
|
46
|
+
withViewportOnUIThread(viewRef, promise) {
|
|
47
|
+
it.updateCameraStop(stop)
|
|
48
|
+
promise.resolve(null)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -12,8 +12,9 @@ import com.facebook.react.viewmanagers.RNMBXViewportManagerInterface
|
|
|
12
12
|
import com.rnmapbox.rnmbx.components.AbstractEventEmitter
|
|
13
13
|
import com.rnmapbox.rnmbx.events.constants.EventKeys
|
|
14
14
|
import com.rnmapbox.rnmbx.events.constants.eventMapOf
|
|
15
|
+
import com.rnmapbox.rnmbx.utils.ViewTagResolver
|
|
15
16
|
|
|
16
|
-
class RNMBXViewportManager(private val mContext: ReactApplicationContext) : AbstractEventEmitter<RNMBXViewport?>(
|
|
17
|
+
class RNMBXViewportManager(private val mContext: ReactApplicationContext, val viewTagResolver: ViewTagResolver) : AbstractEventEmitter<RNMBXViewport?>(
|
|
17
18
|
mContext
|
|
18
19
|
), RNMBXViewportManagerInterface<RNMBXViewport> {
|
|
19
20
|
|
package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/constants/CameraMode.java
CHANGED
|
@@ -7,12 +7,13 @@ import java.lang.annotation.RetentionPolicy;
|
|
|
7
7
|
|
|
8
8
|
public class CameraMode {
|
|
9
9
|
|
|
10
|
-
@IntDef({ FLIGHT, EASE, LINEAR, NONE })
|
|
10
|
+
@IntDef({ FLIGHT, EASE, LINEAR, MOVE, NONE })
|
|
11
11
|
@Retention(RetentionPolicy.SOURCE)
|
|
12
12
|
public @interface Mode {}
|
|
13
13
|
|
|
14
14
|
public static final int FLIGHT = 1;
|
|
15
15
|
public static final int EASE = 2;
|
|
16
16
|
public static final int LINEAR = 3;
|
|
17
|
-
public static final int
|
|
17
|
+
public static final int MOVE = 4;
|
|
18
|
+
public static final int NONE = 5;
|
|
18
19
|
}
|