From 39a5275b1e382e92619a11aff21e2547d9b637ec Mon Sep 17 00:00:00 2001 From: geeksville Date: Tue, 7 Jul 2020 13:22:09 -0700 Subject: [PATCH 1/4] increase delay for autobug on android 6.0.1 samsung devices --- geeksville-androidlib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geeksville-androidlib b/geeksville-androidlib index 99dbf61fa..603b42958 160000 --- a/geeksville-androidlib +++ b/geeksville-androidlib @@ -1 +1 @@ -Subproject commit 99dbf61fad087db910be7f74867a8f14aba877a4 +Subproject commit 603b42958963ae5475f24e8aa7da351f3841f71c From 55d6c9448b42d6d61916560f4487f1e3470513d6 Mon Sep 17 00:00:00 2001 From: geeksville Date: Tue, 7 Jul 2020 13:29:16 -0700 Subject: [PATCH 2/4] if app gets upgraded, restart the service after the upgrade --- TODO.md | 1 - app/src/main/AndroidManifest.xml | 10 ++++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/TODO.md b/TODO.md index 5bf41ae0e..e0d620d0c 100644 --- a/TODO.md +++ b/TODO.md @@ -37,7 +37,6 @@ the channel is encrypted, you can share the the channel key with others by qr co * keep past messages in db, one db per channel (currently we just keep an array in saved preferences) * show user avatars in chat (use the google user info api) * let users save old channels (i.e. have a menu of channels the user can use) -* also add a receiver that fires after a new update was installed from the play store * if the rxpacket queue on the device overflows (because android hasn't connected in a while) send a special packet to android which means 'X packets have been dropped because you were offline' -drop oldest packets first * make sw update work over BLE diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 343f5515d..7dd67e5fb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -149,6 +149,7 @@ + @@ -160,6 +161,15 @@ + + + + + + From c217c16d248fdc30556191aff2b3cbcf362b8467 Mon Sep 17 00:00:00 2001 From: geeksville Date: Tue, 7 Jul 2020 14:21:41 -0700 Subject: [PATCH 3/4] less crashlytics spam --- geeksville-androidlib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geeksville-androidlib b/geeksville-androidlib index 603b42958..ab381a83f 160000 --- a/geeksville-androidlib +++ b/geeksville-androidlib @@ -1 +1 @@ -Subproject commit 603b42958963ae5475f24e8aa7da351f3841f71c +Subproject commit ab381a83f5380358fa8412a58635e390c3729192 From 3e7457245a8c06f2251f1344c261c377f591f220 Mon Sep 17 00:00:00 2001 From: geeksville Date: Tue, 7 Jul 2020 14:55:01 -0700 Subject: [PATCH 4/4] fix #92 - make all node movements instantly show on map --- .../com/geeksville/mesh/ui/MapFragment.kt | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 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 76b5a31b3..a35eff231 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/MapFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/MapFragment.kt @@ -6,6 +6,7 @@ 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 @@ -130,7 +131,12 @@ class MapFragment : ScreenFragment("Map"), Logging { } var mapView: MapView? = null - var mapboxMap: MapboxMap? = null + + /** + * Mapbox native code can crash painfully if you ever call a mapbox view function while the view is not actively being show + */ + private val isViewVisible: Boolean + get() = view != null && isResumed override fun onViewCreated(viewIn: View, savedInstanceState: Bundle?) { super.onViewCreated(viewIn, savedInstanceState) @@ -145,7 +151,6 @@ 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) @@ -161,7 +166,19 @@ class MapFragment : ScreenFragment("Map"), Logging { //map.uiSettings.isScrollGesturesEnabled = true //map.uiSettings.isZoomGesturesEnabled = true + + // Provide initial positions + model.nodeDB.nodes.value?.let { nodes -> + onNodesChanged(map, nodes.values) + } } + + // Any times nodes change update our map + model.nodeDB.nodes.observe(viewLifecycleOwner, Observer { nodes -> + debug("Nodes updated! map visible = $isViewVisible") + if (isViewVisible) + onNodesChanged(map, nodes.values) + }) } } } @@ -185,16 +202,6 @@ 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() {