From e6f2e589d2f8aeae89de3635901510e885a6bdf5 Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Thu, 27 Aug 2020 10:15:58 -0700 Subject: [PATCH] Fix geocoded crash, report expected minimum accuracy for location (#832) * Fix geocoded crash, report minimum accuracy for location * Lint * Always log exceptions! Co-authored-by: Justin Bassett --- .../android/sensors/GeocodeSensorManager.kt | 22 +++++++++++-------- .../android/sensors/LocationSensorManager.kt | 6 ++++- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/app/src/full/java/io/homeassistant/companion/android/sensors/GeocodeSensorManager.kt b/app/src/full/java/io/homeassistant/companion/android/sensors/GeocodeSensorManager.kt index 87754cb37..9f1268505 100644 --- a/app/src/full/java/io/homeassistant/companion/android/sensors/GeocodeSensorManager.kt +++ b/app/src/full/java/io/homeassistant/companion/android/sensors/GeocodeSensorManager.kt @@ -7,6 +7,7 @@ import android.location.Geocoder import android.os.Build import android.util.Log import com.google.android.gms.location.LocationServices +import java.lang.Exception class GeocodeSensorManager : SensorManager { @@ -46,17 +47,20 @@ class GeocodeSensorManager : SensorManager { return val locApi = LocationServices.getFusedLocationProviderClient(context) locApi.lastLocation.addOnSuccessListener { location -> - if (location == null) { - Log.e(TAG, "Somehow location is null even though it was successful") - return@addOnSuccessListener - } - var address: Address? = null - if (location.accuracy <= LocationSensorManager.MINIMUM_ACCURACY) - address = Geocoder(context) - .getFromLocation(location.latitude, location.longitude, 1) - .firstOrNull() + try { + if (location == null) { + Log.e(TAG, "Somehow location is null even though it was successful") + return@addOnSuccessListener + } + if (location.accuracy <= LocationSensorManager.MINIMUM_ACCURACY) + address = Geocoder(context) + .getFromLocation(location.latitude, location.longitude, 1) + .firstOrNull() + } catch (e: Exception) { + Log.e(TAG, "Failed to get geocoded location", e) + } val attributes = address?.let { mapOf( "Administrative Area" to it.adminArea, diff --git a/app/src/full/java/io/homeassistant/companion/android/sensors/LocationSensorManager.kt b/app/src/full/java/io/homeassistant/companion/android/sensors/LocationSensorManager.kt index 0c54ac61f..780a517b2 100644 --- a/app/src/full/java/io/homeassistant/companion/android/sensors/LocationSensorManager.kt +++ b/app/src/full/java/io/homeassistant/companion/android/sensors/LocationSensorManager.kt @@ -191,10 +191,14 @@ class LocationSensorManager : BroadcastReceiver(), SensorManager { "\nAccuracy: ${location.accuracy}" + "\nBearing: ${location.bearing}" ) + var accuracy = 0 + if (location.accuracy.toInt() >= 0) { + accuracy = location.accuracy.toInt() + } val updateLocation = UpdateLocation( "", arrayOf(location.latitude, location.longitude), - location.accuracy.toInt(), + accuracy, location.speed.toInt(), location.altitude.toInt(), location.bearing.toInt(),