@@ -39,6 +39,7 @@ import com.what3words.components.compose.maps.state.camera.W3WGoogleCameraState
3939import com.what3words.components.compose.maps.state.camera.W3WMapboxCameraState
4040import com.what3words.components.compose.maps.utils.angleOfPoints
4141import com.what3words.core.datasource.text.W3WTextDataSource
42+ import com.what3words.core.types.common.W3WError
4243import com.what3words.core.types.common.W3WResult
4344import com.what3words.core.types.domain.W3WAddress
4445import 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