Skip to content

Commit 6208b8e

Browse files
authored
Merge pull request #108 from what3words/task/MT-7354-Crash-incase-change-map-provider-GG-MapBox-and-camera-is-moving
Task/mt 7354 crash incase change map provider gg map box and camera is moving
2 parents fa20021 + 63fbf6e commit 6208b8e

File tree

1 file changed

+29
-15
lines changed
  • lib-compose/src/main/java/com/what3words/components/compose/maps

1 file changed

+29
-15
lines changed

lib-compose/src/main/java/com/what3words/components/compose/maps/W3WMapManager.kt

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import com.what3words.components.compose.maps.state.camera.W3WGoogleCameraState
3939
import com.what3words.components.compose.maps.state.camera.W3WMapboxCameraState
4040
import com.what3words.components.compose.maps.utils.angleOfPoints
4141
import com.what3words.core.datasource.text.W3WTextDataSource
42+
import com.what3words.core.types.common.W3WError
4243
import com.what3words.core.types.common.W3WResult
4344
import com.what3words.core.types.domain.W3WAddress
4445
import com.what3words.core.types.domain.W3WSuggestion
@@ -265,24 +266,37 @@ class W3WMapManager(
265266
* bearing, and tilt.
266267
*
267268
* @param mapProvider The new [MapProvider] to be set (either [MapProvider.MAPBOX] or [MapProvider.GOOGLE_MAP]).
269+
* @return A [W3WResult] containing either the successfully set [MapProvider] or a failure with an error message.
270+
*
268271
*/
269-
fun setMapProvider(mapProvider: MapProvider) {
270-
if (this.mapProvider != mapProvider) {
271-
this.mapProvider = mapProvider
272-
273-
_mapState.update { currentState ->
274-
currentState.copy(
275-
cameraState = when (mapProvider) {
276-
MapProvider.MAPBOX -> createMapboxCameraState(
277-
_mapState.value.cameraState
278-
)
272+
fun setMapProvider(mapProvider: MapProvider): W3WResult<MapProvider> {
273+
return if (this.mapProvider != mapProvider) {
274+
val cameraState = _mapState.value.cameraState
275+
if(cameraState == null) {
276+
W3WResult.Failure(W3WError("Map provider change failed because the camera state is null"))
277+
} else if(!cameraState.isCameraMoving) {
278+
this.mapProvider = mapProvider
279+
280+
_mapState.update { currentState ->
281+
currentState.copy(
282+
cameraState = when (mapProvider) {
283+
MapProvider.MAPBOX -> createMapboxCameraState(
284+
_mapState.value.cameraState
285+
)
286+
287+
MapProvider.GOOGLE_MAP -> createGoogleCameraState(
288+
_mapState.value.cameraState
289+
)
290+
}
291+
)
292+
}
279293

280-
MapProvider.GOOGLE_MAP -> createGoogleCameraState(
281-
_mapState.value.cameraState
282-
)
283-
}
284-
)
294+
W3WResult.Success(mapProvider)
295+
} else {
296+
W3WResult.Failure(W3WError("Map provider change failed because the camera is moving"))
285297
}
298+
} else {
299+
W3WResult.Failure(W3WError("Map provider not changed"))
286300
}
287301
}
288302

0 commit comments

Comments
 (0)