diff --git a/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/AbstractGoogleMap.kt b/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/AbstractGoogleMap.kt index 12ae2a0c0dc916dba0ab26c873b383d9c2d78d77..59f3feb6db6a0bc11de6a189154154fade6a74af 100644 --- a/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/AbstractGoogleMap.kt +++ b/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/AbstractGoogleMap.kt @@ -8,6 +8,8 @@ import android.util.Log import com.google.android.gms.dynamic.IObjectWrapper import com.google.android.gms.dynamic.ObjectWrapper import com.google.android.gms.maps.internal.* +import com.mapbox.mapboxsdk.location.engine.LocationEngineCallback +import com.mapbox.mapboxsdk.location.engine.LocationEngineResult import org.microg.gms.maps.MapsConstants import org.microg.gms.maps.mapbox.model.AbstractMarker import org.microg.gms.maps.mapbox.model.DefaultInfoWindowAdapter @@ -32,9 +34,27 @@ abstract class AbstractGoogleMap(context: Context) : IGoogleMapDelegate.Stub() { internal var markerClickListener: IOnMarkerClickListener? = null internal var circleClickListener: IOnCircleClickListener? = null + internal var myLocationChangeListener: IOnMyLocationChangeListener? = null + + internal val locationEngineCallback = object : LocationEngineCallback { + override fun onSuccess(result: LocationEngineResult?) { + result?.lastLocation?.let { location -> + Log.d(TAG, "myLocationChanged: $location") + myLocationChangeListener?.onMyLocationChanged(ObjectWrapper.wrap(location)) + + onLocationUpdate(location) + } + } + override fun onFailure(e: Exception) { + Log.e(TAG, "Failed to obtain location update", e) + } + } + internal abstract fun showInfoWindow(marker: AbstractMarker): Boolean + internal abstract fun onLocationUpdate(location: Location) + override fun setOnInfoWindowClickListener(listener: IOnInfoWindowClickListener?) { onInfoWindowClickListener = listener } @@ -77,7 +97,7 @@ abstract class AbstractGoogleMap(context: Context) : IGoogleMapDelegate.Stub() { } override fun setOnMyLocationChangeListener(listener: IOnMyLocationChangeListener?) { - Log.d(TAG, "unimplemented Method: setOnMyLocationChangeListener") + myLocationChangeListener = listener } override fun setOnMyLocationButtonClickListener(listener: IOnMyLocationButtonClickListener?) { diff --git a/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/GoogleMap.kt b/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/GoogleMap.kt index bcb0b4ceb49346409397c48bcd1302a1dd3785c1..662817b6111dc01abd665b2f6576a6501a01b0e0 100644 --- a/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/GoogleMap.kt +++ b/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/GoogleMap.kt @@ -57,8 +57,6 @@ import org.microg.gms.maps.mapbox.model.InfoWindow import org.microg.gms.maps.mapbox.model.getInfoWindowViewFor import com.mapbox.mapboxsdk.camera.CameraUpdateFactory import com.mapbox.mapboxsdk.maps.OnMapReadyCallback -import com.mapbox.mapboxsdk.location.engine.LocationEngineCallback -import com.mapbox.mapboxsdk.location.engine.LocationEngineResult import org.microg.gms.maps.MapsConstants.* import org.microg.gms.maps.mapbox.model.* import org.microg.gms.maps.mapbox.utils.MultiArchLoader @@ -97,19 +95,6 @@ class GoogleMapImpl(context: Context, var options: GoogleMapOptions) : AbstractG private var cameraMoveStartedListener: IOnCameraMoveStartedListener? = null private var cameraIdleListener: IOnCameraIdleListener? = null private var markerDragListener: IOnMarkerDragListener? = null - private var myLocationChangeListener: IOnMyLocationChangeListener? = null - - private val locationEngineCallback = object : LocationEngineCallback { - override fun onSuccess(result: LocationEngineResult?) { - result?.lastLocation?.let { location -> - Log.d(TAG, "myLocationChanged: $location") - myLocationChangeListener?.onMyLocationChanged(ObjectWrapper.wrap(location)) - } - } - override fun onFailure(e: Exception) { - Log.w(TAG, e) - } - } var lineManager: LineManager? = null val pendingLines = mutableSetOf>() @@ -436,6 +421,10 @@ class GoogleMapImpl(context: Context, var options: GoogleMapOptions) : AbstractG } } + override fun onLocationUpdate(location: Location) { + // no action necessary, as the location component will automatically place a marker on the map + } + override fun setContentDescription(desc: String?) { mapView?.contentDescription = desc } diff --git a/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/LiteGoogleMap.kt b/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/LiteGoogleMap.kt index 9273740fef87c25ec96bbbe8c3c04b15dc35e3ac..28d1f252b0a9760084bc157f2d4f6b6bbafbeae7 100644 --- a/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/LiteGoogleMap.kt +++ b/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/LiteGoogleMap.kt @@ -29,7 +29,6 @@ import com.google.android.gms.maps.model.internal.* import com.mapbox.mapboxsdk.Mapbox import com.mapbox.mapboxsdk.WellKnownTileServer import com.mapbox.mapboxsdk.location.engine.* -import com.mapbox.mapboxsdk.maps.Style import com.mapbox.mapboxsdk.plugins.annotation.SymbolOptions import com.mapbox.mapboxsdk.snapshotter.MapSnapshot import com.mapbox.mapboxsdk.snapshotter.MapSnapshotter @@ -37,7 +36,6 @@ import com.mapbox.mapboxsdk.style.layers.* import com.mapbox.mapboxsdk.style.sources.GeoJsonSource import com.mapbox.turf.TurfConstants.UNIT_METERS import com.mapbox.turf.TurfMeasurement -import org.microg.gms.maps.MapsConstants import org.microg.gms.maps.mapbox.model.* import org.microg.gms.maps.mapbox.utils.toGms import org.microg.gms.maps.mapbox.utils.toMapbox @@ -92,17 +90,6 @@ class LiteGoogleMapImpl(context: Context, var options: GoogleMapOptions) : Abstr private var myLocationEnabled = false private var myLocation: Location? = null private var locationEngineProvider: LocationEngine = LocationEngineDefault.getDefaultLocationEngine(mapContext) - private val locationListener = object : LocationEngineCallback { - override fun onSuccess(result: LocationEngineResult?) { - this@LiteGoogleMapImpl.myLocation = result?.lastLocation - postUpdateSnapshot() - } - - override fun onFailure(exception: Exception) { - // same behavior as MapLibre's LocationComponent - Log.e(TAG, "Failed to obtain location update", exception) - } - } internal val markers: MutableList = mutableListOf() internal val polygons: MutableList = mutableListOf() @@ -502,7 +489,7 @@ class LiteGoogleMapImpl(context: Context, var options: GoogleMapOptions) : Abstr LocationEngineRequest.Builder(DEFAULT_INTERVAL_MILLIS) .setFastestInterval(DEFAULT_FASTEST_INTERVAL_MILLIS) .setPriority(LocationEngineRequest.PRIORITY_HIGH_ACCURACY) - .build(), locationListener, Looper.getMainLooper() + .build(), locationEngineCallback, Looper.getMainLooper() ) } else { @@ -511,7 +498,12 @@ class LiteGoogleMapImpl(context: Context, var options: GoogleMapOptions) : Abstr } private fun deactivateLocationProvider() { - locationEngineProvider.removeLocationUpdates(locationListener) + locationEngineProvider.removeLocationUpdates(locationEngineCallback) + } + + override fun onLocationUpdate(location: Location) { + this@LiteGoogleMapImpl.myLocation = location + postUpdateSnapshot() } override fun getUiSettings(): IUiSettingsDelegate {