From 4734104bd2c3f29d28a0417e91b4e00e16e2fb7b Mon Sep 17 00:00:00 2001 From: Filip Strajnar Date: Sat, 26 Oct 2024 13:55:58 +0200 Subject: [PATCH] Only update location at most every 6 minutes. --- .../logmylocation/LocationLoggingService.java | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/proculite/logmylocation/LocationLoggingService.java b/app/src/main/java/com/proculite/logmylocation/LocationLoggingService.java index 8101d30..c04be80 100644 --- a/app/src/main/java/com/proculite/logmylocation/LocationLoggingService.java +++ b/app/src/main/java/com/proculite/logmylocation/LocationLoggingService.java @@ -24,6 +24,7 @@ import com.pengrad.telegrambot.TelegramBot; import com.pengrad.telegrambot.model.Chat; import com.pengrad.telegrambot.request.SendLocation; +import java.time.Duration; import java.util.List; public class LocationLoggingService extends Service implements LocationListener { @@ -95,10 +96,29 @@ public class LocationLoggingService extends Service implements LocationListener private void updateLocation(Location newLocation){ - if(lastLocation != null && (newLocation.distanceTo(lastLocation) < 2000)) + if(lastLocation != null) { - Log.d(TAG, "Distance to last location too short. Ignoring."); - return; + if(newLocation.distanceTo(lastLocation) < 2000) { + Log.d(TAG, "Distance to last location too short. Ignoring."); + return; + } + + long oldTime = lastLocation.getTime(); + long newTime = newLocation.getTime(); + Duration durationBetweenUpdates = Duration.ofMinutes(6); + + if(oldTime > newTime) + { + Log.w(TAG, "Last location time was somehow after new location's."); + return; + } + + long millisSinceLastUpdate = newTime - oldTime; + if(durationBetweenUpdates.toMillis() > millisSinceLastUpdate) + { + Log.d(TAG, "Location update is too recent."); + return; + } } if(!newLocation.hasAccuracy())