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.
Files changed (107) hide show
  1. package/README.md +127 -11
  2. package/android/src/main/java/com/rngooglemapsplus/GoogleMapsViewImpl.kt +359 -139
  3. package/android/src/main/java/com/rngooglemapsplus/LocationHandler.kt +44 -44
  4. package/android/src/main/java/com/rngooglemapsplus/MapCircleBuilder.kt +19 -0
  5. package/android/src/main/java/com/rngooglemapsplus/{MapMarker.kt → MapMarkerBuilder.kt} +7 -6
  6. package/android/src/main/java/com/rngooglemapsplus/{MapPolygon.kt → MapPolygonBuilder.kt} +4 -18
  7. package/android/src/main/java/com/rngooglemapsplus/{MapPolyline.kt → MapPolylineBuilder.kt.kt} +4 -19
  8. package/android/src/main/java/com/rngooglemapsplus/RNGoogleMapsPlusView.kt +145 -129
  9. package/android/src/main/java/com/rngooglemapsplus/extensions/RNCameraExtension.kt +19 -0
  10. package/android/src/main/java/com/rngooglemapsplus/extensions/RNLocationPriorityExtension.kt +12 -0
  11. package/android/src/main/java/com/rngooglemapsplus/extensions/RNMapCircleExtension.kt +14 -0
  12. package/android/src/main/java/com/rngooglemapsplus/extensions/RNPolygonExtension.kt +20 -0
  13. package/android/src/main/java/com/rngooglemapsplus/extensions/RNPolylineExtension.kt +21 -0
  14. package/android/src/main/java/com/rngooglemapsplus/extensions/RNUserInterfaceExtension.kt +12 -0
  15. package/android/src/main/java/com/rngooglemapsplus/{Color.kt → extensions/StringExtension.kt} +1 -1
  16. package/android/src/main/java/com/rngooglemapsplus/extensions/ThrowableExtension.kt +38 -0
  17. package/ios/GoogleMapViewImpl.swift +348 -150
  18. package/ios/LocationHandler.swift +29 -69
  19. package/ios/MapCircleBuilder.swift +20 -0
  20. package/ios/{MapMarker.swift → MapMarkerBuilder.swift} +11 -42
  21. package/ios/MapPolygonBuilder.swift +20 -0
  22. package/ios/MapPolylineBuilder.swift +24 -0
  23. package/ios/PermissionHandler.swift +1 -1
  24. package/ios/RNGoogleMapsPlusModule.swift +1 -1
  25. package/ios/RNGoogleMapsPlusView.swift +159 -168
  26. package/ios/extensions/RNCamera+Extension.swift +22 -0
  27. package/ios/extensions/RNCircle+Extension.swift +24 -0
  28. package/ios/extensions/RNIOSLocationAccuracy+Extensions.swift +19 -0
  29. package/ios/extensions/RNMarker+Extension.swift +24 -0
  30. package/ios/{MapPolygon.swift → extensions/RNPolygon+Extension.swift.swift} +7 -23
  31. package/ios/extensions/RNPolyline+Extension.swift.swift +62 -0
  32. package/ios/extensions/RNUserInterface+Extension.swift +16 -0
  33. package/ios/{Color.swift → extensions/String+Extensions.swift} +20 -20
  34. package/lib/module/types.js +14 -0
  35. package/lib/module/types.js.map +1 -1
  36. package/lib/typescript/src/RNGoogleMapsPlusView.nitro.d.ts +21 -12
  37. package/lib/typescript/src/RNGoogleMapsPlusView.nitro.d.ts.map +1 -1
  38. package/lib/typescript/src/types.d.ts +59 -3
  39. package/lib/typescript/src/types.d.ts.map +1 -1
  40. package/nitrogen/generated/android/c++/JHybridRNGoogleMapsPlusViewSpec.cpp +233 -69
  41. package/nitrogen/generated/android/c++/JHybridRNGoogleMapsPlusViewSpec.hpp +40 -22
  42. package/nitrogen/generated/android/c++/JRNAndroidLocationConfig.hpp +63 -0
  43. package/nitrogen/generated/android/c++/JRNAndroidLocationPriority.hpp +65 -0
  44. package/nitrogen/generated/android/c++/JRNCircle.hpp +84 -0
  45. package/nitrogen/generated/android/c++/JRNIOSLocationAccuracy.hpp +65 -0
  46. package/nitrogen/generated/android/c++/JRNIOSLocationConfig.hpp +59 -0
  47. package/nitrogen/generated/android/c++/JRNInitialProps.hpp +66 -0
  48. package/nitrogen/generated/android/c++/JRNLocationConfig.hpp +65 -0
  49. package/nitrogen/generated/android/c++/JRNMapType.hpp +68 -0
  50. package/nitrogen/generated/android/c++/JRNMapUiSettings.hpp +93 -0
  51. package/nitrogen/generated/android/c++/JRNMarker.hpp +4 -4
  52. package/nitrogen/generated/android/c++/JRNPolygon.hpp +8 -4
  53. package/nitrogen/generated/android/c++/JRNPolyline.hpp +8 -4
  54. package/nitrogen/generated/android/c++/views/JHybridRNGoogleMapsPlusViewStateUpdater.cpp +40 -4
  55. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/HybridRNGoogleMapsPlusViewSpec.kt +89 -11
  56. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNAndroidLocationConfig.kt +35 -0
  57. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNAndroidLocationPriority.kt +23 -0
  58. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNCircle.kt +50 -0
  59. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNIOSLocationAccuracy.kt +23 -0
  60. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNIOSLocationConfig.kt +32 -0
  61. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNInitialProps.kt +35 -0
  62. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNLocationConfig.kt +32 -0
  63. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNMapType.kt +24 -0
  64. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNMapUiSettings.kt +59 -0
  65. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNMarker.kt +1 -1
  66. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNPolygon.kt +4 -1
  67. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNPolyline.kt +4 -1
  68. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/views/HybridRNGoogleMapsPlusViewManager.kt +7 -1
  69. package/nitrogen/generated/ios/RNGoogleMapsPlus-Swift-Cxx-Bridge.hpp +296 -45
  70. package/nitrogen/generated/ios/RNGoogleMapsPlus-Swift-Cxx-Umbrella.hpp +27 -0
  71. package/nitrogen/generated/ios/c++/HybridRNGoogleMapsPlusViewSpecSwift.hpp +131 -37
  72. package/nitrogen/generated/ios/c++/views/HybridRNGoogleMapsPlusViewComponent.mm +61 -16
  73. package/nitrogen/generated/ios/swift/HybridRNGoogleMapsPlusViewSpec.swift +20 -11
  74. package/nitrogen/generated/ios/swift/HybridRNGoogleMapsPlusViewSpec_cxx.swift +378 -45
  75. package/nitrogen/generated/ios/swift/RNAndroidLocationConfig.swift +93 -0
  76. package/nitrogen/generated/ios/swift/RNAndroidLocationPriority.swift +48 -0
  77. package/nitrogen/generated/ios/swift/RNCircle.swift +198 -0
  78. package/nitrogen/generated/ios/swift/RNIOSLocationAccuracy.swift +48 -0
  79. package/nitrogen/generated/ios/swift/RNIOSLocationConfig.swift +70 -0
  80. package/nitrogen/generated/ios/swift/RNInitialProps.swift +107 -0
  81. package/nitrogen/generated/ios/swift/RNLocationConfig.swift +84 -0
  82. package/nitrogen/generated/ios/swift/RNMapType.swift +52 -0
  83. package/nitrogen/generated/ios/swift/RNMapUiSettings.swift +277 -0
  84. package/nitrogen/generated/ios/swift/RNMarker.swift +17 -5
  85. package/nitrogen/generated/ios/swift/RNPolygon.swift +40 -5
  86. package/nitrogen/generated/ios/swift/RNPolyline.swift +40 -5
  87. package/nitrogen/generated/shared/c++/HybridRNGoogleMapsPlusViewSpec.cpp +20 -2
  88. package/nitrogen/generated/shared/c++/HybridRNGoogleMapsPlusViewSpec.hpp +59 -26
  89. package/nitrogen/generated/shared/c++/RNAndroidLocationConfig.hpp +77 -0
  90. package/nitrogen/generated/shared/c++/RNAndroidLocationPriority.hpp +64 -0
  91. package/nitrogen/generated/shared/c++/RNCircle.hpp +98 -0
  92. package/nitrogen/generated/shared/c++/RNIOSLocationAccuracy.hpp +64 -0
  93. package/nitrogen/generated/shared/c++/RNIOSLocationConfig.hpp +73 -0
  94. package/nitrogen/generated/shared/c++/RNInitialProps.hpp +78 -0
  95. package/nitrogen/generated/shared/c++/RNLocationConfig.hpp +76 -0
  96. package/nitrogen/generated/shared/c++/RNMapType.hpp +88 -0
  97. package/nitrogen/generated/shared/c++/RNMapUiSettings.hpp +107 -0
  98. package/nitrogen/generated/shared/c++/RNMarker.hpp +6 -6
  99. package/nitrogen/generated/shared/c++/RNPolygon.hpp +10 -6
  100. package/nitrogen/generated/shared/c++/RNPolyline.hpp +10 -6
  101. package/nitrogen/generated/shared/c++/views/HybridRNGoogleMapsPlusViewComponent.cpp +138 -30
  102. package/nitrogen/generated/shared/c++/views/HybridRNGoogleMapsPlusViewComponent.hpp +27 -13
  103. package/nitrogen/generated/shared/json/RNGoogleMapsPlusViewConfig.json +10 -1
  104. package/package.json +5 -5
  105. package/src/RNGoogleMapsPlusView.nitro.ts +25 -11
  106. package/src/types.ts +67 -3
  107. 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.CameraPosition
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
- private val markerOptions = MarkerOptions()
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, markerOptions)
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
- private val polylineOptions = MapPolylineOptions()
26
- private val polygonOptions = MapPolygonOptions()
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 customMapStyle: String
41
- get() = currentCustomMapStyle
63
+ override var indoorEnabled: Boolean? = null
42
64
  set(value) {
43
- currentCustomMapStyle = value
44
- view.customMapStyle = MapStyleOptions(value)
65
+ view.indoorEnabled = value
45
66
  }
46
67
 
47
- override var initialCamera: RNCamera
48
- get() = mapCameraPotionToCamera(view.initialCamera)
68
+ override var customMapStyle: String? = null
49
69
  set(value) {
50
- view.initialCamera = mapCameraToCameraPosition(value)
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 = userInterfaceStyleToMapColorScheme(value)
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 markers: Array<RNMarker> = emptyArray()
96
+ override var mapType: RNMapType? = null
78
97
  set(value) {
79
- val prevById = field.associateBy { it.id }
80
- val nextById = value.associateBy { it.id }
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
- markerOptions.cancelIconJob(id)
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
- markerOptions.buildIconAsync(id, next) { icon ->
116
+ markerBuilder.buildIconAsync(id, next) { icon ->
91
117
  view.addMarker(
92
118
  id,
93
- markerOptions.build(next, icon),
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
- if (prev.coordinate != next.coordinate) {
100
- m.position =
101
- com.google.android.gms.maps.model.LatLng(
102
- next.coordinate.latitude,
103
- next.coordinate.longitude,
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
- markerOptions.buildIconAsync(id, next) { icon ->
135
+ markerBuilder.buildIconAsync(id, next) { icon ->
111
136
  m.setIcon(icon)
112
137
  }
113
138
  }
114
- if (prev.anchor != next.anchor) {
115
- m.setAnchor(
116
- (next.anchor?.x ?: 0.5).toFloat(),
117
- (next.anchor?.y ?: 0.5).toFloat(),
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> = emptyArray()
150
+ override var polylines: Array<RNPolyline>? = null
128
151
  set(value) {
129
- val prevById = field.associateBy { it.id }
130
- val nextById = value.associateBy { it.id }
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, polylineOptions.buildPolylineOptions(next))
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
- com.google.android.gms.maps.model
146
- .LatLng(it.latitude, it.longitude)
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 = polylineOptions.mapLineCap(it)
173
+ val cap = polylineBuilder.mapLineCap(it)
151
174
  gms.startCap = cap
152
175
  gms.endCap = cap
153
176
  }
154
- next.lineJoin?.let { gms.jointType = polylineOptions.mapLineJoin(it) }
177
+ next.lineJoin?.let { gms.jointType = polylineBuilder.mapLineJoin(it) }
155
178
  next.color?.let { gms.color = it.toColor() }
156
- gms.zIndex = next.zIndex.toFloat()
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> = emptyArray()
187
+ override var polygons: Array<RNPolygon>? = null
165
188
  set(value) {
166
- val prevById = field.associateBy { it.id }
167
- val nextById = value.associateBy { it.id }
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, polygonOptions.buildPolygonOptions(next))
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 = next.zIndex.toFloat()
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 onMapError: ((RNMapErrorCode) -> Unit)?
197
- get() = view.onMapError
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 onCameraChangeStart: ((RNRegion, RNCamera, Boolean) -> Unit)?
232
- get() = view.onCameraChangeStart
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
+ }
@@ -1,4 +1,4 @@
1
- package com.rngooglemapsplus
1
+ package com.rngooglemapsplus.extensions
2
2
 
3
3
  import android.graphics.Color
4
4
  import androidx.core.graphics.toColorInt
@@ -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
+ }