diff --git a/lib-compose/src/main/java/com/what3words/components/compose/maps/W3WMapManager.kt b/lib-compose/src/main/java/com/what3words/components/compose/maps/W3WMapManager.kt index 9f0009f3..4efa7661 100644 --- a/lib-compose/src/main/java/com/what3words/components/compose/maps/W3WMapManager.kt +++ b/lib-compose/src/main/java/com/what3words/components/compose/maps/W3WMapManager.kt @@ -39,6 +39,7 @@ import com.what3words.components.compose.maps.state.camera.W3WGoogleCameraState import com.what3words.components.compose.maps.state.camera.W3WMapboxCameraState import com.what3words.components.compose.maps.utils.angleOfPoints import com.what3words.core.datasource.text.W3WTextDataSource +import com.what3words.core.types.common.W3WError import com.what3words.core.types.common.W3WResult import com.what3words.core.types.domain.W3WAddress import com.what3words.core.types.domain.W3WSuggestion @@ -265,24 +266,37 @@ class W3WMapManager( * bearing, and tilt. * * @param mapProvider The new [MapProvider] to be set (either [MapProvider.MAPBOX] or [MapProvider.GOOGLE_MAP]). + * @return A [W3WResult] containing either the successfully set [MapProvider] or a failure with an error message. + * */ - fun setMapProvider(mapProvider: MapProvider) { - if (this.mapProvider != mapProvider) { - this.mapProvider = mapProvider - - _mapState.update { currentState -> - currentState.copy( - cameraState = when (mapProvider) { - MapProvider.MAPBOX -> createMapboxCameraState( - _mapState.value.cameraState - ) + fun setMapProvider(mapProvider: MapProvider): W3WResult { + return if (this.mapProvider != mapProvider) { + val cameraState = _mapState.value.cameraState + if(cameraState == null) { + W3WResult.Failure(W3WError("Map provider change failed because the camera state is null")) + } else if(!cameraState.isCameraMoving) { + this.mapProvider = mapProvider + + _mapState.update { currentState -> + currentState.copy( + cameraState = when (mapProvider) { + MapProvider.MAPBOX -> createMapboxCameraState( + _mapState.value.cameraState + ) + + MapProvider.GOOGLE_MAP -> createGoogleCameraState( + _mapState.value.cameraState + ) + } + ) + } - MapProvider.GOOGLE_MAP -> createGoogleCameraState( - _mapState.value.cameraState - ) - } - ) + W3WResult.Success(mapProvider) + } else { + W3WResult.Failure(W3WError("Map provider change failed because the camera is moving")) } + } else { + W3WResult.Failure(W3WError("Map provider not changed")) } }