@lugg/maps 0.2.0-alpha.9 → 1.0.0-beta.1
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/README.md +21 -20
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/luggmaps/LuggCalloutView.kt +74 -0
- package/android/src/main/java/com/luggmaps/LuggCalloutViewManager.kt +38 -0
- package/android/src/main/java/com/luggmaps/LuggMapView.kt +290 -0
- package/android/src/main/java/com/luggmaps/{LuggGoogleMapViewManager.kt → LuggMapViewManager.kt} +99 -36
- package/android/src/main/java/com/luggmaps/LuggMapWrapperView.kt +11 -14
- package/android/src/main/java/com/luggmaps/LuggMarkerView.kt +187 -21
- package/android/src/main/java/com/luggmaps/LuggMarkerViewManager.kt +28 -0
- package/android/src/main/java/com/luggmaps/LuggPackage.kt +8 -4
- package/android/src/main/java/com/luggmaps/LuggPolygonView.kt +85 -0
- package/android/src/main/java/com/luggmaps/LuggPolygonViewManager.kt +100 -0
- package/android/src/main/java/com/luggmaps/LuggPolylineView.kt +16 -0
- package/android/src/main/java/com/luggmaps/LuggPolylineViewManager.kt +22 -0
- package/android/src/main/java/com/luggmaps/core/GoogleMapProvider.kt +874 -0
- package/android/src/main/java/com/luggmaps/core/MapProviderDelegate.kt +60 -0
- package/android/src/main/java/com/luggmaps/core/PolylineAnimator.kt +89 -24
- package/android/src/main/java/com/luggmaps/events/LongPressEvent.kt +29 -0
- package/android/src/main/java/com/luggmaps/events/MarkerDragEvent.kt +41 -0
- package/android/src/main/java/com/luggmaps/events/MarkerPressEvent.kt +34 -0
- package/android/src/main/java/com/luggmaps/events/PolygonPressEvent.kt +12 -0
- package/android/src/main/java/com/luggmaps/events/PressEvent.kt +29 -0
- package/ios/LuggCalloutView.h +23 -0
- package/ios/LuggCalloutView.mm +145 -0
- package/ios/LuggMapView.h +9 -0
- package/ios/LuggMapView.mm +343 -0
- package/ios/LuggMarkerView.h +15 -0
- package/ios/LuggMarkerView.mm +136 -2
- package/ios/LuggPolygonView.h +31 -0
- package/ios/LuggPolygonView.mm +151 -0
- package/ios/LuggPolylineView.h +4 -0
- package/ios/LuggPolylineView.mm +23 -0
- package/ios/core/AppleMapProvider.h +15 -0
- package/ios/core/AppleMapProvider.mm +1173 -0
- package/ios/core/GMSPolylineAnimator.h +3 -0
- package/ios/core/GMSPolylineAnimator.m +101 -15
- package/ios/core/GoogleMapProvider.h +13 -0
- package/ios/core/GoogleMapProvider.mm +798 -0
- package/ios/core/LuggAnnotationView.h +12 -0
- package/ios/core/LuggAnnotationView.mm +55 -0
- package/ios/core/MKPolylineAnimator.h +4 -0
- package/ios/core/MKPolylineAnimator.m +167 -42
- package/ios/core/MapProviderDelegate.h +84 -0
- package/ios/core/PolylineAnimatorBase.h +24 -1
- package/ios/core/PolylineAnimatorBase.m +82 -19
- package/ios/events/LongPressEvent.h +29 -0
- package/ios/events/MarkerDragEvent.h +69 -0
- package/ios/events/MarkerPressEvent.h +29 -0
- package/ios/events/PolygonPressEvent.h +20 -0
- package/ios/events/PressEvent.h +29 -0
- package/ios/extensions/MKMapView+Zoom.h +2 -0
- package/ios/extensions/MKMapView+Zoom.m +14 -4
- package/lib/module/MapProvider.js +2 -4
- package/lib/module/MapProvider.js.map +1 -1
- package/lib/module/MapProvider.web.js +14 -7
- package/lib/module/MapProvider.web.js.map +1 -1
- package/lib/module/MapView.js +33 -16
- package/lib/module/MapView.js.map +1 -1
- package/lib/module/MapView.web.js +296 -181
- package/lib/module/MapView.web.js.map +1 -1
- package/lib/module/components/GeoJson.js +159 -0
- package/lib/module/components/GeoJson.js.map +1 -0
- package/lib/module/components/GeoJson.types.js +4 -0
- package/lib/module/components/GeoJson.types.js.map +1 -0
- package/lib/module/components/Marker.js +49 -8
- package/lib/module/components/Marker.js.map +1 -1
- package/lib/module/components/Marker.types.js +4 -0
- package/lib/module/components/Marker.types.js.map +1 -0
- package/lib/module/components/Marker.web.js +159 -24
- package/lib/module/components/Marker.web.js.map +1 -1
- package/lib/module/components/Polygon.js +46 -0
- package/lib/module/components/Polygon.js.map +1 -0
- package/lib/module/components/Polygon.types.js +4 -0
- package/lib/module/components/Polygon.types.js.map +1 -0
- package/lib/module/components/Polygon.web.js +87 -0
- package/lib/module/components/Polygon.web.js.map +1 -0
- package/lib/module/components/Polyline.js +17 -4
- package/lib/module/components/Polyline.js.map +1 -1
- package/lib/module/components/Polyline.types.js +4 -0
- package/lib/module/components/Polyline.types.js.map +1 -0
- package/lib/module/components/Polyline.web.js +108 -31
- package/lib/module/components/Polyline.web.js.map +1 -1
- package/lib/module/components/index.js +4 -2
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/components/index.web.js +2 -0
- package/lib/module/components/index.web.js.map +1 -1
- package/lib/module/fabric/LuggCalloutViewNativeComponent.ts +20 -0
- package/lib/module/fabric/{LuggGoogleMapViewNativeComponent.ts → LuggMapViewNativeComponent.ts} +43 -7
- package/lib/module/fabric/LuggMarkerViewNativeComponent.ts +49 -1
- package/lib/module/fabric/LuggPolygonViewNativeComponent.ts +25 -0
- package/lib/module/fabric/LuggPolylineViewNativeComponent.ts +8 -0
- package/lib/module/index.js +4 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +4 -1
- package/lib/module/index.web.js.map +1 -1
- package/lib/typescript/src/MapProvider.d.ts +1 -1
- package/lib/typescript/src/MapProvider.d.ts.map +1 -1
- package/lib/typescript/src/MapProvider.web.d.ts +23 -1
- package/lib/typescript/src/MapProvider.web.d.ts.map +1 -1
- package/lib/typescript/src/MapView.d.ts +4 -4
- package/lib/typescript/src/MapView.d.ts.map +1 -1
- package/lib/typescript/src/MapView.types.d.ts +35 -9
- package/lib/typescript/src/MapView.types.d.ts.map +1 -1
- package/lib/typescript/src/MapView.web.d.ts +2 -11
- package/lib/typescript/src/MapView.web.d.ts.map +1 -1
- package/lib/typescript/src/components/GeoJson.d.ts +4 -0
- package/lib/typescript/src/components/GeoJson.d.ts.map +1 -0
- package/lib/typescript/src/components/GeoJson.types.d.ts +89 -0
- package/lib/typescript/src/components/GeoJson.types.d.ts.map +1 -0
- package/lib/typescript/src/components/Marker.d.ts +6 -33
- package/lib/typescript/src/components/Marker.d.ts.map +1 -1
- package/lib/typescript/src/components/Marker.types.d.ts +100 -0
- package/lib/typescript/src/components/Marker.types.d.ts.map +1 -0
- package/lib/typescript/src/components/Marker.web.d.ts +2 -5
- package/lib/typescript/src/components/Marker.web.d.ts.map +1 -1
- package/lib/typescript/src/components/Polygon.d.ts +10 -0
- package/lib/typescript/src/components/Polygon.d.ts.map +1 -0
- package/lib/typescript/src/components/Polygon.types.d.ts +33 -0
- package/lib/typescript/src/components/Polygon.types.d.ts.map +1 -0
- package/lib/typescript/src/components/Polygon.web.d.ts +3 -0
- package/lib/typescript/src/components/Polygon.web.d.ts.map +1 -0
- package/lib/typescript/src/components/Polyline.d.ts +6 -21
- package/lib/typescript/src/components/Polyline.d.ts.map +1 -1
- package/lib/typescript/src/components/Polyline.types.d.ts +53 -0
- package/lib/typescript/src/components/Polyline.types.d.ts.map +1 -0
- package/lib/typescript/src/components/Polyline.web.d.ts +2 -5
- package/lib/typescript/src/components/Polyline.web.d.ts.map +1 -1
- package/lib/typescript/src/components/index.d.ts +8 -2
- package/lib/typescript/src/components/index.d.ts.map +1 -1
- package/lib/typescript/src/components/index.web.d.ts +6 -2
- package/lib/typescript/src/components/index.web.d.ts.map +1 -1
- package/lib/typescript/src/fabric/LuggCalloutViewNativeComponent.d.ts +13 -0
- package/lib/typescript/src/fabric/LuggCalloutViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/fabric/{LuggGoogleMapViewNativeComponent.d.ts → LuggMapViewNativeComponent.d.ts} +30 -4
- package/lib/typescript/src/fabric/LuggMapViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/fabric/LuggMarkerViewNativeComponent.d.ts +45 -1
- package/lib/typescript/src/fabric/LuggMarkerViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/fabric/LuggPolygonViewNativeComponent.d.ts +18 -0
- package/lib/typescript/src/fabric/LuggPolygonViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/fabric/LuggPolylineViewNativeComponent.d.ts +7 -0
- package/lib/typescript/src/fabric/LuggPolylineViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +11 -3
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/index.web.d.ts +9 -1
- package/lib/typescript/src/index.web.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +11 -0
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/package.json +11 -9
- package/src/MapProvider.tsx +1 -3
- package/src/MapProvider.web.tsx +22 -3
- package/src/MapView.tsx +32 -26
- package/src/MapView.types.ts +43 -9
- package/src/MapView.web.tsx +368 -210
- package/src/components/GeoJson.tsx +221 -0
- package/src/components/GeoJson.types.ts +118 -0
- package/src/components/Marker.tsx +75 -38
- package/src/components/Marker.types.ts +102 -0
- package/src/components/Marker.web.tsx +197 -19
- package/src/components/Polygon.tsx +52 -0
- package/src/components/Polygon.types.ts +33 -0
- package/src/components/Polygon.web.tsx +104 -0
- package/src/components/Polyline.tsx +23 -22
- package/src/components/Polyline.types.ts +55 -0
- package/src/components/Polyline.web.tsx +151 -37
- package/src/components/index.ts +17 -2
- package/src/components/index.web.ts +6 -2
- package/src/fabric/LuggCalloutViewNativeComponent.ts +20 -0
- package/src/fabric/{LuggGoogleMapViewNativeComponent.ts → LuggMapViewNativeComponent.ts} +43 -7
- package/src/fabric/LuggMarkerViewNativeComponent.ts +49 -1
- package/src/fabric/LuggPolygonViewNativeComponent.ts +25 -0
- package/src/fabric/LuggPolylineViewNativeComponent.ts +8 -0
- package/src/index.ts +30 -1
- package/src/index.web.ts +16 -1
- package/src/types.ts +13 -0
- package/android/src/main/java/com/luggmaps/LuggGoogleMapView.kt +0 -511
- package/ios/LuggAppleMapView.h +0 -16
- package/ios/LuggAppleMapView.mm +0 -592
- package/ios/LuggGoogleMapView.h +0 -13
- package/ios/LuggGoogleMapView.mm +0 -455
- package/lib/module/fabric/LuggAppleMapViewNativeComponent.ts +0 -83
- package/lib/typescript/src/fabric/LuggAppleMapViewNativeComponent.d.ts +0 -54
- package/lib/typescript/src/fabric/LuggAppleMapViewNativeComponent.d.ts.map +0 -1
- package/lib/typescript/src/fabric/LuggGoogleMapViewNativeComponent.d.ts.map +0 -1
- package/src/fabric/LuggAppleMapViewNativeComponent.ts +0 -83
package/android/src/main/java/com/luggmaps/{LuggGoogleMapViewManager.kt → LuggMapViewManager.kt}
RENAMED
|
@@ -8,40 +8,44 @@ import com.facebook.react.uimanager.ThemedReactContext
|
|
|
8
8
|
import com.facebook.react.uimanager.ViewGroupManager
|
|
9
9
|
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
10
10
|
import com.facebook.react.uimanager.annotations.ReactProp
|
|
11
|
-
import com.facebook.react.viewmanagers.
|
|
12
|
-
import com.facebook.react.viewmanagers.
|
|
11
|
+
import com.facebook.react.viewmanagers.LuggMapViewManagerDelegate
|
|
12
|
+
import com.facebook.react.viewmanagers.LuggMapViewManagerInterface
|
|
13
13
|
import com.google.android.gms.maps.model.LatLng
|
|
14
14
|
import com.luggmaps.events.CameraIdleEvent
|
|
15
15
|
import com.luggmaps.events.CameraMoveEvent
|
|
16
|
+
import com.luggmaps.events.LongPressEvent
|
|
17
|
+
import com.luggmaps.events.PressEvent
|
|
16
18
|
import com.luggmaps.events.ReadyEvent
|
|
17
19
|
import com.luggmaps.extensions.dispatchEvent
|
|
18
20
|
|
|
19
|
-
@ReactModule(name =
|
|
20
|
-
class
|
|
21
|
-
ViewGroupManager<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
private val delegate: ViewManagerDelegate<
|
|
21
|
+
@ReactModule(name = LuggMapViewManager.NAME)
|
|
22
|
+
class LuggMapViewManager :
|
|
23
|
+
ViewGroupManager<LuggMapView>(),
|
|
24
|
+
LuggMapViewManagerInterface<LuggMapView>,
|
|
25
|
+
LuggMapViewEventDelegate {
|
|
26
|
+
private val delegate: ViewManagerDelegate<LuggMapView> = LuggMapViewManagerDelegate(this)
|
|
25
27
|
|
|
26
|
-
override fun getDelegate(): ViewManagerDelegate<
|
|
28
|
+
override fun getDelegate(): ViewManagerDelegate<LuggMapView> = delegate
|
|
27
29
|
|
|
28
30
|
override fun getName(): String = NAME
|
|
29
31
|
|
|
30
|
-
override fun createViewInstance(context: ThemedReactContext):
|
|
31
|
-
val view =
|
|
32
|
+
override fun createViewInstance(context: ThemedReactContext): LuggMapView {
|
|
33
|
+
val view = LuggMapView(context)
|
|
32
34
|
view.eventDelegate = this
|
|
33
35
|
return view
|
|
34
36
|
}
|
|
35
37
|
|
|
36
38
|
override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any> =
|
|
37
39
|
mapOf(
|
|
40
|
+
"topMapPress" to mapOf("registrationName" to "onMapPress"),
|
|
41
|
+
"topMapLongPress" to mapOf("registrationName" to "onMapLongPress"),
|
|
38
42
|
"topCameraMove" to mapOf("registrationName" to "onCameraMove"),
|
|
39
43
|
"topCameraIdle" to mapOf("registrationName" to "onCameraIdle"),
|
|
40
44
|
"topReady" to mapOf("registrationName" to "onReady")
|
|
41
45
|
)
|
|
42
46
|
|
|
43
47
|
override fun onCameraMove(
|
|
44
|
-
view:
|
|
48
|
+
view: LuggMapView,
|
|
45
49
|
latitude: Double,
|
|
46
50
|
longitude: Double,
|
|
47
51
|
zoom: Float,
|
|
@@ -51,7 +55,7 @@ class LuggGoogleMapViewManager :
|
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
override fun onCameraIdle(
|
|
54
|
-
view:
|
|
58
|
+
view: LuggMapView,
|
|
55
59
|
latitude: Double,
|
|
56
60
|
longitude: Double,
|
|
57
61
|
zoom: Float,
|
|
@@ -60,17 +64,42 @@ class LuggGoogleMapViewManager :
|
|
|
60
64
|
view.dispatchEvent(CameraIdleEvent(view, latitude, longitude, zoom, gesture))
|
|
61
65
|
}
|
|
62
66
|
|
|
63
|
-
override fun onReady(view:
|
|
67
|
+
override fun onReady(view: LuggMapView) {
|
|
64
68
|
view.dispatchEvent(ReadyEvent(view))
|
|
65
69
|
}
|
|
66
70
|
|
|
71
|
+
override fun onPress(
|
|
72
|
+
view: LuggMapView,
|
|
73
|
+
latitude: Double,
|
|
74
|
+
longitude: Double,
|
|
75
|
+
x: Float,
|
|
76
|
+
y: Float
|
|
77
|
+
) {
|
|
78
|
+
view.dispatchEvent(PressEvent(view, latitude, longitude, x, y))
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
override fun onLongPress(
|
|
82
|
+
view: LuggMapView,
|
|
83
|
+
latitude: Double,
|
|
84
|
+
longitude: Double,
|
|
85
|
+
x: Float,
|
|
86
|
+
y: Float
|
|
87
|
+
) {
|
|
88
|
+
view.dispatchEvent(LongPressEvent(view, latitude, longitude, x, y))
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
@ReactProp(name = "provider")
|
|
92
|
+
override fun setProvider(view: LuggMapView, value: String?) {
|
|
93
|
+
view.setProvider(value)
|
|
94
|
+
}
|
|
95
|
+
|
|
67
96
|
@ReactProp(name = "mapId")
|
|
68
|
-
override fun setMapId(view:
|
|
97
|
+
override fun setMapId(view: LuggMapView, value: String?) {
|
|
69
98
|
view.setMapId(value)
|
|
70
99
|
}
|
|
71
100
|
|
|
72
101
|
@ReactProp(name = "initialCoordinate")
|
|
73
|
-
override fun setInitialCoordinate(view:
|
|
102
|
+
override fun setInitialCoordinate(view: LuggMapView, value: ReadableMap?) {
|
|
74
103
|
value?.let {
|
|
75
104
|
val latitude = if (it.hasKey("latitude")) it.getDouble("latitude") else 0.0
|
|
76
105
|
val longitude = if (it.hasKey("longitude")) it.getDouble("longitude") else 0.0
|
|
@@ -79,63 +108,73 @@ class LuggGoogleMapViewManager :
|
|
|
79
108
|
}
|
|
80
109
|
|
|
81
110
|
@ReactProp(name = "initialZoom", defaultDouble = 10.0)
|
|
82
|
-
override fun setInitialZoom(view:
|
|
111
|
+
override fun setInitialZoom(view: LuggMapView, value: Double) {
|
|
83
112
|
view.setInitialZoom(value)
|
|
84
113
|
}
|
|
85
114
|
|
|
86
115
|
@ReactProp(name = "zoomEnabled", defaultBoolean = true)
|
|
87
|
-
override fun setZoomEnabled(view:
|
|
116
|
+
override fun setZoomEnabled(view: LuggMapView, value: Boolean) {
|
|
88
117
|
view.setZoomEnabled(value)
|
|
89
118
|
}
|
|
90
119
|
|
|
91
120
|
@ReactProp(name = "scrollEnabled", defaultBoolean = true)
|
|
92
|
-
override fun setScrollEnabled(view:
|
|
121
|
+
override fun setScrollEnabled(view: LuggMapView, value: Boolean) {
|
|
93
122
|
view.setScrollEnabled(value)
|
|
94
123
|
}
|
|
95
124
|
|
|
96
125
|
@ReactProp(name = "rotateEnabled", defaultBoolean = true)
|
|
97
|
-
override fun setRotateEnabled(view:
|
|
126
|
+
override fun setRotateEnabled(view: LuggMapView, value: Boolean) {
|
|
98
127
|
view.setRotateEnabled(value)
|
|
99
128
|
}
|
|
100
129
|
|
|
101
130
|
@ReactProp(name = "pitchEnabled", defaultBoolean = true)
|
|
102
|
-
override fun setPitchEnabled(view:
|
|
131
|
+
override fun setPitchEnabled(view: LuggMapView, value: Boolean) {
|
|
103
132
|
view.setPitchEnabled(value)
|
|
104
133
|
}
|
|
105
134
|
|
|
106
135
|
@ReactProp(name = "userLocationEnabled", defaultBoolean = false)
|
|
107
|
-
override fun setUserLocationEnabled(view:
|
|
136
|
+
override fun setUserLocationEnabled(view: LuggMapView, value: Boolean) {
|
|
108
137
|
view.setUserLocationEnabled(value)
|
|
109
138
|
}
|
|
110
139
|
|
|
140
|
+
@ReactProp(name = "userLocationButtonEnabled", defaultBoolean = false)
|
|
141
|
+
override fun setUserLocationButtonEnabled(view: LuggMapView, value: Boolean) {
|
|
142
|
+
view.setUserLocationButtonEnabled(value)
|
|
143
|
+
}
|
|
144
|
+
|
|
111
145
|
@ReactProp(name = "minZoom")
|
|
112
|
-
override fun setMinZoom(view:
|
|
146
|
+
override fun setMinZoom(view: LuggMapView, value: Double) {
|
|
113
147
|
view.setMinZoom(value)
|
|
114
148
|
}
|
|
115
149
|
|
|
116
150
|
@ReactProp(name = "maxZoom")
|
|
117
|
-
override fun setMaxZoom(view:
|
|
151
|
+
override fun setMaxZoom(view: LuggMapView, value: Double) {
|
|
118
152
|
view.setMaxZoom(value)
|
|
119
153
|
}
|
|
120
154
|
|
|
121
|
-
@ReactProp(name = "
|
|
122
|
-
override fun
|
|
155
|
+
@ReactProp(name = "theme")
|
|
156
|
+
override fun setTheme(view: LuggMapView, value: String?) {
|
|
157
|
+
view.setTheme(value ?: "system")
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
@ReactProp(name = "edgeInsets")
|
|
161
|
+
override fun setEdgeInsets(view: LuggMapView, value: ReadableMap?) {
|
|
123
162
|
value?.let {
|
|
124
163
|
val top = if (it.hasKey("top")) it.getDouble("top").toFloat().dpToPx().toInt() else 0
|
|
125
164
|
val left = if (it.hasKey("left")) it.getDouble("left").toFloat().dpToPx().toInt() else 0
|
|
126
165
|
val bottom = if (it.hasKey("bottom")) it.getDouble("bottom").toFloat().dpToPx().toInt() else 0
|
|
127
166
|
val right = if (it.hasKey("right")) it.getDouble("right").toFloat().dpToPx().toInt() else 0
|
|
128
|
-
view.
|
|
167
|
+
view.setEdgeInsets(top, left, bottom, right)
|
|
129
168
|
}
|
|
130
169
|
}
|
|
131
170
|
|
|
132
|
-
override fun onDropViewInstance(view:
|
|
171
|
+
override fun onDropViewInstance(view: LuggMapView) {
|
|
133
172
|
super.onDropViewInstance(view)
|
|
134
173
|
view.onDropViewInstance()
|
|
135
174
|
}
|
|
136
175
|
|
|
137
176
|
override fun moveCamera(
|
|
138
|
-
view:
|
|
177
|
+
view: LuggMapView,
|
|
139
178
|
latitude: Double,
|
|
140
179
|
longitude: Double,
|
|
141
180
|
zoom: Double,
|
|
@@ -144,13 +183,30 @@ class LuggGoogleMapViewManager :
|
|
|
144
183
|
view.moveCamera(latitude, longitude, zoom, duration.toInt())
|
|
145
184
|
}
|
|
146
185
|
|
|
186
|
+
override fun setEdgeInsets(
|
|
187
|
+
view: LuggMapView,
|
|
188
|
+
top: Double,
|
|
189
|
+
left: Double,
|
|
190
|
+
bottom: Double,
|
|
191
|
+
right: Double,
|
|
192
|
+
duration: Double
|
|
193
|
+
) {
|
|
194
|
+
view.setEdgeInsets(
|
|
195
|
+
top.toFloat().dpToPx().toInt(),
|
|
196
|
+
left.toFloat().dpToPx().toInt(),
|
|
197
|
+
bottom.toFloat().dpToPx().toInt(),
|
|
198
|
+
right.toFloat().dpToPx().toInt(),
|
|
199
|
+
duration.toInt()
|
|
200
|
+
)
|
|
201
|
+
}
|
|
202
|
+
|
|
147
203
|
override fun fitCoordinates(
|
|
148
|
-
view:
|
|
204
|
+
view: LuggMapView,
|
|
149
205
|
coordinates: ReadableArray?,
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
206
|
+
edgeInsetsTop: Double,
|
|
207
|
+
edgeInsetsLeft: Double,
|
|
208
|
+
edgeInsetsBottom: Double,
|
|
209
|
+
edgeInsetsRight: Double,
|
|
154
210
|
duration: Double
|
|
155
211
|
) {
|
|
156
212
|
val coords = mutableListOf<LatLng>()
|
|
@@ -162,10 +218,17 @@ class LuggGoogleMapViewManager :
|
|
|
162
218
|
coords.add(LatLng(lat, lng))
|
|
163
219
|
}
|
|
164
220
|
}
|
|
165
|
-
view.fitCoordinates(
|
|
221
|
+
view.fitCoordinates(
|
|
222
|
+
coords,
|
|
223
|
+
edgeInsetsTop.toInt(),
|
|
224
|
+
edgeInsetsLeft.toInt(),
|
|
225
|
+
edgeInsetsBottom.toInt(),
|
|
226
|
+
edgeInsetsRight.toInt(),
|
|
227
|
+
duration.toInt()
|
|
228
|
+
)
|
|
166
229
|
}
|
|
167
230
|
|
|
168
231
|
companion object {
|
|
169
|
-
const val NAME = "
|
|
232
|
+
const val NAME = "LuggMapView"
|
|
170
233
|
}
|
|
171
234
|
}
|
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
package com.luggmaps
|
|
2
2
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
|
+
import android.view.MotionEvent
|
|
4
5
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
5
6
|
import com.facebook.react.views.view.ReactViewGroup
|
|
6
7
|
|
|
7
8
|
@SuppressLint("ViewConstructor")
|
|
8
9
|
class LuggMapWrapperView(context: ThemedReactContext) : ReactViewGroup(context) {
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
|
|
16
|
-
)
|
|
17
|
-
it.layout(0, 0, width, height)
|
|
18
|
-
}
|
|
11
|
+
var touchEventHandler: ((MotionEvent) -> Unit)? = null
|
|
12
|
+
|
|
13
|
+
override fun dispatchTouchEvent(event: MotionEvent): Boolean {
|
|
14
|
+
touchEventHandler?.invoke(event)
|
|
15
|
+
return super.dispatchTouchEvent(event)
|
|
19
16
|
}
|
|
20
17
|
|
|
21
18
|
override fun onLayout(
|
|
@@ -26,14 +23,14 @@ class LuggMapWrapperView(context: ThemedReactContext) : ReactViewGroup(context)
|
|
|
26
23
|
bottom: Int
|
|
27
24
|
) {
|
|
28
25
|
super.onLayout(changed, left, top, right, bottom)
|
|
29
|
-
val
|
|
30
|
-
val
|
|
26
|
+
val w = right - left
|
|
27
|
+
val h = bottom - top
|
|
31
28
|
getChildAt(0)?.let {
|
|
32
29
|
it.measure(
|
|
33
|
-
MeasureSpec.makeMeasureSpec(
|
|
34
|
-
MeasureSpec.makeMeasureSpec(
|
|
30
|
+
MeasureSpec.makeMeasureSpec(w, MeasureSpec.EXACTLY),
|
|
31
|
+
MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY)
|
|
35
32
|
)
|
|
36
|
-
it.layout(0, 0,
|
|
33
|
+
it.layout(0, 0, w, h)
|
|
37
34
|
}
|
|
38
35
|
}
|
|
39
36
|
}
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
package com.luggmaps
|
|
2
2
|
|
|
3
3
|
import android.content.Context
|
|
4
|
+
import android.graphics.Canvas
|
|
4
5
|
import android.view.View
|
|
6
|
+
import androidx.core.graphics.createBitmap
|
|
5
7
|
import androidx.core.view.isNotEmpty
|
|
6
8
|
import com.facebook.react.views.view.ReactViewGroup
|
|
7
9
|
import com.google.android.gms.maps.model.AdvancedMarker
|
|
10
|
+
import com.google.android.gms.maps.model.BitmapDescriptor
|
|
11
|
+
import com.google.android.gms.maps.model.BitmapDescriptorFactory
|
|
12
|
+
import com.luggmaps.events.MarkerDragEvent
|
|
13
|
+
import com.luggmaps.events.MarkerPressEvent
|
|
14
|
+
import com.luggmaps.extensions.dispatchEvent
|
|
8
15
|
|
|
9
16
|
interface LuggMarkerViewDelegate {
|
|
10
17
|
fun markerViewDidUpdate(markerView: LuggMarkerView)
|
|
@@ -12,6 +19,8 @@ interface LuggMarkerViewDelegate {
|
|
|
12
19
|
}
|
|
13
20
|
|
|
14
21
|
class LuggMarkerView(context: Context) : ReactViewGroup(context) {
|
|
22
|
+
private var scaleUpdateRunnable: Runnable? = null
|
|
23
|
+
|
|
15
24
|
var name: String? = null
|
|
16
25
|
private set
|
|
17
26
|
|
|
@@ -36,23 +45,113 @@ class LuggMarkerView(context: Context) : ReactViewGroup(context) {
|
|
|
36
45
|
var zIndex: Float = 0f
|
|
37
46
|
private set
|
|
38
47
|
|
|
48
|
+
var rotate: Float = 0f
|
|
49
|
+
private set
|
|
50
|
+
|
|
51
|
+
var scale: Float = 1f
|
|
52
|
+
private set
|
|
53
|
+
|
|
54
|
+
var scaleChanged: Boolean = false
|
|
55
|
+
private set
|
|
56
|
+
|
|
57
|
+
var rasterize: Boolean = true
|
|
58
|
+
private set
|
|
59
|
+
|
|
60
|
+
var draggable: Boolean = false
|
|
61
|
+
private set
|
|
62
|
+
|
|
63
|
+
var isDragging: Boolean = false
|
|
64
|
+
|
|
39
65
|
var didLayout: Boolean = false
|
|
40
66
|
private set
|
|
41
67
|
|
|
42
68
|
val hasCustomView: Boolean
|
|
43
|
-
get() =
|
|
44
|
-
|
|
45
|
-
val
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
69
|
+
get() = contentView.isNotEmpty()
|
|
70
|
+
|
|
71
|
+
val contentView: ReactViewGroup = ReactViewGroup(context)
|
|
72
|
+
|
|
73
|
+
var onUpdate: (() -> Unit)? = null
|
|
74
|
+
|
|
75
|
+
var calloutView: LuggCalloutView? = null
|
|
76
|
+
private set
|
|
77
|
+
|
|
78
|
+
private fun measureContentBounds(): Pair<Int, Int> {
|
|
79
|
+
var maxWidth = 0
|
|
80
|
+
var maxHeight = 0
|
|
81
|
+
for (i in 0 until contentView.childCount) {
|
|
82
|
+
val child = contentView.getChildAt(i)
|
|
83
|
+
val childRight = child.left + child.width
|
|
84
|
+
val childBottom = child.top + child.height
|
|
85
|
+
if (childRight > maxWidth) maxWidth = childRight
|
|
86
|
+
if (childBottom > maxHeight) maxHeight = childBottom
|
|
87
|
+
}
|
|
88
|
+
return Pair(maxWidth, maxHeight)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
private fun createContentBitmap(): BitmapDescriptor? {
|
|
92
|
+
val (width, height) = measureContentBounds()
|
|
93
|
+
if (width <= 0 || height <= 0) return null
|
|
94
|
+
|
|
95
|
+
val scaledWidth = (width * scale).toInt()
|
|
96
|
+
val scaledHeight = (height * scale).toInt()
|
|
97
|
+
|
|
98
|
+
val bitmap = createBitmap(scaledWidth, scaledHeight)
|
|
99
|
+
val canvas = Canvas(bitmap)
|
|
100
|
+
canvas.scale(scale, scale)
|
|
101
|
+
contentView.draw(canvas)
|
|
102
|
+
return BitmapDescriptorFactory.fromBitmap(bitmap)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
fun layoutContentView() {
|
|
106
|
+
val (width, height) = measureContentBounds()
|
|
107
|
+
val scaledWidth = (width * scale).toInt()
|
|
108
|
+
val scaledHeight = (height * scale).toInt()
|
|
109
|
+
|
|
110
|
+
contentView.scaleX = scale
|
|
111
|
+
contentView.scaleY = scale
|
|
112
|
+
contentView.pivotX = 0f
|
|
113
|
+
contentView.pivotY = 0f
|
|
114
|
+
|
|
115
|
+
contentView.measure(
|
|
116
|
+
View.MeasureSpec.makeMeasureSpec(scaledWidth, View.MeasureSpec.EXACTLY),
|
|
117
|
+
View.MeasureSpec.makeMeasureSpec(scaledHeight, View.MeasureSpec.EXACTLY)
|
|
118
|
+
)
|
|
119
|
+
contentView.layout(0, 0, scaledWidth, scaledHeight)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
fun applyIconToMarker() {
|
|
123
|
+
val m = marker ?: return
|
|
124
|
+
if (!hasCustomView) return
|
|
125
|
+
createContentBitmap()?.let { m.setIcon(it) }
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
fun applyScaleToMarker() {
|
|
129
|
+
val m = marker ?: return
|
|
130
|
+
if (!hasCustomView) return
|
|
131
|
+
|
|
132
|
+
scaleUpdateRunnable?.let { removeCallbacks(it) }
|
|
133
|
+
scaleUpdateRunnable = Runnable {
|
|
134
|
+
if (rasterize) {
|
|
135
|
+
createContentBitmap()?.let { m.setIcon(it) }
|
|
136
|
+
} else {
|
|
137
|
+
layoutContentView()
|
|
138
|
+
onUpdate?.invoke()
|
|
53
139
|
}
|
|
140
|
+
}
|
|
141
|
+
post(scaleUpdateRunnable)
|
|
142
|
+
}
|
|
54
143
|
|
|
55
|
-
|
|
144
|
+
fun updateIcon(onAddMarker: () -> Unit) {
|
|
145
|
+
if (!hasCustomView) return
|
|
146
|
+
post {
|
|
147
|
+
if (marker == null) {
|
|
148
|
+
onAddMarker()
|
|
149
|
+
} else if (rasterize) {
|
|
150
|
+
applyIconToMarker()
|
|
151
|
+
} else {
|
|
152
|
+
layoutContentView()
|
|
153
|
+
onUpdate?.invoke()
|
|
154
|
+
}
|
|
56
155
|
}
|
|
57
156
|
}
|
|
58
157
|
|
|
@@ -61,23 +160,52 @@ class LuggMarkerView(context: Context) : ReactViewGroup(context) {
|
|
|
61
160
|
}
|
|
62
161
|
|
|
63
162
|
override fun addView(child: View, index: Int) {
|
|
64
|
-
|
|
163
|
+
if (child is LuggCalloutView) {
|
|
164
|
+
calloutView = child
|
|
165
|
+
} else {
|
|
166
|
+
contentView.addView(child, index)
|
|
167
|
+
}
|
|
65
168
|
didLayout = false
|
|
66
169
|
}
|
|
67
170
|
|
|
68
171
|
override fun removeView(child: View) {
|
|
69
|
-
|
|
172
|
+
if (child is LuggCalloutView) {
|
|
173
|
+
calloutView = null
|
|
174
|
+
} else {
|
|
175
|
+
contentView.removeView(child)
|
|
176
|
+
}
|
|
70
177
|
didLayout = false
|
|
71
178
|
}
|
|
72
179
|
|
|
73
180
|
override fun removeViewAt(index: Int) {
|
|
74
|
-
|
|
181
|
+
val child = getChildAt(index)
|
|
182
|
+
if (child is LuggCalloutView) {
|
|
183
|
+
calloutView = null
|
|
184
|
+
} else {
|
|
185
|
+
contentView.removeViewAt(index)
|
|
186
|
+
}
|
|
187
|
+
didLayout = false
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
override fun removeViews(start: Int, count: Int) {
|
|
191
|
+
for (i in (start until start + count).reversed()) {
|
|
192
|
+
val child = getChildAt(i)
|
|
193
|
+
if (child is LuggCalloutView) {
|
|
194
|
+
calloutView = null
|
|
195
|
+
} else if (i < contentView.childCount) {
|
|
196
|
+
contentView.removeViewAt(i)
|
|
197
|
+
}
|
|
198
|
+
}
|
|
75
199
|
didLayout = false
|
|
76
200
|
}
|
|
77
201
|
|
|
78
|
-
override fun getChildCount(): Int =
|
|
202
|
+
override fun getChildCount(): Int = contentView.childCount + if (calloutView != null) 1 else 0
|
|
79
203
|
|
|
80
|
-
override fun getChildAt(index: Int): View?
|
|
204
|
+
override fun getChildAt(index: Int): View? {
|
|
205
|
+
if (index < contentView.childCount) return contentView.getChildAt(index)
|
|
206
|
+
if (index == contentView.childCount && calloutView != null) return calloutView
|
|
207
|
+
return null
|
|
208
|
+
}
|
|
81
209
|
|
|
82
210
|
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
|
|
83
211
|
super.onSizeChanged(w, h, oldw, oldh)
|
|
@@ -92,6 +220,7 @@ class LuggMarkerView(context: Context) : ReactViewGroup(context) {
|
|
|
92
220
|
bottom: Int
|
|
93
221
|
) {
|
|
94
222
|
super.onLayout(changed, left, top, right, bottom)
|
|
223
|
+
|
|
95
224
|
if (changed && !didLayout) {
|
|
96
225
|
didLayout = true
|
|
97
226
|
delegate?.markerViewDidLayout(this)
|
|
@@ -120,6 +249,43 @@ class LuggMarkerView(context: Context) : ReactViewGroup(context) {
|
|
|
120
249
|
this.zIndex = zIndex
|
|
121
250
|
}
|
|
122
251
|
|
|
252
|
+
fun setRotate(rotate: Float) {
|
|
253
|
+
this.rotate = rotate
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
fun setScale(scale: Float) {
|
|
257
|
+
scaleChanged = this.scale != scale
|
|
258
|
+
this.scale = scale
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
fun clearScaleChanged() {
|
|
262
|
+
scaleChanged = false
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
fun setRasterize(rasterize: Boolean) {
|
|
266
|
+
this.rasterize = rasterize
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
fun setDraggable(draggable: Boolean) {
|
|
270
|
+
this.draggable = draggable
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
fun emitPressEvent(x: Float, y: Float) {
|
|
274
|
+
dispatchEvent(MarkerPressEvent(this, latitude, longitude, x, y))
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
fun emitDragStartEvent(x: Float, y: Float) {
|
|
278
|
+
dispatchEvent(MarkerDragEvent(this, MarkerDragEvent.DRAG_START, latitude, longitude, x, y))
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
fun emitDragChangeEvent(x: Float, y: Float) {
|
|
282
|
+
dispatchEvent(MarkerDragEvent(this, MarkerDragEvent.DRAG_CHANGE, latitude, longitude, x, y))
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
fun emitDragEndEvent(x: Float, y: Float) {
|
|
286
|
+
dispatchEvent(MarkerDragEvent(this, MarkerDragEvent.DRAG_END, latitude, longitude, x, y))
|
|
287
|
+
}
|
|
288
|
+
|
|
123
289
|
fun setName(name: String?) {
|
|
124
290
|
this.name = name
|
|
125
291
|
}
|
|
@@ -129,12 +295,12 @@ class LuggMarkerView(context: Context) : ReactViewGroup(context) {
|
|
|
129
295
|
}
|
|
130
296
|
|
|
131
297
|
fun onDropViewInstance() {
|
|
298
|
+
scaleUpdateRunnable?.let { removeCallbacks(it) }
|
|
299
|
+
scaleUpdateRunnable = null
|
|
300
|
+
onUpdate = null
|
|
132
301
|
didLayout = false
|
|
302
|
+
calloutView = null
|
|
133
303
|
delegate = null
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
companion object {
|
|
138
|
-
private const val TAG = "Lugg"
|
|
304
|
+
contentView.removeAllViews()
|
|
139
305
|
}
|
|
140
306
|
}
|
|
@@ -20,6 +20,14 @@ class LuggMarkerViewManager :
|
|
|
20
20
|
override fun getName(): String = NAME
|
|
21
21
|
override fun createViewInstance(context: ThemedReactContext): LuggMarkerView = LuggMarkerView(context)
|
|
22
22
|
|
|
23
|
+
override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any> =
|
|
24
|
+
mapOf(
|
|
25
|
+
"topMarkerPress" to mapOf("registrationName" to "onMarkerPress"),
|
|
26
|
+
"topMarkerDragStart" to mapOf("registrationName" to "onMarkerDragStart"),
|
|
27
|
+
"topMarkerDragChange" to mapOf("registrationName" to "onMarkerDragChange"),
|
|
28
|
+
"topMarkerDragEnd" to mapOf("registrationName" to "onMarkerDragEnd")
|
|
29
|
+
)
|
|
30
|
+
|
|
23
31
|
override fun onDropViewInstance(view: LuggMarkerView) {
|
|
24
32
|
super.onDropViewInstance(view)
|
|
25
33
|
view.onDropViewInstance()
|
|
@@ -69,6 +77,26 @@ class LuggMarkerViewManager :
|
|
|
69
77
|
view.setZIndex(zIndex)
|
|
70
78
|
}
|
|
71
79
|
|
|
80
|
+
@ReactProp(name = "rotate", defaultDouble = 0.0)
|
|
81
|
+
override fun setRotate(view: LuggMarkerView, value: Double) {
|
|
82
|
+
view.setRotate(value.toFloat())
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@ReactProp(name = "scale", defaultDouble = 1.0)
|
|
86
|
+
override fun setScale(view: LuggMarkerView, value: Double) {
|
|
87
|
+
view.setScale(value.toFloat())
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@ReactProp(name = "rasterize", defaultBoolean = true)
|
|
91
|
+
override fun setRasterize(view: LuggMarkerView, value: Boolean) {
|
|
92
|
+
view.setRasterize(value)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
@ReactProp(name = "draggable", defaultBoolean = false)
|
|
96
|
+
override fun setDraggable(view: LuggMarkerView, value: Boolean) {
|
|
97
|
+
view.setDraggable(value)
|
|
98
|
+
}
|
|
99
|
+
|
|
72
100
|
companion object {
|
|
73
101
|
const val NAME = "LuggMarkerView"
|
|
74
102
|
}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
package com.luggmaps
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.ReactPackage
|
|
4
|
-
import com.facebook.react.bridge.NativeModule
|
|
5
4
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
5
|
import com.facebook.react.uimanager.ViewManager
|
|
7
6
|
|
|
8
7
|
class LuggPackage : ReactPackage {
|
|
9
8
|
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> =
|
|
10
|
-
listOf(
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
listOf(
|
|
10
|
+
LuggMapViewManager(),
|
|
11
|
+
LuggMarkerViewManager(),
|
|
12
|
+
LuggCalloutViewManager(),
|
|
13
|
+
LuggMapWrapperViewManager(),
|
|
14
|
+
LuggPolylineViewManager(),
|
|
15
|
+
LuggPolygonViewManager()
|
|
16
|
+
)
|
|
13
17
|
}
|