From 6d23e17335b88dbb6855a826fb8ba3a0e18485c3 Mon Sep 17 00:00:00 2001 From: Masashi Katsumata Date: Fri, 15 Aug 2025 22:55:53 +0900 Subject: [PATCH 1/4] Fix: use setXXX() callback instead of setting callback to properties directly --- .../core/controller/MapViewController.kt | 248 ++++-------------- .../com/mapconductor/arcgis/ArcGISMapView.kt | 16 +- .../arcgis/ArcGISMapViewController.kt | 16 +- .../mapconductor/googlemaps/GoogleMapView.kt | 16 +- .../googlemaps/GoogleMapViewController.kt | 20 +- .../java/com/mapconductor/here/HereMapView.kt | 18 +- .../here/HereMapViewController.kt | 14 +- .../com/mapconductor/mapbox/MapboxMapView.kt | 18 +- .../mapbox/MapboxMapViewController.kt | 16 +- 9 files changed, 113 insertions(+), 269 deletions(-) diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/controller/MapViewController.kt b/mapconductor-core/src/main/java/com/mapconductor/core/controller/MapViewController.kt index 712be76c..0d87ab6e 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/controller/MapViewController.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/controller/MapViewController.kt @@ -4,9 +4,6 @@ import com.mapconductor.core.circle.CircleOverlayManager import com.mapconductor.core.circle.CircleRenderer import com.mapconductor.core.circle.CircleState import com.mapconductor.core.circle.OnCircleEventHandler -import com.mapconductor.core.features.IGeoPoint -import com.mapconductor.core.geocell.HexCell -import com.mapconductor.core.geocell.HexCoord import com.mapconductor.core.geocell.HexGeocell import com.mapconductor.core.map.MapViewHolder import com.mapconductor.core.map.OnCameraMoveHandler @@ -46,26 +43,22 @@ interface MapViewController setCameraMoveListener(listener: OnCameraMoveHandler?) + fun setMapClickListener(listener: OnMapEventHandler?) + fun setMapLongClickListener(listener: OnMapEventHandler?) + fun setMarkerClickListener(listener: OnMarkerEventHandler?) + fun setMarkerDragStartListener(listener: OnMarkerEventHandler?) + fun setMarkerDragListener(listener: OnMarkerEventHandler?) + fun setMarkerDragEndListener(listener: OnMarkerEventHandler?) + fun setCircleClickListener(listener: OnCircleEventHandler?) + fun setPolylineClickListener(listener: OnPolylineEventHandler?) + fun setOnMarkerAnimationStart(listener: OnMarkerEventHandler?) fun setOnMarkerAnimationEnd(listener: OnMarkerEventHandler?) } typealias MapViewControllerAlias = MapViewController<*, *, *, *> -data class SearchRangeAnalysis( - val clickPosition: IGeoPoint, - val zoom: Double, - val tolerancePixels: Double, - val toleranceMeters: Double, - val clickedCell: HexCell, - val hexSideLength: Double, - val hexDistance: Double, - val searchRadiusHexUnits: Int, - val searchCells: List, - val outlineCells: List, - val markersInRange: List, -) - abstract class BaseMapViewController : MapViewController { abstract val markerRenderer: MarkerRenderer @@ -120,18 +113,43 @@ abstract class BaseMapViewController - var cameraMoveListener: (OnCameraMoveHandler)? = null - var mapClickListener: OnMapEventHandler? = null - var mapLongClickListener: OnMapEventHandler? = null - var markerClickListener: OnMarkerEventHandler? = null - var markerDragStartListener: OnMarkerEventHandler? = null - var markerDragListener: OnMarkerEventHandler? = null - var markerDragEndListener: OnMarkerEventHandler? = null - var circleClickListener: OnCircleEventHandler? = null - var polylineClickListener: OnPolylineEventHandler? = null + protected var _cameraMoveListener: (OnCameraMoveHandler)? = null + protected var _mapClickListener: OnMapEventHandler? = null + protected var _mapLongClickListener: OnMapEventHandler? = null + protected var _markerClickListener: OnMarkerEventHandler? = null + protected var _markerDragStartListener: OnMarkerEventHandler? = null + protected var _markerDragListener: OnMarkerEventHandler? = null + protected var _markerDragEndListener: OnMarkerEventHandler? = null + protected var _circleClickListener: OnCircleEventHandler? = null + protected var _polylineClickListener: OnPolylineEventHandler? = null abstract fun setupListeners() + override fun setMapClickListener(listener: OnMapEventHandler?) { + this._mapClickListener = listener + } + override fun setMapLongClickListener(listener: OnMapEventHandler?) { + this._mapClickListener = listener + } + override fun setMarkerClickListener(listener: OnMarkerEventHandler?) { + this._markerClickListener = listener + } + override fun setMarkerDragStartListener(listener: OnMarkerEventHandler?) { + this._markerDragStartListener = listener + } + override fun setMarkerDragListener(listener: OnMarkerEventHandler?) { + this._markerDragListener = listener + } + override fun setMarkerDragEndListener(listener: OnMarkerEventHandler?) { + this._markerDragEndListener = listener + } + override fun setCircleClickListener(listener: OnCircleEventHandler?) { + this._circleClickListener = listener + } + override fun setPolylineClickListener(listener: OnPolylineEventHandler?) { + this._polylineClickListener = listener + } + override fun setOnMarkerAnimationStart(listener: OnMarkerEventHandler?) = markerRenderer .setOnMarkerAnimationStart(listener) @@ -139,182 +157,4 @@ abstract class BaseMapViewController, -// toleranceMeters: Double, -// zoom: Double, -// ): List { -// val cellSet = searchCells.toSet() -// val markersInRange = mutableListOf() -// -// markerOverlayManager.markerManager.allEntities().forEach { markerEntity -> -// val markerCell = hexGeocell.latLngToHexCell(markerEntity.state.position, zoom) -// -// if (markerCell.coord in cellSet) { -// val distance = haversineDistance(clickPosition, markerEntity.state.position) -// if (distance <= toleranceMeters) { -// markersInRange.add(markerEntity.state) -// } -// } -// } -// -// return markersInRange -// } - -// /** -// * 検索範囲の外郭セルを特定 -// */ -// protected fun findOutlineCells(searchCells: List): List { -// val cellSet = searchCells.toSet() -// -// return searchCells.filter { cell -> -// // 近隣セルのいずれかが検索範囲外なら、これは外郭セル -// cell.neighbors().any { neighbor -> -// neighbor !in cellSet -// } -// } -// } - -// /** -// * 円形の近似ポイントを生成 -// */ -// protected fun createCirclePoints( -// center: IGeoPoint, -// radiusMeters: Double, -// numPoints: Int = 32, -// ): List { -// val points = mutableListOf() -// val earthRadius = 6371000.0 // 地球半径(メートル) -// -// for (i in 0 until numPoints) { -// val angle = 2.0 * kotlin.math.PI * i / numPoints -// val deltaLat = radiusMeters * kotlin.math.cos(angle) / earthRadius * 180.0 / kotlin.math.PI -// val deltaLng = -// radiusMeters * kotlin.math.sin(angle) / earthRadius * 180.0 / kotlin.math.PI / -// kotlin.math.cos(center.latitude * kotlin.math.PI / 180.0) -// -// points.add( -// object : IGeoPoint { -// override val latitude = center.latitude + deltaLat -// override val longitude = center.longitude + deltaLng -// override val altitude = center.altitude -// }, -// ) -// } -// -// // 円を閉じる -// if (points.isNotEmpty()) { -// points.add(points[0]) -// } -// -// return points -// } - -// protected fun drawDistanceCircles(analysis: SearchRangeAnalysis) { -// // 距離サークルの近似(正n角形として) -// val circlePoints = -// createCirclePoints( -// center = analysis.clickPosition, -// radiusMeters = analysis.toleranceMeters, -// numPoints = 32, -// ) -// drawPolyline(circlePoints) -// } -// -// /** -// * 各種可視化モード -// */ -// protected fun drawClickedCell(analysis: SearchRangeAnalysis) { -// val points = -// hexGeocell.hexToPolygonLatLng( -// coord = analysis.clickedCell.coord, -// latHint = analysis.clickPosition.latitude, -// zoom = analysis.zoom, -// ) -// drawPolyline(points) -// } - -// protected fun drawFullSearchRange(analysis: SearchRangeAnalysis) { -// val allPoints = mutableListOf() -// -// analysis.searchCells.take(50).forEach { coord -> -// // パフォーマンス制限 -// val cellPoints = -// hexGeocell.hexToPolygonLatLng( -// coord, -// analysis.clickPosition.latitude, -// analysis.zoom, -// ) -// allPoints.addAll(cellPoints) -// allPoints.add(cellPoints[0]) // 閉じる -// } -// -// if (allPoints.isNotEmpty()) { -// drawPolyline(allPoints) -// } -// } -// -// protected fun drawSearchOutline(analysis: SearchRangeAnalysis) { -// val outlinePoints = mutableListOf() -// -// analysis.outlineCells.forEach { coord -> -// val cellPoints = -// hexGeocell.hexToPolygonLatLng( -// coord, -// analysis.clickPosition.latitude, -// analysis.zoom, -// ) -// outlinePoints.addAll(cellPoints) -// } -// -// if (outlinePoints.isNotEmpty()) { -// drawPolyline(outlinePoints) -// } -// } } diff --git a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapView.kt b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapView.kt index 8f2d4af1..0a626439 100644 --- a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapView.kt +++ b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapView.kt @@ -61,14 +61,14 @@ fun ArcGISMapView( state.controller = controller controller.holder.mapView.onCreate(owner) controller.holder.mapView.onResume(owner) - controller.cameraMoveListener = state::OnCameraChange - controller.mapClickListener = onMapClick - controller.markerClickListener = onMarkerClick - controller.markerDragStartListener = onMarkerDragStart - controller.markerDragListener = onMarkerDrag - controller.markerDragEndListener = onMarkerDragEnd - controller.circleClickListener = onCircleClick - controller.polylineClickListener = onPolylineClick + controller.setCameraMoveListener(state::OnCameraChange) + controller.setMapClickListener(onMapClick) + controller.setMarkerClickListener(onMarkerClick) + controller.setMarkerDragStartListener(onMarkerDragStart) + controller.setMarkerDragListener(onMarkerDrag) + controller.setMarkerDragEndListener(onMarkerDragEnd) + controller.setCircleClickListener(onCircleClick) + controller.setPolylineClickListener(onPolylineClick) controller.setOnMarkerAnimationStart(onMarkerAnimateStart) controller.setOnMarkerAnimationEnd(onMarkerAnimateEnd) diff --git a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt index 448442ac..37268b6b 100644 --- a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt +++ b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt @@ -209,7 +209,7 @@ class ArcGISMapViewController( } private fun onViewpointChange() { - this.cameraMoveListener?.invoke(holder.map.getCurrentViewpointCamera()) + this._cameraMoveListener?.invoke(holder.map.getCurrentViewpointCamera()) } private suspend fun onMapPan(event: PanChangeEvent) { @@ -219,7 +219,7 @@ class ArcGISMapViewController( val position = point.toGeoPoint() it.graphic.geometry = point it.state.position = position - markerDragListener?.invoke(it.state) + _markerDragListener?.invoke(it.state) } } @@ -234,7 +234,7 @@ class ArcGISMapViewController( // Restore the recomposition for the position property markerRenderer.setDraggingState(it.state, false) - markerDragEndListener?.invoke(it.state) + _markerDragEndListener?.invoke(it.state) with(holder.map) { interactionOptions.isPanEnabled = true interactionOptions.isRotateEnabled = true @@ -262,7 +262,7 @@ class ArcGISMapViewController( val graphics = identifyResult.getOrNull()?.graphics val graphic = graphics?.firstOrNull() if (graphic == null) { - mapLongClickListener?.invoke(position) + _mapLongClickListener?.invoke(position) return } val markerId = (graphic.attributes.get("id") as? String) ?: return @@ -282,7 +282,7 @@ class ArcGISMapViewController( // Suppress the recomposition for the position property markerRenderer.setDraggingState(state, true) - markerDragStartListener?.invoke(state) + _markerDragStartListener?.invoke(state) } private suspend fun onMapTap(event: SingleTapConfirmedEvent) { @@ -302,7 +302,7 @@ class ArcGISMapViewController( zoom = holder.map.getCurrentViewpointCamera().getZoomLevel(), ) if (markerEntity != null) { - markerClickListener?.invoke(markerEntity.state) + _markerClickListener?.invoke(markerEntity.state) return } @@ -313,11 +313,11 @@ class ArcGISMapViewController( state = circleEntity.state, position = touchPosition, ) - circleClickListener?.invoke(event) + _circleClickListener?.invoke(event) } holder.map.screenToLocation(screenPoint).getOrNull()?.also { - mapClickListener?.invoke(it.toGeoPoint()) + _mapClickListener?.invoke(it.toGeoPoint()) } } diff --git a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt index e371ddf6..f0b2d022 100644 --- a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt +++ b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt @@ -76,15 +76,15 @@ fun GoogleMapsView( ) (state as? GoogleMapViewState)?.let { mapViewState -> mapViewState.controller = controller - controller.cameraMoveListener = mapViewState::OnCameraChange + controller.setCameraMoveListener(mapViewState::OnCameraChange) } - controller.mapClickListener = onMapClick - controller.markerClickListener = onMarkerClick - controller.markerDragStartListener = onMarkerDragStart - controller.markerDragListener = onMarkerDrag - controller.markerDragEndListener = onMarkerDragEnd - controller.circleClickListener = onCircleClick - controller.polylineClickListener = onPolylineClick + controller.setMapClickListener(onMapClick) + controller.setMarkerClickListener(onMarkerClick) + controller.setMarkerDragStartListener(onMarkerDragStart) + controller.setMarkerDragListener(onMarkerDrag) + controller.setMarkerDragEndListener(onMarkerDragEnd) + controller.setCircleClickListener(onCircleClick) + controller.setPolylineClickListener(onPolylineClick) controller.setOnMarkerAnimationStart(onMarkerAnimateStart) controller.setOnMarkerAnimationEnd(onMarkerAnimateEnd) diff --git a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt index 083b16ca..71db7abd 100644 --- a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt +++ b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt @@ -218,25 +218,25 @@ class GoogleMapViewController( override suspend fun updatePolyline(state: PolylineState) = polylineOverlayManager.updatePolyline(state) override fun onCameraMove() { - cameraMoveListener?.let { + _cameraMoveListener?.let { coroutine.launch { it(holder.map.cameraPosition) } } } override fun onCameraIdle() { - cameraMoveListener?.let { + _cameraMoveListener?.let { coroutine.launch { it(holder.map.cameraPosition) } } } override fun onCameraMoveStarted(p0: Int) { - cameraMoveListener?.let { + _cameraMoveListener?.let { coroutine.launch { it(holder.map.cameraPosition) } } } override fun onCameraMoveCanceled() { - cameraMoveListener?.let { + _cameraMoveListener?.let { coroutine.launch { it(holder.map.cameraPosition) } } } @@ -245,7 +245,7 @@ class GoogleMapViewController( val key = marker.tag?.toString() ?: return true val state = markerOverlayManager.getMarkerState(key) ?: return true if (!state.clickable) return true - markerClickListener?.let { + _markerClickListener?.let { coroutine.launch { it(state) } @@ -262,11 +262,11 @@ class GoogleMapViewController( state = entity.state, position = touchPosition, ) - circleClickListener?.invoke(event) + _circleClickListener?.invoke(event) return } - mapClickListener?.let { + _mapClickListener?.let { coroutine.launch { it(position.toGeoPoint()) } } } @@ -283,14 +283,14 @@ class GoogleMapViewController( markerRenderer.setDraggingState(state, true) state.position = marker.position.toGeoPoint() - markerDragListener?.invoke(state) + _markerDragListener?.invoke(state) } } override fun onMarkerDragEnd(marker: Marker) { this.getMarkerStateFrom(marker)?.also { state -> state.position = marker.position.toGeoPoint() - markerDragEndListener?.invoke(state) + _markerDragEndListener?.invoke(state) } } @@ -301,7 +301,7 @@ class GoogleMapViewController( // Restore the recomposition for the position property markerRenderer.setDraggingState(state, false) - markerDragStartListener?.invoke(state) + _markerDragStartListener?.invoke(state) } } } diff --git a/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapView.kt b/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapView.kt index 7f95a575..b4dcb21c 100644 --- a/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapView.kt +++ b/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapView.kt @@ -68,15 +68,17 @@ fun HereMapView( (state as? HereMapViewState)?.let { mapViewState -> mapViewState.controller = controller - controller.cameraMoveListener = mapViewState::OnCameraChange + controller.setCameraMoveListener(mapViewState::OnCameraChange) } - controller.mapClickListener = onMapClick - controller.markerClickListener = onMarkerClick - controller.markerDragStartListener = onMarkerDragStart - controller.markerDragListener = onMarkerDrag - controller.markerDragEndListener = onMarkerDragEnd - controller.circleClickListener = onCircleClick - controller.polylineClickListener = onPolylineClick + controller.setMapClickListener(onMapClick) + controller.setMarkerClickListener(onMarkerClick) + controller.setMarkerDragStartListener(onMarkerDragStart) + controller.setMarkerDragListener(onMarkerDrag) + controller.setMarkerDragEndListener(onMarkerDragEnd) + controller.setCircleClickListener(onCircleClick) + controller.setPolylineClickListener(onPolylineClick) + controller.setOnMarkerAnimationStart(onMarkerAnimateStart) + controller.setOnMarkerAnimationEnd(onMarkerAnimateEnd) controller.setOnMarkerAnimationStart(onMarkerAnimateStart) controller.setOnMarkerAnimationEnd(onMarkerAnimateEnd) diff --git a/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewController.kt b/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewController.kt index da0c8892..6e96481c 100644 --- a/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewController.kt +++ b/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewController.kt @@ -252,7 +252,7 @@ class HereMapViewController( cameraState.zoomLevel - ZOOM_ADJUST_VALUE, ) - cameraMoveListener?.invoke(correctCameraState) + _cameraMoveListener?.invoke(correctCameraState) } override fun onTap(point: Point2D) { @@ -269,7 +269,7 @@ class HereMapViewController( zoom = zoom, ) if (entity != null) { - markerClickListener?.invoke(entity.state) + _markerClickListener?.invoke(entity.state) return } @@ -279,12 +279,12 @@ class HereMapViewController( state = entity.state, position = touchPosition, ) - circleClickListener?.invoke(event) + _circleClickListener?.invoke(event) return } // If no overlay is processed, process the tap as onMapClick - mapClickListener?.let { it(touchPosition) } + _mapClickListener?.let { it(touchPosition) } } override fun onLongPress( @@ -313,7 +313,7 @@ class HereMapViewController( // Suppress the recomposition for the position property markerRenderer.setDraggingState(entity.state, true) - markerDragStartListener?.invoke(entity.state) + _markerDragStartListener?.invoke(entity.state) } GestureState.UPDATE.value -> { @@ -322,7 +322,7 @@ class HereMapViewController( selected.marker.coordinates = coordinates selected.state.position = coordinates.toGeoPoint() } - markerDragListener?.invoke(selected.state) + _markerDragListener?.invoke(selected.state) } } @@ -333,7 +333,7 @@ class HereMapViewController( // Restore the recomposition for the position property markerRenderer.setDraggingState(selected.state, false) - markerDragEndListener?.invoke(selected.state) + _markerDragEndListener?.invoke(selected.state) selectedMarker = null } } diff --git a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapView.kt b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapView.kt index 3d54058a..05fee008 100644 --- a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapView.kt +++ b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapView.kt @@ -67,15 +67,17 @@ fun MapboxMapView( ) (state as? MapboxMapViewState)?.let { mapViewState -> mapViewState.controller = controller - controller.cameraMoveListener = mapViewState::OnCameraChange + controller.setCameraMoveListener(mapViewState::OnCameraChange) } - controller.mapClickListener = onMapClick - controller.markerClickListener = onMarkerClick - controller.markerDragStartListener = onMarkerDragStart - controller.markerDragListener = onMarkerDrag - controller.markerDragEndListener = onMarkerDragEnd - controller.circleClickListener = onCircleClick - controller.polylineClickListener = onPolylineClick + controller.setMapClickListener(onMapClick) + controller.setMarkerClickListener(onMarkerClick) + controller.setMarkerDragStartListener(onMarkerDragStart) + controller.setMarkerDragListener(onMarkerDrag) + controller.setMarkerDragEndListener(onMarkerDragEnd) + controller.setCircleClickListener(onCircleClick) + controller.setPolylineClickListener(onPolylineClick) + controller.setOnMarkerAnimationStart(onMarkerAnimateStart) + controller.setOnMarkerAnimationEnd(onMarkerAnimateEnd) controller.setOnMarkerAnimationStart(onMarkerAnimateStart) controller.setOnMarkerAnimationEnd(onMarkerAnimateEnd) diff --git a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt index 43c06763..d5d31efb 100644 --- a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt +++ b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt @@ -247,7 +247,7 @@ internal class MapboxMapViewController( override suspend fun updateCircle(state: CircleState) = circleOverlayManager.updateCircle(state) override fun run(cameraChanged: CameraChanged) { - cameraMoveListener?.invoke( + _cameraMoveListener?.invoke( CameraState( cameraChanged.cameraState.center, cameraChanged.cameraState.padding, @@ -342,11 +342,11 @@ internal class MapboxMapViewController( markerRenderer.redraw() markerRenderer.drawDragLayer() - markerDragStartListener?.invoke(entity.state) + _markerDragStartListener?.invoke(entity.state) return true } - mapLongClickListener?.invoke(geoPoint) + _mapLongClickListener?.invoke(geoPoint) return true } @@ -359,7 +359,7 @@ internal class MapboxMapViewController( tolerance = ResourceProvider.dpToPx(Settings.Default.tapTolerance), zoom = holder.map.cameraState.zoom, )?.let { - markerClickListener?.invoke(it.state) + _markerClickListener?.invoke(it.state) return true } @@ -370,11 +370,11 @@ internal class MapboxMapViewController( state = circleEntity.state, position = touchPosition, ) - circleClickListener?.invoke(event) + _circleClickListener?.invoke(event) return true } - mapClickListener?.invoke(touchPosition) + _mapClickListener?.invoke(touchPosition) return true } @@ -401,7 +401,7 @@ internal class MapboxMapViewController( markerRenderer.drawDragLayer() } - markerDragListener?.invoke(entity.state) + _markerDragListener?.invoke(entity.state) return true } return false @@ -425,7 +425,7 @@ internal class MapboxMapViewController( markerRenderer.setDraggingState(entity.state, false) // Restore the recomposition for the position property markerOverlayManager.markerManager.registerEntity(entity) markerRenderer.redraw() - markerDragEndListener?.invoke(entity.state) + _markerDragEndListener?.invoke(entity.state) } } } From d834521ab7552a2887af128649e2296789c0cb79 Mon Sep 17 00:00:00 2001 From: Masashi Katsumata Date: Fri, 15 Aug 2025 23:35:46 +0900 Subject: [PATCH 2/4] Fix: KtLint errors --- .../core/controller/MapViewController.kt | 49 ++++++++++++------- .../arcgis/ArcGISMapViewController.kt | 16 +++--- .../googlemaps/GoogleMapViewController.kt | 20 ++++---- .../here/HereMapViewController.kt | 14 +++--- .../mapbox/MapboxMapViewController.kt | 16 +++--- 5 files changed, 65 insertions(+), 50 deletions(-) diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/controller/MapViewController.kt b/mapconductor-core/src/main/java/com/mapconductor/core/controller/MapViewController.kt index 0d87ab6e..a1994a9d 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/controller/MapViewController.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/controller/MapViewController.kt @@ -44,13 +44,21 @@ interface MapViewController setCameraMoveListener(listener: OnCameraMoveHandler?) + fun setMapClickListener(listener: OnMapEventHandler?) + fun setMapLongClickListener(listener: OnMapEventHandler?) + fun setMarkerClickListener(listener: OnMarkerEventHandler?) + fun setMarkerDragStartListener(listener: OnMarkerEventHandler?) + fun setMarkerDragListener(listener: OnMarkerEventHandler?) + fun setMarkerDragEndListener(listener: OnMarkerEventHandler?) + fun setCircleClickListener(listener: OnCircleEventHandler?) + fun setPolylineClickListener(listener: OnPolylineEventHandler?) fun setOnMarkerAnimationStart(listener: OnMarkerEventHandler?) @@ -113,41 +121,48 @@ abstract class BaseMapViewController - protected var _cameraMoveListener: (OnCameraMoveHandler)? = null - protected var _mapClickListener: OnMapEventHandler? = null - protected var _mapLongClickListener: OnMapEventHandler? = null - protected var _markerClickListener: OnMarkerEventHandler? = null - protected var _markerDragStartListener: OnMarkerEventHandler? = null - protected var _markerDragListener: OnMarkerEventHandler? = null - protected var _markerDragEndListener: OnMarkerEventHandler? = null - protected var _circleClickListener: OnCircleEventHandler? = null - protected var _polylineClickListener: OnPolylineEventHandler? = null + protected var cameraMoveListener: (OnCameraMoveHandler)? = null + protected var mapClickListener: OnMapEventHandler? = null + protected var mapLongClickListener: OnMapEventHandler? = null + protected var markerClickListener: OnMarkerEventHandler? = null + protected var markerDragStartListener: OnMarkerEventHandler? = null + protected var markerDragListener: OnMarkerEventHandler? = null + protected var markerDragEndListener: OnMarkerEventHandler? = null + protected var circleClickListener: OnCircleEventHandler? = null + protected var polylineClickListener: OnPolylineEventHandler? = null abstract fun setupListeners() override fun setMapClickListener(listener: OnMapEventHandler?) { - this._mapClickListener = listener + this.mapClickListener = listener } + override fun setMapLongClickListener(listener: OnMapEventHandler?) { - this._mapClickListener = listener + this.mapClickListener = listener } + override fun setMarkerClickListener(listener: OnMarkerEventHandler?) { - this._markerClickListener = listener + this.markerClickListener = listener } + override fun setMarkerDragStartListener(listener: OnMarkerEventHandler?) { - this._markerDragStartListener = listener + this.markerDragStartListener = listener } + override fun setMarkerDragListener(listener: OnMarkerEventHandler?) { - this._markerDragListener = listener + this.markerDragListener = listener } + override fun setMarkerDragEndListener(listener: OnMarkerEventHandler?) { - this._markerDragEndListener = listener + this.markerDragEndListener = listener } + override fun setCircleClickListener(listener: OnCircleEventHandler?) { - this._circleClickListener = listener + this.circleClickListener = listener } + override fun setPolylineClickListener(listener: OnPolylineEventHandler?) { - this._polylineClickListener = listener + this.polylineClickListener = listener } override fun setOnMarkerAnimationStart(listener: OnMarkerEventHandler?) = diff --git a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt index 37268b6b..448442ac 100644 --- a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt +++ b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt @@ -209,7 +209,7 @@ class ArcGISMapViewController( } private fun onViewpointChange() { - this._cameraMoveListener?.invoke(holder.map.getCurrentViewpointCamera()) + this.cameraMoveListener?.invoke(holder.map.getCurrentViewpointCamera()) } private suspend fun onMapPan(event: PanChangeEvent) { @@ -219,7 +219,7 @@ class ArcGISMapViewController( val position = point.toGeoPoint() it.graphic.geometry = point it.state.position = position - _markerDragListener?.invoke(it.state) + markerDragListener?.invoke(it.state) } } @@ -234,7 +234,7 @@ class ArcGISMapViewController( // Restore the recomposition for the position property markerRenderer.setDraggingState(it.state, false) - _markerDragEndListener?.invoke(it.state) + markerDragEndListener?.invoke(it.state) with(holder.map) { interactionOptions.isPanEnabled = true interactionOptions.isRotateEnabled = true @@ -262,7 +262,7 @@ class ArcGISMapViewController( val graphics = identifyResult.getOrNull()?.graphics val graphic = graphics?.firstOrNull() if (graphic == null) { - _mapLongClickListener?.invoke(position) + mapLongClickListener?.invoke(position) return } val markerId = (graphic.attributes.get("id") as? String) ?: return @@ -282,7 +282,7 @@ class ArcGISMapViewController( // Suppress the recomposition for the position property markerRenderer.setDraggingState(state, true) - _markerDragStartListener?.invoke(state) + markerDragStartListener?.invoke(state) } private suspend fun onMapTap(event: SingleTapConfirmedEvent) { @@ -302,7 +302,7 @@ class ArcGISMapViewController( zoom = holder.map.getCurrentViewpointCamera().getZoomLevel(), ) if (markerEntity != null) { - _markerClickListener?.invoke(markerEntity.state) + markerClickListener?.invoke(markerEntity.state) return } @@ -313,11 +313,11 @@ class ArcGISMapViewController( state = circleEntity.state, position = touchPosition, ) - _circleClickListener?.invoke(event) + circleClickListener?.invoke(event) } holder.map.screenToLocation(screenPoint).getOrNull()?.also { - _mapClickListener?.invoke(it.toGeoPoint()) + mapClickListener?.invoke(it.toGeoPoint()) } } diff --git a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt index 71db7abd..083b16ca 100644 --- a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt +++ b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt @@ -218,25 +218,25 @@ class GoogleMapViewController( override suspend fun updatePolyline(state: PolylineState) = polylineOverlayManager.updatePolyline(state) override fun onCameraMove() { - _cameraMoveListener?.let { + cameraMoveListener?.let { coroutine.launch { it(holder.map.cameraPosition) } } } override fun onCameraIdle() { - _cameraMoveListener?.let { + cameraMoveListener?.let { coroutine.launch { it(holder.map.cameraPosition) } } } override fun onCameraMoveStarted(p0: Int) { - _cameraMoveListener?.let { + cameraMoveListener?.let { coroutine.launch { it(holder.map.cameraPosition) } } } override fun onCameraMoveCanceled() { - _cameraMoveListener?.let { + cameraMoveListener?.let { coroutine.launch { it(holder.map.cameraPosition) } } } @@ -245,7 +245,7 @@ class GoogleMapViewController( val key = marker.tag?.toString() ?: return true val state = markerOverlayManager.getMarkerState(key) ?: return true if (!state.clickable) return true - _markerClickListener?.let { + markerClickListener?.let { coroutine.launch { it(state) } @@ -262,11 +262,11 @@ class GoogleMapViewController( state = entity.state, position = touchPosition, ) - _circleClickListener?.invoke(event) + circleClickListener?.invoke(event) return } - _mapClickListener?.let { + mapClickListener?.let { coroutine.launch { it(position.toGeoPoint()) } } } @@ -283,14 +283,14 @@ class GoogleMapViewController( markerRenderer.setDraggingState(state, true) state.position = marker.position.toGeoPoint() - _markerDragListener?.invoke(state) + markerDragListener?.invoke(state) } } override fun onMarkerDragEnd(marker: Marker) { this.getMarkerStateFrom(marker)?.also { state -> state.position = marker.position.toGeoPoint() - _markerDragEndListener?.invoke(state) + markerDragEndListener?.invoke(state) } } @@ -301,7 +301,7 @@ class GoogleMapViewController( // Restore the recomposition for the position property markerRenderer.setDraggingState(state, false) - _markerDragStartListener?.invoke(state) + markerDragStartListener?.invoke(state) } } } diff --git a/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewController.kt b/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewController.kt index 6e96481c..da0c8892 100644 --- a/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewController.kt +++ b/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewController.kt @@ -252,7 +252,7 @@ class HereMapViewController( cameraState.zoomLevel - ZOOM_ADJUST_VALUE, ) - _cameraMoveListener?.invoke(correctCameraState) + cameraMoveListener?.invoke(correctCameraState) } override fun onTap(point: Point2D) { @@ -269,7 +269,7 @@ class HereMapViewController( zoom = zoom, ) if (entity != null) { - _markerClickListener?.invoke(entity.state) + markerClickListener?.invoke(entity.state) return } @@ -279,12 +279,12 @@ class HereMapViewController( state = entity.state, position = touchPosition, ) - _circleClickListener?.invoke(event) + circleClickListener?.invoke(event) return } // If no overlay is processed, process the tap as onMapClick - _mapClickListener?.let { it(touchPosition) } + mapClickListener?.let { it(touchPosition) } } override fun onLongPress( @@ -313,7 +313,7 @@ class HereMapViewController( // Suppress the recomposition for the position property markerRenderer.setDraggingState(entity.state, true) - _markerDragStartListener?.invoke(entity.state) + markerDragStartListener?.invoke(entity.state) } GestureState.UPDATE.value -> { @@ -322,7 +322,7 @@ class HereMapViewController( selected.marker.coordinates = coordinates selected.state.position = coordinates.toGeoPoint() } - _markerDragListener?.invoke(selected.state) + markerDragListener?.invoke(selected.state) } } @@ -333,7 +333,7 @@ class HereMapViewController( // Restore the recomposition for the position property markerRenderer.setDraggingState(selected.state, false) - _markerDragEndListener?.invoke(selected.state) + markerDragEndListener?.invoke(selected.state) selectedMarker = null } } diff --git a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt index d5d31efb..43c06763 100644 --- a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt +++ b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt @@ -247,7 +247,7 @@ internal class MapboxMapViewController( override suspend fun updateCircle(state: CircleState) = circleOverlayManager.updateCircle(state) override fun run(cameraChanged: CameraChanged) { - _cameraMoveListener?.invoke( + cameraMoveListener?.invoke( CameraState( cameraChanged.cameraState.center, cameraChanged.cameraState.padding, @@ -342,11 +342,11 @@ internal class MapboxMapViewController( markerRenderer.redraw() markerRenderer.drawDragLayer() - _markerDragStartListener?.invoke(entity.state) + markerDragStartListener?.invoke(entity.state) return true } - _mapLongClickListener?.invoke(geoPoint) + mapLongClickListener?.invoke(geoPoint) return true } @@ -359,7 +359,7 @@ internal class MapboxMapViewController( tolerance = ResourceProvider.dpToPx(Settings.Default.tapTolerance), zoom = holder.map.cameraState.zoom, )?.let { - _markerClickListener?.invoke(it.state) + markerClickListener?.invoke(it.state) return true } @@ -370,11 +370,11 @@ internal class MapboxMapViewController( state = circleEntity.state, position = touchPosition, ) - _circleClickListener?.invoke(event) + circleClickListener?.invoke(event) return true } - _mapClickListener?.invoke(touchPosition) + mapClickListener?.invoke(touchPosition) return true } @@ -401,7 +401,7 @@ internal class MapboxMapViewController( markerRenderer.drawDragLayer() } - _markerDragListener?.invoke(entity.state) + markerDragListener?.invoke(entity.state) return true } return false @@ -425,7 +425,7 @@ internal class MapboxMapViewController( markerRenderer.setDraggingState(entity.state, false) // Restore the recomposition for the position property markerOverlayManager.markerManager.registerEntity(entity) markerRenderer.redraw() - _markerDragEndListener?.invoke(entity.state) + markerDragEndListener?.invoke(entity.state) } } } From f2bc35773cbad478feca6ed65bd9903c03656787 Mon Sep 17 00:00:00 2001 From: Masashi Katsumata Date: Sat, 16 Aug 2025 01:06:30 +0900 Subject: [PATCH 3/4] Fix: Android Lint errors --- .../core/controller/MapViewController.kt | 42 ++++++++++--------- .../com/mapconductor/core/map/MapViewBase.kt | 6 +-- .../com/mapconductor/core/map/MapViewState.kt | 2 +- .../com/mapconductor/arcgis/ArcGISMapView.kt | 4 +- .../arcgis/ArcGISMapViewController.kt | 20 +++++---- .../mapconductor/arcgis/ArcGisMapViewState.kt | 19 +++------ .../mapconductor/googlemaps/GoogleMapView.kt | 4 +- .../googlemaps/GoogleMapViewController.kt | 34 ++++++++------- .../googlemaps/GoogleMapViewState.kt | 25 +++-------- .../java/com/mapconductor/here/HereMapView.kt | 4 +- .../here/HereMapViewController.kt | 18 ++++---- .../com/mapconductor/here/HereMapViewState.kt | 25 ++++------- .../com/mapconductor/mapbox/MapboxMapView.kt | 4 +- .../mapbox/MapboxMapViewController.kt | 25 +++++------ .../mapconductor/mapbox/MapboxViewState.kt | 26 ++++-------- 15 files changed, 113 insertions(+), 145 deletions(-) diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/controller/MapViewController.kt b/mapconductor-core/src/main/java/com/mapconductor/core/controller/MapViewController.kt index a1994a9d..b018c723 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/controller/MapViewController.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/controller/MapViewController.kt @@ -43,7 +43,7 @@ interface MapViewController setCameraMoveListener(listener: OnCameraMoveHandler?) + fun setCameraMoveListener(listener: OnCameraMoveHandler?) fun setMapClickListener(listener: OnMapEventHandler?) @@ -67,7 +67,7 @@ interface MapViewController -abstract class BaseMapViewController : +abstract class BaseMapViewController : MapViewController { abstract val markerRenderer: MarkerRenderer @@ -121,48 +121,52 @@ abstract class BaseMapViewController - protected var cameraMoveListener: (OnCameraMoveHandler)? = null - protected var mapClickListener: OnMapEventHandler? = null - protected var mapLongClickListener: OnMapEventHandler? = null - protected var markerClickListener: OnMarkerEventHandler? = null - protected var markerDragStartListener: OnMarkerEventHandler? = null - protected var markerDragListener: OnMarkerEventHandler? = null - protected var markerDragEndListener: OnMarkerEventHandler? = null - protected var circleClickListener: OnCircleEventHandler? = null - protected var polylineClickListener: OnPolylineEventHandler? = null + protected var cameraMoveCallback: OnCameraMoveHandler? = null + protected var mapClickCallback: OnMapEventHandler? = null + protected var mapLongClickCallback: OnMapEventHandler? = null + protected var markerClickCallback: OnMarkerEventHandler? = null + protected var markerDragStartCallback: OnMarkerEventHandler? = null + protected var markerDragCallback: OnMarkerEventHandler? = null + protected var markerDragEndCallback: OnMarkerEventHandler? = null + protected var circleClickCallback: OnCircleEventHandler? = null + protected var polylineClickCallback: OnPolylineEventHandler? = null abstract fun setupListeners() + override fun setCameraMoveListener(listener: OnCameraMoveHandler?) { + this.cameraMoveCallback = listener + } + override fun setMapClickListener(listener: OnMapEventHandler?) { - this.mapClickListener = listener + this.mapClickCallback = listener } override fun setMapLongClickListener(listener: OnMapEventHandler?) { - this.mapClickListener = listener + this.mapClickCallback = listener } override fun setMarkerClickListener(listener: OnMarkerEventHandler?) { - this.markerClickListener = listener + this.markerClickCallback = listener } override fun setMarkerDragStartListener(listener: OnMarkerEventHandler?) { - this.markerDragStartListener = listener + this.markerDragStartCallback = listener } override fun setMarkerDragListener(listener: OnMarkerEventHandler?) { - this.markerDragListener = listener + this.markerDragCallback = listener } override fun setMarkerDragEndListener(listener: OnMarkerEventHandler?) { - this.markerDragEndListener = listener + this.markerDragEndCallback = listener } override fun setCircleClickListener(listener: OnCircleEventHandler?) { - this.circleClickListener = listener + this.circleClickCallback = listener } override fun setPolylineClickListener(listener: OnPolylineEventHandler?) { - this.polylineClickListener = listener + this.polylineClickCallback = listener } override fun setOnMarkerAnimationStart(listener: OnMarkerEventHandler?) = diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/map/MapViewBase.kt b/mapconductor-core/src/main/java/com/mapconductor/core/map/MapViewBase.kt index d67a09f0..abd2baf2 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/map/MapViewBase.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/map/MapViewBase.kt @@ -40,7 +40,7 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.debounce typealias OnMapEventHandler = (GeoPoint) -> Unit -typealias OnCameraMoveHandler = (CameraPosition) -> Unit +typealias OnCameraMoveHandler = (MapCameraPosition) -> Unit @OptIn(FlowPreview::class) @Composable @@ -70,7 +70,7 @@ fun < ) { val isResourceProviderReady by ResourceProvider.initialized.collectAsState() val initState by state.isInitialized.collectAsState() - val cameraPosition by state.mapCameraPosition.collectAsState() + val cameraPosition by state.cameraPosition.collectAsState() val bubbles by scope.bubbleFlow.collectAsState() val controller = controllerRef.value @@ -172,7 +172,7 @@ fun < } } - if (controller != null && cameraPosition != null && bubbles.isNotEmpty()) { + if (controller != null && bubbles.isNotEmpty()) { Box( modifier = Modifier diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/map/MapViewState.kt b/mapconductor-core/src/main/java/com/mapconductor/core/map/MapViewState.kt index b61aa86f..0bcf093b 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/map/MapViewState.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/map/MapViewState.kt @@ -25,7 +25,7 @@ interface MapViewState { val id: String val initCameraPosition: MapCameraPosition val isInitialized: StateFlow - val mapCameraPosition: StateFlow + val cameraPosition: StateFlow val mapDesignType: MapDesignType fun initAsync(init: suspend () -> Boolean) diff --git a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapView.kt b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapView.kt index 0a626439..dc8c31c7 100644 --- a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapView.kt +++ b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapView.kt @@ -61,7 +61,7 @@ fun ArcGISMapView( state.controller = controller controller.holder.mapView.onCreate(owner) controller.holder.mapView.onResume(owner) - controller.setCameraMoveListener(state::OnCameraChange) + controller.setCameraMoveListener(state::onCameraChange) controller.setMapClickListener(onMapClick) controller.setMarkerClickListener(onMarkerClick) controller.setMarkerDragStartListener(onMarkerDragStart) @@ -75,7 +75,7 @@ fun ArcGISMapView( state.controller = controller val restoreCameraPosition = - state.mapCameraPosition.value + state.cameraPosition.value ?: MapCameraPosition.from(state.initCameraPosition) controller.moveCamera(restoreCameraPosition) diff --git a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt index 448442ac..468b83a6 100644 --- a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt +++ b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt @@ -102,7 +102,6 @@ class ArcGISMapViewController( private val circleRendererFactory: CircleRendererFactory = DefaultArcGISCircleRenderer(), ) : BaseMapViewController< - Camera, ArcGISActualMarker, ArcGISActualCircle, ArcGISActualPolyline, @@ -209,7 +208,10 @@ class ArcGISMapViewController( } private fun onViewpointChange() { - this.cameraMoveListener?.invoke(holder.map.getCurrentViewpointCamera()) + this.cameraMoveCallback?.let { + val mapCamera = holder.map.getCurrentViewpointCamera().toMapCameraPosition() + it(mapCamera) + } } private suspend fun onMapPan(event: PanChangeEvent) { @@ -219,7 +221,7 @@ class ArcGISMapViewController( val position = point.toGeoPoint() it.graphic.geometry = point it.state.position = position - markerDragListener?.invoke(it.state) + markerDragCallback?.invoke(it.state) } } @@ -234,7 +236,7 @@ class ArcGISMapViewController( // Restore the recomposition for the position property markerRenderer.setDraggingState(it.state, false) - markerDragEndListener?.invoke(it.state) + markerDragEndCallback?.invoke(it.state) with(holder.map) { interactionOptions.isPanEnabled = true interactionOptions.isRotateEnabled = true @@ -262,7 +264,7 @@ class ArcGISMapViewController( val graphics = identifyResult.getOrNull()?.graphics val graphic = graphics?.firstOrNull() if (graphic == null) { - mapLongClickListener?.invoke(position) + mapLongClickCallback?.invoke(position) return } val markerId = (graphic.attributes.get("id") as? String) ?: return @@ -282,7 +284,7 @@ class ArcGISMapViewController( // Suppress the recomposition for the position property markerRenderer.setDraggingState(state, true) - markerDragStartListener?.invoke(state) + markerDragStartCallback?.invoke(state) } private suspend fun onMapTap(event: SingleTapConfirmedEvent) { @@ -302,7 +304,7 @@ class ArcGISMapViewController( zoom = holder.map.getCurrentViewpointCamera().getZoomLevel(), ) if (markerEntity != null) { - markerClickListener?.invoke(markerEntity.state) + markerClickCallback?.invoke(markerEntity.state) return } @@ -313,11 +315,11 @@ class ArcGISMapViewController( state = circleEntity.state, position = touchPosition, ) - circleClickListener?.invoke(event) + circleClickCallback?.invoke(event) } holder.map.screenToLocation(screenPoint).getOrNull()?.also { - mapClickListener?.invoke(it.toGeoPoint()) + mapClickCallback?.invoke(it.toGeoPoint()) } } diff --git a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGisMapViewState.kt b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGisMapViewState.kt index 4f7c0b6b..92633b09 100644 --- a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGisMapViewState.kt +++ b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGisMapViewState.kt @@ -4,7 +4,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable -import com.arcgismaps.mapping.view.Camera import com.mapconductor.core.features.GeoPoint import com.mapconductor.core.map.BaseMapViewSaver import com.mapconductor.core.map.IMapCameraPosition @@ -20,11 +19,8 @@ import android.content.Context import android.content.ContextWrapper import android.os.Bundle import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.stateIn interface IArcGISMapViewState : MapViewState @@ -41,13 +37,8 @@ class ArcGISMapViewState( internal var controller: IArcGISMapViewController? = null // Camera position - private val cameraPosition = MutableStateFlow(null) - override val mapCameraPosition: StateFlow = - cameraPosition.map { it?.toMapCameraPosition() }.stateIn( - scope = mainCoroutine, - started = SharingStarted.Eagerly, - initialValue = null, - ) + private val _cameraPosition = MutableStateFlow(initCameraPosition) + override val cameraPosition: StateFlow = _cameraPosition.asStateFlow() override fun moveCameraTo( cameraPosition: MapCameraPosition, @@ -78,13 +69,13 @@ class ArcGISMapViewState( // Do nothing here } - internal fun OnCameraChange(cameraPosition: Camera) { - this.cameraPosition.value = cameraPosition + internal fun onCameraChange(cameraPosition: MapCameraPosition) { + this._cameraPosition.value = cameraPosition } } class ArcGISMapViewSaver : BaseMapViewSaver() { - override fun extractCameraPosition(state: ArcGISMapViewState): MapCameraPosition? = state.mapCameraPosition.value + override fun extractCameraPosition(state: ArcGISMapViewState): MapCameraPosition? = state.cameraPosition.value override fun saveMapDesign( state: ArcGISMapViewState, diff --git a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt index f0b2d022..c960ad95 100644 --- a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt +++ b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt @@ -52,7 +52,7 @@ fun GoogleMapsView( // Specific Google Maps initialization logic // This lambda will be executed within state.initAsync by MapViewBase val cameraPosition = - state.mapCameraPosition.value?.let { + state.cameraPosition.value?.let { CameraPosition .Builder() .apply { @@ -76,7 +76,7 @@ fun GoogleMapsView( ) (state as? GoogleMapViewState)?.let { mapViewState -> mapViewState.controller = controller - controller.setCameraMoveListener(mapViewState::OnCameraChange) + controller.setCameraMoveListener(mapViewState::onCameraChange) } controller.setMapClickListener(onMapClick) controller.setMarkerClickListener(onMarkerClick) diff --git a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt index 083b16ca..faf57473 100644 --- a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt +++ b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt @@ -74,7 +74,7 @@ class GoogleMapViewController( private val polylineRendererFactory: PolylineRendererFactory = DefaultGoogleMapPolylineRenderer(), private val polygonRendererFactory: PolygonRendererFactory = DefaultGoogleMapPolygonRenderer(), private val circleRendererFactory: CircleRendererFactory = DefaultGoogleMapCircleRenderer(), -) : BaseMapViewController(), +) : BaseMapViewController(), IGoogleMapViewController, OnCameraMoveStartedListener, OnCameraMoveCanceledListener, @@ -218,26 +218,30 @@ class GoogleMapViewController( override suspend fun updatePolyline(state: PolylineState) = polylineOverlayManager.updatePolyline(state) override fun onCameraMove() { - cameraMoveListener?.let { - coroutine.launch { it(holder.map.cameraPosition) } + cameraMoveCallback?.let { + val mapCameraPosition = holder.map.cameraPosition.toMapCameraPosition() + coroutine.launch { it(mapCameraPosition) } } } override fun onCameraIdle() { - cameraMoveListener?.let { - coroutine.launch { it(holder.map.cameraPosition) } + cameraMoveCallback?.let { + val mapCameraPosition = holder.map.cameraPosition.toMapCameraPosition() + coroutine.launch { it(mapCameraPosition) } } } override fun onCameraMoveStarted(p0: Int) { - cameraMoveListener?.let { - coroutine.launch { it(holder.map.cameraPosition) } + cameraMoveCallback?.let { + val mapCameraPosition = holder.map.cameraPosition.toMapCameraPosition() + coroutine.launch { it(mapCameraPosition) } } } override fun onCameraMoveCanceled() { - cameraMoveListener?.let { - coroutine.launch { it(holder.map.cameraPosition) } + cameraMoveCallback?.let { + val mapCameraPosition = holder.map.cameraPosition.toMapCameraPosition() + coroutine.launch { it(mapCameraPosition) } } } @@ -245,7 +249,7 @@ class GoogleMapViewController( val key = marker.tag?.toString() ?: return true val state = markerOverlayManager.getMarkerState(key) ?: return true if (!state.clickable) return true - markerClickListener?.let { + markerClickCallback?.let { coroutine.launch { it(state) } @@ -262,11 +266,11 @@ class GoogleMapViewController( state = entity.state, position = touchPosition, ) - circleClickListener?.invoke(event) + circleClickCallback?.invoke(event) return } - mapClickListener?.let { + mapClickCallback?.let { coroutine.launch { it(position.toGeoPoint()) } } } @@ -283,14 +287,14 @@ class GoogleMapViewController( markerRenderer.setDraggingState(state, true) state.position = marker.position.toGeoPoint() - markerDragListener?.invoke(state) + markerDragCallback?.invoke(state) } } override fun onMarkerDragEnd(marker: Marker) { this.getMarkerStateFrom(marker)?.also { state -> state.position = marker.position.toGeoPoint() - markerDragEndListener?.invoke(state) + markerDragEndCallback?.invoke(state) } } @@ -301,7 +305,7 @@ class GoogleMapViewController( // Restore the recomposition for the position property markerRenderer.setDraggingState(state, false) - markerDragStartListener?.invoke(state) + markerDragStartCallback?.invoke(state) } } } diff --git a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewState.kt b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewState.kt index cfbbd432..5b94238c 100644 --- a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewState.kt +++ b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewState.kt @@ -4,7 +4,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable -import com.google.android.gms.maps.model.CameraPosition import com.mapconductor.core.features.GeoPoint import com.mapconductor.core.map.BaseMapViewSaver import com.mapconductor.core.map.IMapCameraPosition @@ -16,11 +15,8 @@ import com.mapconductor.core.map.MapViewStateImpl import java.util.UUID import android.os.Bundle import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.stateIn interface IGoogleMapViewState : MapViewState @@ -35,13 +31,8 @@ class GoogleMapViewState( val padding: StateFlow = _padding.asStateFlow() // Camera position - private val cameraPosition = MutableStateFlow(initCameraPosition.toCameraPosition()) - override val mapCameraPosition: StateFlow = - cameraPosition.map { it.toMapCameraPosition(padding.value) }.stateIn( - scope = mainCoroutine, - started = SharingStarted.Eagerly, - initialValue = null, - ) + private val _cameraPosition = MutableStateFlow(initCameraPosition) + override val cameraPosition: StateFlow = _cameraPosition.asStateFlow() internal var controller: IGoogleMapViewController? = null @@ -55,11 +46,7 @@ class GoogleMapViewState( listener?.onComplete(false) return } - val currCameraPosition = this.mapCameraPosition.value - if (currCameraPosition == null) { - listener?.onComplete(false) - return - } + val currCameraPosition = this.cameraPosition.value val newPosition = currCameraPosition.copy( position = position, @@ -88,8 +75,8 @@ class GoogleMapViewState( } ?: listener?.onComplete(false) } - internal fun OnCameraChange(cameraPosition: CameraPosition) { - this.cameraPosition.value = cameraPosition + internal fun onCameraChange(cameraPosition: MapCameraPosition) { + this._cameraPosition.value = cameraPosition } // override fun onCameraMoveStart(cameraPosition: CameraPosition) { @@ -115,7 +102,7 @@ class GoogleMapViewState( // GoogleMapViewSaver implementation class GoogleMapViewSaver : BaseMapViewSaver() { - override fun extractCameraPosition(state: GoogleMapViewState): MapCameraPosition? = state.mapCameraPosition.value + override fun extractCameraPosition(state: GoogleMapViewState): MapCameraPosition? = state.cameraPosition.value override fun saveMapDesign( state: GoogleMapViewState, diff --git a/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapView.kt b/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapView.kt index b4dcb21c..c0d0eb0e 100644 --- a/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapView.kt +++ b/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapView.kt @@ -68,7 +68,7 @@ fun HereMapView( (state as? HereMapViewState)?.let { mapViewState -> mapViewState.controller = controller - controller.setCameraMoveListener(mapViewState::OnCameraChange) + controller.setCameraMoveListener(mapViewState::onCameraChange) } controller.setMapClickListener(onMapClick) controller.setMarkerClickListener(onMarkerClick) @@ -94,7 +94,7 @@ fun HereMapView( controllerRef.value = controller return@MapViewBase suspendCancellableCoroutine { cont -> - val restoreCameraPosition = state.mapCameraPosition.value ?: state.initCameraPosition + val restoreCameraPosition = state.cameraPosition.value ?: state.initCameraPosition controller.moveCamera( dstPosition = restoreCameraPosition, listener = diff --git a/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewController.kt b/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewController.kt index da0c8892..537936e3 100644 --- a/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewController.kt +++ b/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewController.kt @@ -81,7 +81,6 @@ class HereMapViewController( private val polygonRendererFactory: PolygonRendererFactory = DefaultHereMapPolygonRenderer(), private val circleRendererFactory: CircleRendererFactory = DefaultHereMapCircleRenderer(), ) : BaseMapViewController< - MapCamera.State, HereMapActualMarker, HereMapActualCircle, HereMapActualPolyline, @@ -252,7 +251,10 @@ class HereMapViewController( cameraState.zoomLevel - ZOOM_ADJUST_VALUE, ) - cameraMoveListener?.invoke(correctCameraState) + cameraMoveCallback?.let { + val mapCameraPosition = correctCameraState.toMapCameraPosition() + it(mapCameraPosition) + } } override fun onTap(point: Point2D) { @@ -269,7 +271,7 @@ class HereMapViewController( zoom = zoom, ) if (entity != null) { - markerClickListener?.invoke(entity.state) + markerClickCallback?.invoke(entity.state) return } @@ -279,12 +281,12 @@ class HereMapViewController( state = entity.state, position = touchPosition, ) - circleClickListener?.invoke(event) + circleClickCallback?.invoke(event) return } // If no overlay is processed, process the tap as onMapClick - mapClickListener?.let { it(touchPosition) } + mapClickCallback?.let { it(touchPosition) } } override fun onLongPress( @@ -313,7 +315,7 @@ class HereMapViewController( // Suppress the recomposition for the position property markerRenderer.setDraggingState(entity.state, true) - markerDragStartListener?.invoke(entity.state) + markerDragStartCallback?.invoke(entity.state) } GestureState.UPDATE.value -> { @@ -322,7 +324,7 @@ class HereMapViewController( selected.marker.coordinates = coordinates selected.state.position = coordinates.toGeoPoint() } - markerDragListener?.invoke(selected.state) + markerDragCallback?.invoke(selected.state) } } @@ -333,7 +335,7 @@ class HereMapViewController( // Restore the recomposition for the position property markerRenderer.setDraggingState(selected.state, false) - markerDragEndListener?.invoke(selected.state) + markerDragEndCallback?.invoke(selected.state) selectedMarker = null } } diff --git a/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewState.kt b/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewState.kt index 286dbf50..1d879207 100644 --- a/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewState.kt +++ b/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewState.kt @@ -22,10 +22,8 @@ import android.content.Context import android.content.ContextWrapper import android.os.Bundle import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.flow.asStateFlow interface IHereMapViewState : MapViewState @@ -38,13 +36,8 @@ class HereMapViewState( internal var controller: IHereMapViewController? = null // Camera center position - private val cameraPosition = MutableStateFlow(null) - override val mapCameraPosition: StateFlow = - cameraPosition.map { it?.toMapCameraPosition() }.stateIn( - scope = mainCoroutine, - started = SharingStarted.Eagerly, - initialValue = null, - ) + private val _cameraPosition = MutableStateFlow(initCameraPosition) + override val cameraPosition: StateFlow = _cameraPosition.asStateFlow() override fun moveCameraTo( position: GeoPoint, @@ -56,11 +49,7 @@ class HereMapViewState( listener?.onComplete(false) return } - val currCameraPosition = this.mapCameraPosition.value - if (currCameraPosition == null) { - listener?.onComplete(false) - return - } + val currCameraPosition = this.cameraPosition.value val newPosition = currCameraPosition.copy( position = position, @@ -91,13 +80,13 @@ class HereMapViewState( } } - internal fun OnCameraChange(cameraState: MapCamera.State) { - this.cameraPosition.value = cameraState + internal fun onCameraChange(cameraState: MapCameraPosition) { + this._cameraPosition.value = cameraState } } class HereMapViewSaver : BaseMapViewSaver() { - override fun extractCameraPosition(state: HereMapViewState): MapCameraPosition? = state.mapCameraPosition.value + override fun extractCameraPosition(state: HereMapViewState): MapCameraPosition? = state.cameraPosition.value override fun saveMapDesign( state: HereMapViewState, diff --git a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapView.kt b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapView.kt index 05fee008..48d1cd96 100644 --- a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapView.kt +++ b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapView.kt @@ -48,7 +48,7 @@ fun MapboxMapView( MapboxInitSDK(context) val cameraOptions = - state.mapCameraPosition.value?.toCameraOptions() + state.cameraPosition.value?.toCameraOptions() val styleUri = state.mapDesignType.getValue() val mapInitOptions = @@ -67,7 +67,7 @@ fun MapboxMapView( ) (state as? MapboxMapViewState)?.let { mapViewState -> mapViewState.controller = controller - controller.setCameraMoveListener(mapViewState::OnCameraChange) + controller.setCameraMoveListener(mapViewState::onCameraChange) } controller.setMapClickListener(onMapClick) controller.setMarkerClickListener(onMarkerClick) diff --git a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt index 43c06763..e2fd51b0 100644 --- a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt +++ b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt @@ -118,7 +118,6 @@ internal class MapboxMapViewController( private val circleRendererFactory: CircleRendererFactory = DefaultMapboxCircleRenderer(), ) : BaseMapViewController< - CameraState, MapboxActualMarker, MapboxActualCircle, MapboxActualPolyline, @@ -247,15 +246,17 @@ internal class MapboxMapViewController( override suspend fun updateCircle(state: CircleState) = circleOverlayManager.updateCircle(state) override fun run(cameraChanged: CameraChanged) { - cameraMoveListener?.invoke( - CameraState( + cameraMoveCallback?.let { + val mapCameraPosition = CameraState( cameraChanged.cameraState.center, cameraChanged.cameraState.padding, cameraChanged.cameraState.zoom + ZOOM_ADJUST_VALUE, cameraChanged.cameraState.bearing, cameraChanged.cameraState.pitch, - ), - ) + ).toMapCameraPosition() + + it(mapCameraPosition) + } } override fun moveCamera( @@ -342,11 +343,11 @@ internal class MapboxMapViewController( markerRenderer.redraw() markerRenderer.drawDragLayer() - markerDragStartListener?.invoke(entity.state) + markerDragStartCallback?.invoke(entity.state) return true } - mapLongClickListener?.invoke(geoPoint) + mapLongClickCallback?.invoke(geoPoint) return true } @@ -359,7 +360,7 @@ internal class MapboxMapViewController( tolerance = ResourceProvider.dpToPx(Settings.Default.tapTolerance), zoom = holder.map.cameraState.zoom, )?.let { - markerClickListener?.invoke(it.state) + markerClickCallback?.invoke(it.state) return true } @@ -370,11 +371,11 @@ internal class MapboxMapViewController( state = circleEntity.state, position = touchPosition, ) - circleClickListener?.invoke(event) + circleClickCallback?.invoke(event) return true } - mapClickListener?.invoke(touchPosition) + mapClickCallback?.invoke(touchPosition) return true } @@ -401,7 +402,7 @@ internal class MapboxMapViewController( markerRenderer.drawDragLayer() } - markerDragListener?.invoke(entity.state) + markerDragCallback?.invoke(entity.state) return true } return false @@ -425,7 +426,7 @@ internal class MapboxMapViewController( markerRenderer.setDraggingState(entity.state, false) // Restore the recomposition for the position property markerOverlayManager.markerManager.registerEntity(entity) markerRenderer.redraw() - markerDragEndListener?.invoke(entity.state) + markerDragEndCallback?.invoke(entity.state) } } } diff --git a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxViewState.kt b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxViewState.kt index 3086ed91..4a893721 100644 --- a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxViewState.kt +++ b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxViewState.kt @@ -4,7 +4,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable -import com.mapbox.maps.CameraState import com.mapconductor.core.features.GeoPoint import com.mapconductor.core.map.BaseMapViewSaver import com.mapconductor.core.map.IMapCameraPosition @@ -16,10 +15,8 @@ import com.mapconductor.mapbox.MapboxMapDesign.Standard import java.util.UUID import android.os.Bundle import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.flow.asStateFlow interface IMapboxMapViewState : MapViewState @@ -32,13 +29,8 @@ class MapboxMapViewState( internal var controller: IMapboxMapViewController? = null // Camera center position - private val cameraState = MutableStateFlow(initCameraPosition.toCameraState()) - override val mapCameraPosition: StateFlow = - cameraState.map { it.toMapCameraPosition() }.stateIn( - scope = this.mainCoroutine, - started = SharingStarted.Eagerly, - initialValue = null, - ) + private val _cameraPosition = MutableStateFlow(initCameraPosition) + override val cameraPosition: StateFlow = _cameraPosition.asStateFlow() override fun moveCameraTo( position: GeoPoint, @@ -50,11 +42,7 @@ class MapboxMapViewState( listener?.onComplete(false) return } - val currentPosition = this.mapCameraPosition.value - if (currentPosition == null) { - listener?.onComplete(false) - return - } + val currentPosition = this.cameraPosition.value val newPosition = currentPosition.copy( position = position, @@ -84,13 +72,13 @@ class MapboxMapViewState( } } - internal fun OnCameraChange(state: CameraState) { - cameraState.value = state + internal fun onCameraChange(cameraPosition: MapCameraPosition) { + _cameraPosition.value = cameraPosition } } class MapboxMapViewSaver : BaseMapViewSaver() { - override fun extractCameraPosition(state: MapboxMapViewState): MapCameraPosition? = state.mapCameraPosition.value + override fun extractCameraPosition(state: MapboxMapViewState): MapCameraPosition? = state.cameraPosition.value override fun saveMapDesign( state: MapboxMapViewState, From f2cedee9262725d3bccf0598f592d058f04dd0c3 Mon Sep 17 00:00:00 2001 From: Masashi Katsumata Date: Sat, 16 Aug 2025 01:12:01 +0900 Subject: [PATCH 4/4] Fix: KtLint errors --- .../arcgis/ArcGISMapViewController.kt | 1 - .../googlemaps/GoogleMapViewController.kt | 1 - .../com/mapconductor/here/HereMapViewState.kt | 1 - .../mapbox/MapboxMapViewController.kt | 15 ++++++++------- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt index 468b83a6..ec34c923 100644 --- a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt +++ b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt @@ -1,6 +1,5 @@ package com.mapconductor.arcgis -import com.arcgismaps.mapping.view.Camera import com.arcgismaps.mapping.view.Graphic import com.arcgismaps.mapping.view.GraphicsOverlay import com.arcgismaps.mapping.view.LongPressEvent diff --git a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt index faf57473..1b07699d 100644 --- a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt +++ b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt @@ -9,7 +9,6 @@ import com.google.android.gms.maps.GoogleMap.OnCameraMoveStartedListener import com.google.android.gms.maps.GoogleMap.OnMapClickListener import com.google.android.gms.maps.GoogleMap.OnMarkerClickListener import com.google.android.gms.maps.GoogleMap.OnMarkerDragListener -import com.google.android.gms.maps.model.CameraPosition import com.google.android.gms.maps.model.Circle import com.google.android.gms.maps.model.LatLng import com.google.android.gms.maps.model.Marker diff --git a/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewState.kt b/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewState.kt index 1d879207..1600d14e 100644 --- a/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewState.kt +++ b/mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewState.kt @@ -4,7 +4,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable -import com.here.sdk.mapview.MapCamera import com.here.sdk.mapview.MapScheme import com.mapconductor.core.features.GeoPoint import com.mapconductor.core.map.BaseMapViewSaver diff --git a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt index e2fd51b0..bae037c1 100644 --- a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt +++ b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt @@ -247,13 +247,14 @@ internal class MapboxMapViewController( override fun run(cameraChanged: CameraChanged) { cameraMoveCallback?.let { - val mapCameraPosition = CameraState( - cameraChanged.cameraState.center, - cameraChanged.cameraState.padding, - cameraChanged.cameraState.zoom + ZOOM_ADJUST_VALUE, - cameraChanged.cameraState.bearing, - cameraChanged.cameraState.pitch, - ).toMapCameraPosition() + val mapCameraPosition = + CameraState( + cameraChanged.cameraState.center, + cameraChanged.cameraState.padding, + cameraChanged.cameraState.zoom + ZOOM_ADJUST_VALUE, + cameraChanged.cameraState.bearing, + cameraChanged.cameraState.pitch, + ).toMapCameraPosition() it(mapCameraPosition) }