From 2eabaad0e2cdae611db68936a4fbba3258ffdcf3 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 18 Aug 2022 23:44:13 -0500 Subject: [PATCH] Update reverse geocoder work * Don't overwrite remote coordinates * Ignore results >100m away --- .../java/org/tasks/jobs/ReverseGeocodeWork.kt | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/tasks/jobs/ReverseGeocodeWork.kt b/app/src/main/java/org/tasks/jobs/ReverseGeocodeWork.kt index 128b3d7a7..28c4441fb 100644 --- a/app/src/main/java/org/tasks/jobs/ReverseGeocodeWork.kt +++ b/app/src/main/java/org/tasks/jobs/ReverseGeocodeWork.kt @@ -1,6 +1,7 @@ package org.tasks.jobs import android.content.Context +import android.location.Location import androidx.hilt.work.HiltWorker import androidx.work.WorkerParameters import dagger.assisted.Assisted @@ -8,6 +9,7 @@ import dagger.assisted.AssistedInject import org.tasks.LocalBroadcastManager import org.tasks.analytics.Firebase import org.tasks.data.LocationDao +import org.tasks.data.Place import org.tasks.injection.BaseWorker import org.tasks.location.Geocoder import timber.log.Timber @@ -21,10 +23,6 @@ class ReverseGeocodeWork @AssistedInject constructor( private val geocoder: Geocoder, private val locationDao: LocationDao) : BaseWorker(context, workerParams, firebase) { - companion object { - const val PLACE_ID = "place_id" - } - override suspend fun run(): Result { val id = inputData.getLong(PLACE_ID, 0) if (id == 0L) { @@ -38,9 +36,16 @@ class ReverseGeocodeWork @AssistedInject constructor( } return try { val result = geocoder.reverseGeocode(place.mapPosition) ?: return Result.failure() - result.id = place.id - result.uid = place.uid - locationDao.update(result) + val distanceBetween = place.distanceTo(result) + if (distanceBetween > 100) { + 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() Timber.d("found $result") Result.success() @@ -49,4 +54,17 @@ class ReverseGeocodeWork @AssistedInject constructor( 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 + } + } + } } \ No newline at end of file