fix crashlytics autoreport: if we lose comms while sending gps pos, mark

connection closed
pull/8/head
geeksville 2020-02-24 20:08:18 -08:00
rodzic 2f50728372
commit f55f40d624
2 zmienionych plików z 33 dodań i 27 usunięć

Wyświetl plik

@ -14,7 +14,6 @@ MVP features required for first public alpha
* add screenshots and text to play store entry * add screenshots and text to play store entry
# Medium priority # Medium priority
Features for future builds Features for future builds
* describe user experience: devices always point to each other and show distance, you can send texts between nodes * describe user experience: devices always point to each other and show distance, you can send texts between nodes
@ -61,7 +60,8 @@ Do this "Signal app compatible" release relatively soon after the alpha release
Things for the betaish period. Things for the betaish period.
* let users save old channels * let users save old channels
* make sw update work while node is connected to mesh (at least shutdown the other bluetooth services) * make sw update work while node is connected to mesh - the problem is there are _two_ instances of SafeBluetooth at that moment and therefore we violate undocumented android mutex
rules at the BluetoothDevice level. Either make SafeBluetooth lock at the device level or (not as good) make SafeBluetooth a singleton.
* Use LocationRequest.setSmallestDisplacement to save battery and decrease net activity * Use LocationRequest.setSmallestDisplacement to save battery and decrease net activity
* MeshService.reinitFromRadio can take 300 ms, run it in a worker thread instead * MeshService.reinitFromRadio can take 300 ms, run it in a worker thread instead
* show user icons in chat * show user icons in chat

Wyświetl plik

@ -109,35 +109,41 @@ class MeshService : Service(), Logging {
private var lastSendMsec = 0L private var lastSendMsec = 0L
override fun onLocationResult(locationResult: LocationResult) { override fun onLocationResult(locationResult: LocationResult) {
super.onLocationResult(locationResult) exceptionReporter {
var l = locationResult.lastLocation super.onLocationResult(locationResult)
var l = locationResult.lastLocation
// Docs say lastLocation should always be !null if there are any locations, but that's not the case // Docs say lastLocation should always be !null if there are any locations, but that's not the case
if (l == null) { if (l == null) {
// try to only look at the accurate locations // try to only look at the accurate locations
val locs = val locs =
locationResult.locations.filter { !it.hasAccuracy() || it.accuracy < 200 } locationResult.locations.filter { !it.hasAccuracy() || it.accuracy < 200 }
l = locs.lastOrNull() l = locs.lastOrNull()
} }
if (l != null) { if (l != null) {
info("got location $l") info("got location $l")
if (l.hasAccuracy() && l.accuracy >= 200) // if more than 200 meters off we won't use it if (l.hasAccuracy() && l.accuracy >= 200) // if more than 200 meters off we won't use it
warn("accuracy ${l.accuracy} is too poor to use") warn("accuracy ${l.accuracy} is too poor to use")
else { else {
val now = System.currentTimeMillis() val now = System.currentTimeMillis()
// we limit our sends onto the lora net to a max one once every FIXME // we limit our sends onto the lora net to a max one once every FIXME
val sendLora = (now - lastSendMsec >= 30 * 1000) val sendLora = (now - lastSendMsec >= 30 * 1000)
if (sendLora) if (sendLora)
lastSendMsec = now lastSendMsec = now
sendPosition( try {
l.latitude, l.longitude, l.altitude.toInt(), sendPosition(
destNum = if (sendLora) NODENUM_BROADCAST else myNodeNum, l.latitude, l.longitude, l.altitude.toInt(),
wantResponse = sendLora destNum = if (sendLora) NODENUM_BROADCAST else myNodeNum,
) wantResponse = sendLora
)
} catch (ex: RadioNotConnectedException) {
warn("Lost connection to radio, stopping location requests")
onConnectionChanged(false)
}
}
} }
} }
} }
} }