Update reverse geocoder work

* Don't overwrite remote coordinates
* Ignore results >100m away
pull/1967/head
Alex Baker 3 years ago
parent 95d5f74752
commit 2eabaad0e2

@ -1,6 +1,7 @@
package org.tasks.jobs package org.tasks.jobs
import android.content.Context import android.content.Context
import android.location.Location
import androidx.hilt.work.HiltWorker import androidx.hilt.work.HiltWorker
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import dagger.assisted.Assisted import dagger.assisted.Assisted
@ -8,6 +9,7 @@ import dagger.assisted.AssistedInject
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.data.LocationDao import org.tasks.data.LocationDao
import org.tasks.data.Place
import org.tasks.injection.BaseWorker import org.tasks.injection.BaseWorker
import org.tasks.location.Geocoder import org.tasks.location.Geocoder
import timber.log.Timber import timber.log.Timber
@ -21,10 +23,6 @@ class ReverseGeocodeWork @AssistedInject constructor(
private val geocoder: Geocoder, private val geocoder: Geocoder,
private val locationDao: LocationDao) : BaseWorker(context, workerParams, firebase) { private val locationDao: LocationDao) : BaseWorker(context, workerParams, firebase) {
companion object {
const val PLACE_ID = "place_id"
}
override suspend fun run(): Result { override suspend fun run(): Result {
val id = inputData.getLong(PLACE_ID, 0) val id = inputData.getLong(PLACE_ID, 0)
if (id == 0L) { if (id == 0L) {
@ -38,9 +36,16 @@ class ReverseGeocodeWork @AssistedInject constructor(
} }
return try { return try {
val result = geocoder.reverseGeocode(place.mapPosition) ?: return Result.failure() val result = geocoder.reverseGeocode(place.mapPosition) ?: return Result.failure()
result.id = place.id val distanceBetween = place.distanceTo(result)
result.uid = place.uid if (distanceBetween > 100) {
locationDao.update(result) Timber.d("Ignoring $result - ${distanceBetween}m away")
return Result.failure()
}
place.name = result.name
place.address = result.address
place.phone = result.phone
place.url = result.url
locationDao.update(place)
localBroadcastManager.broadcastRefresh() localBroadcastManager.broadcastRefresh()
Timber.d("found $result") Timber.d("found $result")
Result.success() Result.success()
@ -49,4 +54,17 @@ class ReverseGeocodeWork @AssistedInject constructor(
Result.failure() Result.failure()
} }
} }
companion object {
const val PLACE_ID = "place_id"
private fun Place.distanceTo(other: Place) = toLocation().distanceTo(other.toLocation())
private fun Place.toLocation(): Location {
return Location(null).apply {
latitude = this@toLocation.latitude
longitude = this@toLocation.longitude
}
}
}
} }
Loading…
Cancel
Save