react-native-google-maps-plus 1.0.2 → 1.1.0-dev.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 +127 -11
- package/android/src/main/java/com/rngooglemapsplus/GoogleMapsViewImpl.kt +359 -139
- package/android/src/main/java/com/rngooglemapsplus/LocationHandler.kt +44 -44
- package/android/src/main/java/com/rngooglemapsplus/MapCircleBuilder.kt +19 -0
- package/android/src/main/java/com/rngooglemapsplus/{MapMarker.kt → MapMarkerBuilder.kt} +7 -6
- package/android/src/main/java/com/rngooglemapsplus/{MapPolygon.kt → MapPolygonBuilder.kt} +4 -18
- package/android/src/main/java/com/rngooglemapsplus/{MapPolyline.kt → MapPolylineBuilder.kt.kt} +4 -19
- package/android/src/main/java/com/rngooglemapsplus/RNGoogleMapsPlusView.kt +145 -129
- package/android/src/main/java/com/rngooglemapsplus/extensions/RNCameraExtension.kt +19 -0
- package/android/src/main/java/com/rngooglemapsplus/extensions/RNLocationPriorityExtension.kt +12 -0
- package/android/src/main/java/com/rngooglemapsplus/extensions/RNMapCircleExtension.kt +14 -0
- package/android/src/main/java/com/rngooglemapsplus/extensions/RNPolygonExtension.kt +20 -0
- package/android/src/main/java/com/rngooglemapsplus/extensions/RNPolylineExtension.kt +21 -0
- package/android/src/main/java/com/rngooglemapsplus/extensions/RNUserInterfaceExtension.kt +12 -0
- package/android/src/main/java/com/rngooglemapsplus/{Color.kt → extensions/StringExtension.kt} +1 -1
- package/android/src/main/java/com/rngooglemapsplus/extensions/ThrowableExtension.kt +38 -0
- package/ios/GoogleMapViewImpl.swift +348 -150
- package/ios/LocationHandler.swift +29 -69
- package/ios/MapCircleBuilder.swift +20 -0
- package/ios/{MapMarker.swift → MapMarkerBuilder.swift} +11 -42
- package/ios/MapPolygonBuilder.swift +20 -0
- package/ios/MapPolylineBuilder.swift +24 -0
- package/ios/PermissionHandler.swift +1 -1
- package/ios/RNGoogleMapsPlusModule.swift +1 -1
- package/ios/RNGoogleMapsPlusView.swift +159 -168
- package/ios/extensions/RNCamera+Extension.swift +22 -0
- package/ios/extensions/RNCircle+Extension.swift +24 -0
- package/ios/extensions/RNIOSLocationAccuracy+Extensions.swift +19 -0
- package/ios/extensions/RNMarker+Extension.swift +24 -0
- package/ios/{MapPolygon.swift → extensions/RNPolygon+Extension.swift.swift} +7 -23
- package/ios/extensions/RNPolyline+Extension.swift.swift +62 -0
- package/ios/extensions/RNUserInterface+Extension.swift +16 -0
- package/ios/{Color.swift → extensions/String+Extensions.swift} +20 -20
- package/lib/module/types.js +14 -0
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/src/RNGoogleMapsPlusView.nitro.d.ts +21 -12
- package/lib/typescript/src/RNGoogleMapsPlusView.nitro.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +59 -3
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/nitrogen/generated/android/c++/JHybridRNGoogleMapsPlusViewSpec.cpp +233 -69
- package/nitrogen/generated/android/c++/JHybridRNGoogleMapsPlusViewSpec.hpp +40 -22
- package/nitrogen/generated/android/c++/JRNAndroidLocationConfig.hpp +63 -0
- package/nitrogen/generated/android/c++/JRNAndroidLocationPriority.hpp +65 -0
- package/nitrogen/generated/android/c++/JRNCircle.hpp +84 -0
- package/nitrogen/generated/android/c++/JRNIOSLocationAccuracy.hpp +65 -0
- package/nitrogen/generated/android/c++/JRNIOSLocationConfig.hpp +59 -0
- package/nitrogen/generated/android/c++/JRNInitialProps.hpp +66 -0
- package/nitrogen/generated/android/c++/JRNLocationConfig.hpp +65 -0
- package/nitrogen/generated/android/c++/JRNMapType.hpp +68 -0
- package/nitrogen/generated/android/c++/JRNMapUiSettings.hpp +93 -0
- package/nitrogen/generated/android/c++/JRNMarker.hpp +4 -4
- package/nitrogen/generated/android/c++/JRNPolygon.hpp +8 -4
- package/nitrogen/generated/android/c++/JRNPolyline.hpp +8 -4
- package/nitrogen/generated/android/c++/views/JHybridRNGoogleMapsPlusViewStateUpdater.cpp +40 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/HybridRNGoogleMapsPlusViewSpec.kt +89 -11
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNAndroidLocationConfig.kt +35 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNAndroidLocationPriority.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNCircle.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNIOSLocationAccuracy.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNIOSLocationConfig.kt +32 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNInitialProps.kt +35 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNLocationConfig.kt +32 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNMapType.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNMapUiSettings.kt +59 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNMarker.kt +1 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNPolygon.kt +4 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNPolyline.kt +4 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/views/HybridRNGoogleMapsPlusViewManager.kt +7 -1
- package/nitrogen/generated/ios/RNGoogleMapsPlus-Swift-Cxx-Bridge.hpp +296 -45
- package/nitrogen/generated/ios/RNGoogleMapsPlus-Swift-Cxx-Umbrella.hpp +27 -0
- package/nitrogen/generated/ios/c++/HybridRNGoogleMapsPlusViewSpecSwift.hpp +131 -37
- package/nitrogen/generated/ios/c++/views/HybridRNGoogleMapsPlusViewComponent.mm +61 -16
- package/nitrogen/generated/ios/swift/HybridRNGoogleMapsPlusViewSpec.swift +20 -11
- package/nitrogen/generated/ios/swift/HybridRNGoogleMapsPlusViewSpec_cxx.swift +378 -45
- package/nitrogen/generated/ios/swift/RNAndroidLocationConfig.swift +93 -0
- package/nitrogen/generated/ios/swift/RNAndroidLocationPriority.swift +48 -0
- package/nitrogen/generated/ios/swift/RNCircle.swift +198 -0
- package/nitrogen/generated/ios/swift/RNIOSLocationAccuracy.swift +48 -0
- package/nitrogen/generated/ios/swift/RNIOSLocationConfig.swift +70 -0
- package/nitrogen/generated/ios/swift/RNInitialProps.swift +107 -0
- package/nitrogen/generated/ios/swift/RNLocationConfig.swift +84 -0
- package/nitrogen/generated/ios/swift/RNMapType.swift +52 -0
- package/nitrogen/generated/ios/swift/RNMapUiSettings.swift +277 -0
- package/nitrogen/generated/ios/swift/RNMarker.swift +17 -5
- package/nitrogen/generated/ios/swift/RNPolygon.swift +40 -5
- package/nitrogen/generated/ios/swift/RNPolyline.swift +40 -5
- package/nitrogen/generated/shared/c++/HybridRNGoogleMapsPlusViewSpec.cpp +20 -2
- package/nitrogen/generated/shared/c++/HybridRNGoogleMapsPlusViewSpec.hpp +59 -26
- package/nitrogen/generated/shared/c++/RNAndroidLocationConfig.hpp +77 -0
- package/nitrogen/generated/shared/c++/RNAndroidLocationPriority.hpp +64 -0
- package/nitrogen/generated/shared/c++/RNCircle.hpp +98 -0
- package/nitrogen/generated/shared/c++/RNIOSLocationAccuracy.hpp +64 -0
- package/nitrogen/generated/shared/c++/RNIOSLocationConfig.hpp +73 -0
- package/nitrogen/generated/shared/c++/RNInitialProps.hpp +78 -0
- package/nitrogen/generated/shared/c++/RNLocationConfig.hpp +76 -0
- package/nitrogen/generated/shared/c++/RNMapType.hpp +88 -0
- package/nitrogen/generated/shared/c++/RNMapUiSettings.hpp +107 -0
- package/nitrogen/generated/shared/c++/RNMarker.hpp +6 -6
- package/nitrogen/generated/shared/c++/RNPolygon.hpp +10 -6
- package/nitrogen/generated/shared/c++/RNPolyline.hpp +10 -6
- package/nitrogen/generated/shared/c++/views/HybridRNGoogleMapsPlusViewComponent.cpp +138 -30
- package/nitrogen/generated/shared/c++/views/HybridRNGoogleMapsPlusViewComponent.hpp +27 -13
- package/nitrogen/generated/shared/json/RNGoogleMapsPlusViewConfig.json +10 -1
- package/package.json +5 -5
- package/src/RNGoogleMapsPlusView.nitro.ts +25 -11
- package/src/types.ts +67 -3
- package/ios/MapPolyline.swift +0 -83
|
@@ -4,119 +4,142 @@ import com.facebook.proguard.annotations.DoNotStrip
|
|
|
4
4
|
import com.facebook.react.bridge.UiThreadUtil
|
|
5
5
|
import com.facebook.react.uimanager.PixelUtil.dpToPx
|
|
6
6
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
7
|
-
import com.google.android.gms.maps.model.
|
|
8
|
-
import com.google.android.gms.maps.model.MapColorScheme
|
|
7
|
+
import com.google.android.gms.maps.model.LatLng
|
|
9
8
|
import com.google.android.gms.maps.model.MapStyleOptions
|
|
10
9
|
import com.margelo.nitro.core.Promise
|
|
10
|
+
import com.rngooglemapsplus.extensions.circleEquals
|
|
11
|
+
import com.rngooglemapsplus.extensions.polygonEquals
|
|
12
|
+
import com.rngooglemapsplus.extensions.polylineEquals
|
|
13
|
+
import com.rngooglemapsplus.extensions.toCameraPosition
|
|
14
|
+
import com.rngooglemapsplus.extensions.toColor
|
|
15
|
+
import com.rngooglemapsplus.extensions.toMapColorScheme
|
|
11
16
|
|
|
12
17
|
@DoNotStrip
|
|
13
18
|
class RNGoogleMapsPlusView(
|
|
14
19
|
val context: ThemedReactContext,
|
|
15
20
|
) : HybridRNGoogleMapsPlusViewSpec() {
|
|
16
|
-
private var currentCustomMapStyle: String =
|
|
21
|
+
private var currentCustomMapStyle: String? = null
|
|
17
22
|
private var permissionHandler = PermissionHandler(context)
|
|
18
23
|
private var locationHandler = LocationHandler(context)
|
|
19
24
|
private var playServiceHandler = PlayServicesHandler(context)
|
|
20
|
-
|
|
25
|
+
|
|
26
|
+
private val markerBuilder = MarkerBuilder()
|
|
27
|
+
private val polylineBuilder = MapPolylineBuilder()
|
|
28
|
+
private val polygonBuilder = MapPolygonBuilder()
|
|
29
|
+
private val circleBuilder = MapCircleBuilder()
|
|
21
30
|
|
|
22
31
|
override val view =
|
|
23
|
-
GoogleMapsViewImpl(context, locationHandler, playServiceHandler,
|
|
32
|
+
GoogleMapsViewImpl(context, locationHandler, playServiceHandler, markerBuilder)
|
|
33
|
+
|
|
34
|
+
override var initialProps: RNInitialProps? = null
|
|
35
|
+
set(value) {
|
|
36
|
+
view.initMapView(
|
|
37
|
+
value?.mapId,
|
|
38
|
+
value?.liteMode,
|
|
39
|
+
value?.camera?.toCameraPosition(),
|
|
40
|
+
)
|
|
41
|
+
}
|
|
24
42
|
|
|
25
|
-
|
|
26
|
-
|
|
43
|
+
override var uiSettings: RNMapUiSettings? = null
|
|
44
|
+
set(value) {
|
|
45
|
+
view.uiSettings = value
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
override var myLocationEnabled: Boolean? = null
|
|
49
|
+
set(value) {
|
|
50
|
+
view.myLocationEnabled = value
|
|
51
|
+
}
|
|
27
52
|
|
|
28
|
-
override var buildingEnabled: Boolean
|
|
29
|
-
get() = view.buildingEnabled
|
|
53
|
+
override var buildingEnabled: Boolean? = null
|
|
30
54
|
set(value) {
|
|
31
55
|
view.buildingEnabled = value
|
|
32
56
|
}
|
|
33
57
|
|
|
34
|
-
override var trafficEnabled: Boolean
|
|
35
|
-
get() = view.trafficEnabled
|
|
58
|
+
override var trafficEnabled: Boolean? = null
|
|
36
59
|
set(value) {
|
|
37
60
|
view.trafficEnabled = value
|
|
38
61
|
}
|
|
39
62
|
|
|
40
|
-
override var
|
|
41
|
-
get() = currentCustomMapStyle
|
|
63
|
+
override var indoorEnabled: Boolean? = null
|
|
42
64
|
set(value) {
|
|
43
|
-
|
|
44
|
-
view.customMapStyle = MapStyleOptions(value)
|
|
65
|
+
view.indoorEnabled = value
|
|
45
66
|
}
|
|
46
67
|
|
|
47
|
-
override var
|
|
48
|
-
get() = mapCameraPotionToCamera(view.initialCamera)
|
|
68
|
+
override var customMapStyle: String? = null
|
|
49
69
|
set(value) {
|
|
50
|
-
|
|
70
|
+
currentCustomMapStyle = value
|
|
71
|
+
value?.let {
|
|
72
|
+
view.customMapStyle = MapStyleOptions(it)
|
|
73
|
+
}
|
|
51
74
|
}
|
|
52
75
|
|
|
53
|
-
override var userInterfaceStyle: RNUserInterfaceStyle
|
|
54
|
-
get() = mapColorSchemeToUserInterfaceStyle(view.userInterfaceStyle)
|
|
76
|
+
override var userInterfaceStyle: RNUserInterfaceStyle? = null
|
|
55
77
|
set(value) {
|
|
56
|
-
view.userInterfaceStyle =
|
|
78
|
+
view.userInterfaceStyle = value.toMapColorScheme()
|
|
57
79
|
}
|
|
58
80
|
|
|
59
|
-
override var minZoomLevel: Double
|
|
60
|
-
get() = view.minZoomLevel
|
|
81
|
+
override var minZoomLevel: Double? = null
|
|
61
82
|
set(value) {
|
|
62
83
|
view.minZoomLevel = value
|
|
63
84
|
}
|
|
64
85
|
|
|
65
|
-
override var maxZoomLevel: Double
|
|
66
|
-
get() = view.maxZoomLevel
|
|
86
|
+
override var maxZoomLevel: Double? = null
|
|
67
87
|
set(value) {
|
|
68
88
|
view.maxZoomLevel = value
|
|
69
89
|
}
|
|
70
90
|
|
|
71
|
-
override var mapPadding: RNMapPadding
|
|
72
|
-
get() = view.mapPadding
|
|
91
|
+
override var mapPadding: RNMapPadding? = null
|
|
73
92
|
set(value) {
|
|
74
93
|
view.mapPadding = value
|
|
75
94
|
}
|
|
76
95
|
|
|
77
|
-
override var
|
|
96
|
+
override var mapType: RNMapType? = null
|
|
78
97
|
set(value) {
|
|
79
|
-
|
|
80
|
-
|
|
98
|
+
value?.let {
|
|
99
|
+
view.mapType = it.value
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
override var markers: Array<RNMarker>? = null
|
|
104
|
+
set(value) {
|
|
105
|
+
val prevById = field?.associateBy { it.id } ?: emptyMap()
|
|
106
|
+
val nextById = value?.associateBy { it.id } ?: emptyMap()
|
|
81
107
|
|
|
82
108
|
(prevById.keys - nextById.keys).forEach { id ->
|
|
83
|
-
|
|
109
|
+
markerBuilder.cancelIconJob(id)
|
|
84
110
|
view.removeMarker(id)
|
|
85
111
|
}
|
|
86
112
|
|
|
87
113
|
nextById.forEach { (id, next) ->
|
|
88
114
|
val prev = prevById[id]
|
|
89
115
|
if (prev == null) {
|
|
90
|
-
|
|
116
|
+
markerBuilder.buildIconAsync(id, next) { icon ->
|
|
91
117
|
view.addMarker(
|
|
92
118
|
id,
|
|
93
|
-
|
|
119
|
+
markerBuilder.build(next, icon),
|
|
94
120
|
)
|
|
95
121
|
}
|
|
96
122
|
} else if (!prev.markerEquals(next)) {
|
|
97
123
|
view.updateMarker(id) { m ->
|
|
98
124
|
onUi {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if (prev.zIndex != next.zIndex) {
|
|
107
|
-
m.zIndex = next.zIndex.toFloat()
|
|
125
|
+
m.position =
|
|
126
|
+
LatLng(
|
|
127
|
+
next.coordinate.latitude,
|
|
128
|
+
next.coordinate.longitude,
|
|
129
|
+
)
|
|
130
|
+
next.zIndex?.let { m.zIndex = it.toFloat() } ?: run {
|
|
131
|
+
m.zIndex = 0f
|
|
108
132
|
}
|
|
133
|
+
|
|
109
134
|
if (!prev.markerStyleEquals(next)) {
|
|
110
|
-
|
|
135
|
+
markerBuilder.buildIconAsync(id, next) { icon ->
|
|
111
136
|
m.setIcon(icon)
|
|
112
137
|
}
|
|
113
138
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
)
|
|
119
|
-
}
|
|
139
|
+
m.setAnchor(
|
|
140
|
+
(next.anchor?.x ?: 0.5).toFloat(),
|
|
141
|
+
(next.anchor?.y ?: 0.5).toFloat(),
|
|
142
|
+
)
|
|
120
143
|
}
|
|
121
144
|
}
|
|
122
145
|
}
|
|
@@ -124,10 +147,10 @@ class RNGoogleMapsPlusView(
|
|
|
124
147
|
field = value
|
|
125
148
|
}
|
|
126
149
|
|
|
127
|
-
override var polylines: Array<RNPolyline
|
|
150
|
+
override var polylines: Array<RNPolyline>? = null
|
|
128
151
|
set(value) {
|
|
129
|
-
val prevById = field
|
|
130
|
-
val nextById = value
|
|
152
|
+
val prevById = field?.associateBy { it.id } ?: emptyMap()
|
|
153
|
+
val nextById = value?.associateBy { it.id } ?: emptyMap()
|
|
131
154
|
|
|
132
155
|
(prevById.keys - nextById.keys).forEach { id ->
|
|
133
156
|
view.removePolyline(id)
|
|
@@ -136,24 +159,24 @@ class RNGoogleMapsPlusView(
|
|
|
136
159
|
nextById.forEach { (id, next) ->
|
|
137
160
|
val prev = prevById[id]
|
|
138
161
|
if (prev == null) {
|
|
139
|
-
view.addPolyline(id,
|
|
162
|
+
view.addPolyline(id, polylineBuilder.buildPolylineOptions(next))
|
|
140
163
|
} else if (!prev.polylineEquals(next)) {
|
|
141
164
|
view.updatePolyline(id) { gms ->
|
|
142
165
|
onUi {
|
|
143
166
|
gms.points =
|
|
144
167
|
next.coordinates.map {
|
|
145
|
-
|
|
146
|
-
|
|
168
|
+
|
|
169
|
+
LatLng(it.latitude, it.longitude)
|
|
147
170
|
}
|
|
148
171
|
next.width?.let { gms.width = it.dpToPx() }
|
|
149
172
|
next.lineCap?.let {
|
|
150
|
-
val cap =
|
|
173
|
+
val cap = polylineBuilder.mapLineCap(it)
|
|
151
174
|
gms.startCap = cap
|
|
152
175
|
gms.endCap = cap
|
|
153
176
|
}
|
|
154
|
-
next.lineJoin?.let { gms.jointType =
|
|
177
|
+
next.lineJoin?.let { gms.jointType = polylineBuilder.mapLineJoin(it) }
|
|
155
178
|
next.color?.let { gms.color = it.toColor() }
|
|
156
|
-
gms.zIndex =
|
|
179
|
+
next.zIndex?.let { gms.zIndex = it.toFloat() }
|
|
157
180
|
}
|
|
158
181
|
}
|
|
159
182
|
}
|
|
@@ -161,10 +184,10 @@ class RNGoogleMapsPlusView(
|
|
|
161
184
|
field = value
|
|
162
185
|
}
|
|
163
186
|
|
|
164
|
-
override var polygons: Array<RNPolygon
|
|
187
|
+
override var polygons: Array<RNPolygon>? = null
|
|
165
188
|
set(value) {
|
|
166
|
-
val prevById = field
|
|
167
|
-
val nextById = value
|
|
189
|
+
val prevById = field?.associateBy { it.id } ?: emptyMap()
|
|
190
|
+
val nextById = value?.associateBy { it.id } ?: emptyMap()
|
|
168
191
|
|
|
169
192
|
(prevById.keys - nextById.keys).forEach { id ->
|
|
170
193
|
view.removePolygon(id)
|
|
@@ -173,7 +196,7 @@ class RNGoogleMapsPlusView(
|
|
|
173
196
|
nextById.forEach { (id, next) ->
|
|
174
197
|
val prev = prevById[id]
|
|
175
198
|
if (prev == null) {
|
|
176
|
-
view.addPolygon(id,
|
|
199
|
+
view.addPolygon(id, polygonBuilder.buildPolygonOptions(next))
|
|
177
200
|
} else if (!prev.polygonEquals(next)) {
|
|
178
201
|
view.updatePolygon(id) { gmsPoly ->
|
|
179
202
|
onUi {
|
|
@@ -185,7 +208,7 @@ class RNGoogleMapsPlusView(
|
|
|
185
208
|
next.fillColor?.let { gmsPoly.fillColor = it.toColor() }
|
|
186
209
|
next.strokeColor?.let { gmsPoly.strokeColor = it.toColor() }
|
|
187
210
|
next.strokeWidth?.let { gmsPoly.strokeWidth = it.dpToPx() }
|
|
188
|
-
gmsPoly.zIndex =
|
|
211
|
+
next.zIndex?.let { gmsPoly.zIndex = it.toFloat() }
|
|
189
212
|
}
|
|
190
213
|
}
|
|
191
214
|
}
|
|
@@ -193,55 +216,95 @@ class RNGoogleMapsPlusView(
|
|
|
193
216
|
field = value
|
|
194
217
|
}
|
|
195
218
|
|
|
196
|
-
override var
|
|
197
|
-
|
|
219
|
+
override var circles: Array<RNCircle>? = null
|
|
220
|
+
set(value) {
|
|
221
|
+
val prevById = field?.associateBy { it.id } ?: emptyMap()
|
|
222
|
+
val nextById = value?.associateBy { it.id } ?: emptyMap()
|
|
223
|
+
|
|
224
|
+
(prevById.keys - nextById.keys).forEach { id ->
|
|
225
|
+
view.removeCircle(id)
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
nextById.forEach { (id, next) ->
|
|
229
|
+
val prev = prevById[id]
|
|
230
|
+
if (prev == null) {
|
|
231
|
+
view.addCircle(id, circleBuilder.buildCircleOptions(next))
|
|
232
|
+
} else if (!prev.circleEquals(next)) {
|
|
233
|
+
view.updateCircle(id) { gmsCircle ->
|
|
234
|
+
onUi {
|
|
235
|
+
gmsCircle.center = LatLng(next.center.latitude, next.center.longitude)
|
|
236
|
+
next.radius?.let { gmsCircle.radius = it }
|
|
237
|
+
next.strokeWidth?.let { gmsCircle.strokeWidth = it.dpToPx() }
|
|
238
|
+
next.strokeColor?.let { gmsCircle.strokeColor = it.toColor() }
|
|
239
|
+
next.fillColor?.let { gmsCircle.fillColor = it.toColor() }
|
|
240
|
+
next.zIndex?.let { gmsCircle.zIndex = it.toFloat() } ?: run { gmsCircle.zIndex = 0f }
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
field = value
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
override var locationConfig: RNLocationConfig? = null
|
|
249
|
+
set(value) {
|
|
250
|
+
view.locationConfig = value
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
override var onMapError: ((RNMapErrorCode) -> Unit)? = null
|
|
198
254
|
set(cb) {
|
|
199
255
|
view.onMapError = cb
|
|
200
256
|
}
|
|
201
257
|
|
|
202
|
-
override var onMapReady: ((Boolean) -> Unit)?
|
|
203
|
-
get() = view.onMapReady
|
|
258
|
+
override var onMapReady: ((Boolean) -> Unit)? = null
|
|
204
259
|
set(cb) {
|
|
205
260
|
view.onMapReady = cb
|
|
206
261
|
}
|
|
207
|
-
override var onLocationUpdate: ((RNLocation) -> Unit)?
|
|
208
|
-
get() = view.onLocationUpdate
|
|
262
|
+
override var onLocationUpdate: ((RNLocation) -> Unit)? = null
|
|
209
263
|
set(cb) {
|
|
210
264
|
view.onLocationUpdate = cb
|
|
211
265
|
}
|
|
212
266
|
|
|
213
|
-
override var onLocationError: ((RNLocationErrorCode) -> Unit)?
|
|
214
|
-
get() = view.onLocationError
|
|
267
|
+
override var onLocationError: ((RNLocationErrorCode) -> Unit)? = null
|
|
215
268
|
set(cb) {
|
|
216
269
|
view.onLocationError = cb
|
|
217
270
|
}
|
|
218
271
|
|
|
219
|
-
override var onMapPress: ((RNLatLng) -> Unit)?
|
|
220
|
-
get() = view.onMapPress
|
|
272
|
+
override var onMapPress: ((RNLatLng) -> Unit)? = null
|
|
221
273
|
set(cb) {
|
|
222
274
|
view.onMapPress = cb
|
|
223
275
|
}
|
|
224
276
|
|
|
225
|
-
override var onMarkerPress: ((String) -> Unit)?
|
|
226
|
-
get() = view.onMarkerPress
|
|
277
|
+
override var onMarkerPress: ((String) -> Unit)? = null
|
|
227
278
|
set(cb) {
|
|
228
279
|
view.onMarkerPress = cb
|
|
229
280
|
}
|
|
230
281
|
|
|
231
|
-
override var
|
|
232
|
-
|
|
282
|
+
override var onPolylinePress: ((String) -> Unit)? = null
|
|
283
|
+
set(cb) {
|
|
284
|
+
view.onPolylinePress = cb
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
override var onPolygonPress: ((String) -> Unit)? = null
|
|
288
|
+
set(cb) {
|
|
289
|
+
view.onPolygonPress = cb
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
override var onCirclePress: ((String) -> Unit)? = null
|
|
293
|
+
set(cb) {
|
|
294
|
+
view.onCirclePress = cb
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
override var onCameraChangeStart: ((RNRegion, RNCamera, Boolean) -> Unit)? = null
|
|
233
298
|
set(cb) {
|
|
234
299
|
view.onCameraChangeStart = cb
|
|
235
300
|
}
|
|
236
301
|
|
|
237
|
-
override var onCameraChange: ((RNRegion, RNCamera, Boolean) -> Unit)?
|
|
238
|
-
get() = view.onCameraChange
|
|
302
|
+
override var onCameraChange: ((RNRegion, RNCamera, Boolean) -> Unit)? = null
|
|
239
303
|
set(cb) {
|
|
240
304
|
view.onCameraChange = cb
|
|
241
305
|
}
|
|
242
306
|
|
|
243
|
-
override var onCameraChangeComplete: ((RNRegion, RNCamera, Boolean) -> Unit)?
|
|
244
|
-
get() = view.onCameraChangeComplete
|
|
307
|
+
override var onCameraChangeComplete: ((RNRegion, RNCamera, Boolean) -> Unit)? = null
|
|
245
308
|
set(cb) {
|
|
246
309
|
view.onCameraChangeComplete = cb
|
|
247
310
|
}
|
|
@@ -251,7 +314,7 @@ class RNGoogleMapsPlusView(
|
|
|
251
314
|
animated: Boolean?,
|
|
252
315
|
durationMS: Double?,
|
|
253
316
|
) {
|
|
254
|
-
view.setCamera(camera, animated == true, durationMS?.toInt() ?: 3000)
|
|
317
|
+
view.setCamera(camera.toCameraPosition(), animated == true, durationMS?.toInt() ?: 3000)
|
|
255
318
|
}
|
|
256
319
|
|
|
257
320
|
override fun setCameraToCoordinates(
|
|
@@ -279,53 +342,6 @@ class RNGoogleMapsPlusView(
|
|
|
279
342
|
override fun requestLocationPermission(): Promise<RNLocationPermissionResult> = permissionHandler.requestLocationPermission()
|
|
280
343
|
|
|
281
344
|
override fun isGooglePlayServicesAvailable(): Boolean = playServiceHandler.isPlayServicesAvailable()
|
|
282
|
-
|
|
283
|
-
fun userInterfaceStyleToMapColorScheme(value: RNUserInterfaceStyle): Int =
|
|
284
|
-
when (value) {
|
|
285
|
-
RNUserInterfaceStyle.LIGHT -> {
|
|
286
|
-
MapColorScheme.LIGHT
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
RNUserInterfaceStyle.DARK -> {
|
|
290
|
-
MapColorScheme.DARK
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
RNUserInterfaceStyle.DEFAULT -> {
|
|
294
|
-
MapColorScheme.FOLLOW_SYSTEM
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
fun mapCameraToCameraPosition(camera: RNCamera): CameraPosition {
|
|
299
|
-
val builder = CameraPosition.builder()
|
|
300
|
-
camera.center?.let {
|
|
301
|
-
builder.target(
|
|
302
|
-
com.google.android.gms.maps.model.LatLng(
|
|
303
|
-
camera.center.latitude,
|
|
304
|
-
camera.center.longitude,
|
|
305
|
-
),
|
|
306
|
-
)
|
|
307
|
-
}
|
|
308
|
-
camera.zoom?.let { builder.zoom(it.toFloat()) }
|
|
309
|
-
camera.bearing?.let { builder.bearing(it.toFloat()) }
|
|
310
|
-
camera.tilt?.let { builder.tilt(it.toFloat()) }
|
|
311
|
-
|
|
312
|
-
return builder.build()
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
fun mapCameraPotionToCamera(cameraPosition: CameraPosition): RNCamera =
|
|
316
|
-
RNCamera(
|
|
317
|
-
center = RNLatLng(cameraPosition.target.latitude, cameraPosition.target.longitude),
|
|
318
|
-
zoom = cameraPosition.zoom.toDouble(),
|
|
319
|
-
bearing = cameraPosition.bearing.toDouble(),
|
|
320
|
-
tilt = cameraPosition.tilt.toDouble(),
|
|
321
|
-
)
|
|
322
|
-
|
|
323
|
-
fun mapColorSchemeToUserInterfaceStyle(value: Int): RNUserInterfaceStyle =
|
|
324
|
-
when (value) {
|
|
325
|
-
MapColorScheme.LIGHT -> RNUserInterfaceStyle.LIGHT
|
|
326
|
-
MapColorScheme.DARK -> RNUserInterfaceStyle.DARK
|
|
327
|
-
else -> RNUserInterfaceStyle.DEFAULT
|
|
328
|
-
}
|
|
329
345
|
}
|
|
330
346
|
|
|
331
347
|
private inline fun onUi(crossinline block: () -> Unit) {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
package com.rngooglemapsplus.extensions
|
|
2
|
+
|
|
3
|
+
import com.google.android.gms.maps.model.CameraPosition
|
|
4
|
+
import com.google.android.gms.maps.model.LatLng
|
|
5
|
+
import com.rngooglemapsplus.RNCamera
|
|
6
|
+
|
|
7
|
+
fun RNCamera.toCameraPosition(): CameraPosition {
|
|
8
|
+
val builder = CameraPosition.builder()
|
|
9
|
+
|
|
10
|
+
center?.let {
|
|
11
|
+
builder.target(LatLng(it.latitude, it.longitude))
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
zoom?.let { builder.zoom(it.toFloat()) }
|
|
15
|
+
bearing?.let { builder.bearing(it.toFloat()) }
|
|
16
|
+
tilt?.let { builder.tilt(it.toFloat()) }
|
|
17
|
+
|
|
18
|
+
return builder.build()
|
|
19
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package com.rngooglemapsplus.extensions
|
|
2
|
+
|
|
3
|
+
import com.google.android.gms.location.Priority
|
|
4
|
+
import com.rngooglemapsplus.RNAndroidLocationPriority
|
|
5
|
+
|
|
6
|
+
fun RNAndroidLocationPriority.toGooglePriority(): Int =
|
|
7
|
+
when (this) {
|
|
8
|
+
RNAndroidLocationPriority.PRIORITY_HIGH_ACCURACY -> Priority.PRIORITY_HIGH_ACCURACY
|
|
9
|
+
RNAndroidLocationPriority.PRIORITY_BALANCED_POWER_ACCURACY -> Priority.PRIORITY_BALANCED_POWER_ACCURACY
|
|
10
|
+
RNAndroidLocationPriority.PRIORITY_LOW_POWER -> Priority.PRIORITY_LOW_POWER
|
|
11
|
+
RNAndroidLocationPriority.PRIORITY_PASSIVE -> Priority.PRIORITY_PASSIVE
|
|
12
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.rngooglemapsplus.extensions
|
|
2
|
+
|
|
3
|
+
import com.rngooglemapsplus.RNCircle
|
|
4
|
+
|
|
5
|
+
fun RNCircle.circleEquals(b: RNCircle): Boolean {
|
|
6
|
+
if (zIndex != b.zIndex) return false
|
|
7
|
+
if (pressable != b.pressable) return false
|
|
8
|
+
if (center != b.center) return false
|
|
9
|
+
if (radius != b.radius) return false
|
|
10
|
+
if (strokeWidth != b.strokeWidth) return false
|
|
11
|
+
if (strokeColor != b.strokeColor) return false
|
|
12
|
+
if (fillColor != b.fillColor) return false
|
|
13
|
+
return true
|
|
14
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
package com.rngooglemapsplus.extensions
|
|
2
|
+
|
|
3
|
+
import com.rngooglemapsplus.RNPolygon
|
|
4
|
+
|
|
5
|
+
fun RNPolygon.polygonEquals(b: RNPolygon): Boolean {
|
|
6
|
+
if (zIndex != b.zIndex) return false
|
|
7
|
+
if (pressable != b.pressable) return false
|
|
8
|
+
if (strokeWidth != b.strokeWidth) return false
|
|
9
|
+
if (fillColor != b.fillColor) return false
|
|
10
|
+
if (strokeColor != b.strokeColor) return false
|
|
11
|
+
val ac = coordinates
|
|
12
|
+
val bc = b.coordinates
|
|
13
|
+
if (ac.size != bc.size) return false
|
|
14
|
+
for (i in ac.indices) {
|
|
15
|
+
val p = ac[i]
|
|
16
|
+
val q = bc[i]
|
|
17
|
+
if (p.latitude != q.latitude || p.longitude != q.longitude) return false
|
|
18
|
+
}
|
|
19
|
+
return true
|
|
20
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
package com.rngooglemapsplus.extensions
|
|
2
|
+
|
|
3
|
+
import com.rngooglemapsplus.RNPolyline
|
|
4
|
+
|
|
5
|
+
fun RNPolyline.polylineEquals(b: RNPolyline): Boolean {
|
|
6
|
+
if (zIndex != b.zIndex) return false
|
|
7
|
+
if (pressable != b.pressable) return false
|
|
8
|
+
if ((width ?: 0.0) != (b.width ?: 0.0)) return false
|
|
9
|
+
if (lineCap != b.lineCap) return false
|
|
10
|
+
if (lineJoin != b.lineJoin) return false
|
|
11
|
+
if (color != b.color) return false
|
|
12
|
+
val ac = coordinates
|
|
13
|
+
val bc = b.coordinates
|
|
14
|
+
if (ac.size != bc.size) return false
|
|
15
|
+
for (i in ac.indices) {
|
|
16
|
+
val p = ac[i]
|
|
17
|
+
val q = bc[i]
|
|
18
|
+
if (p.latitude != q.latitude || p.longitude != q.longitude) return false
|
|
19
|
+
}
|
|
20
|
+
return true
|
|
21
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package com.rngooglemapsplus.extensions
|
|
2
|
+
|
|
3
|
+
import com.google.android.gms.maps.model.MapColorScheme
|
|
4
|
+
import com.rngooglemapsplus.RNUserInterfaceStyle
|
|
5
|
+
|
|
6
|
+
fun RNUserInterfaceStyle?.toMapColorScheme(): Int? =
|
|
7
|
+
when (this) {
|
|
8
|
+
RNUserInterfaceStyle.LIGHT -> MapColorScheme.LIGHT
|
|
9
|
+
RNUserInterfaceStyle.DARK -> MapColorScheme.DARK
|
|
10
|
+
RNUserInterfaceStyle.DEFAULT -> MapColorScheme.FOLLOW_SYSTEM
|
|
11
|
+
null -> null
|
|
12
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
package com.rngooglemapsplus.extensions
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import com.google.android.gms.common.ConnectionResult
|
|
5
|
+
import com.google.android.gms.common.GoogleApiAvailability
|
|
6
|
+
import com.google.android.gms.common.api.ApiException
|
|
7
|
+
import com.google.android.gms.common.api.CommonStatusCodes
|
|
8
|
+
import com.google.android.gms.location.LocationSettingsStatusCodes
|
|
9
|
+
import com.rngooglemapsplus.RNLocationErrorCode
|
|
10
|
+
|
|
11
|
+
fun Throwable.toLocationErrorCode(context: Context): RNLocationErrorCode {
|
|
12
|
+
return when (this) {
|
|
13
|
+
is SecurityException -> RNLocationErrorCode.PERMISSION_DENIED
|
|
14
|
+
|
|
15
|
+
is ApiException ->
|
|
16
|
+
when (statusCode) {
|
|
17
|
+
CommonStatusCodes.NETWORK_ERROR ->
|
|
18
|
+
RNLocationErrorCode.POSITION_UNAVAILABLE
|
|
19
|
+
LocationSettingsStatusCodes.RESOLUTION_REQUIRED,
|
|
20
|
+
LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE,
|
|
21
|
+
->
|
|
22
|
+
RNLocationErrorCode.SETTINGS_NOT_SATISFIED
|
|
23
|
+
else ->
|
|
24
|
+
RNLocationErrorCode.INTERNAL_ERROR
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
else -> {
|
|
28
|
+
if (message?.contains("GoogleApi", ignoreCase = true) == true) {
|
|
29
|
+
val gms = GoogleApiAvailability.getInstance()
|
|
30
|
+
val status = gms.isGooglePlayServicesAvailable(context)
|
|
31
|
+
if (status != ConnectionResult.SUCCESS) {
|
|
32
|
+
return RNLocationErrorCode.PLAY_SERVICE_NOT_AVAILABLE
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
RNLocationErrorCode.INTERNAL_ERROR
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|