From e0b2cda229a1eab4ef5e6ebfc7026c252de8951a Mon Sep 17 00:00:00 2001 From: geeksville Date: Fri, 12 Jun 2020 15:29:42 -0700 Subject: [PATCH] stop background geojson updates - it crashes mapbox native --- .../com/geeksville/mesh/ui/MapFragment.kt | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/ui/MapFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/MapFragment.kt index e0fa4dd5c..76b5a31b3 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/MapFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/MapFragment.kt @@ -6,7 +6,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.activityViewModels -import androidx.lifecycle.Observer import com.geeksville.android.GeeksvilleApplication import com.geeksville.android.Logging import com.geeksville.mesh.NodeInfo @@ -131,7 +130,7 @@ class MapFragment : ScreenFragment("Map"), Logging { } var mapView: MapView? = null - + var mapboxMap: MapboxMap? = null override fun onViewCreated(viewIn: View, savedInstanceState: Bundle?) { super.onViewCreated(viewIn, savedInstanceState) @@ -146,6 +145,7 @@ class MapFragment : ScreenFragment("Map"), Logging { // Each time the pane is shown start fetching new map info (we do this here instead of // onCreate because getMapAsync can die in native code if the view goes away) v.getMapAsync { map -> + mapboxMap = map if (view != null) { // it might have gone away by now // val markerIcon = BitmapFactory.decodeResource(context.resources, R.drawable.ic_twotone_person_pin_24) @@ -159,11 +159,6 @@ class MapFragment : ScreenFragment("Map"), Logging { style.addLayer(labelLayer) } - model.nodeDB.nodes.observe(viewLifecycleOwner, Observer { nodes -> - if (view != null) - onNodesChanged(map, nodes.values) - }) - //map.uiSettings.isScrollGesturesEnabled = true //map.uiSettings.isZoomGesturesEnabled = true } @@ -190,6 +185,16 @@ class MapFragment : ScreenFragment("Map"), Logging { override fun onResume() { super.onResume() mapView?.onResume() + + // FIXME: for now we just set the node positions when the user pages to the map - because + // otherwise we try to update in the background which breaks mapbox native code (when view is not shown + mapboxMap?.let { map -> + // model.nodeDB.nodes.observe(viewLifecycleOwner, Observer { nodes -> + model.nodeDB.nodes.value?.values?.let { + onNodesChanged(map, it) + } + //}) + } } override fun onDestroy() {