From e83ba04d71215f95843e0aad146dc644764d5304 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sat, 22 Feb 2025 10:27:42 +0100 Subject: [PATCH] Position: move checks for validity. --- .../opentracks/data/models/Position.java | 18 +++++++ .../io/file/importer/TrackImporter.java | 3 +- .../opentracks/sensors/GpsManager.java | 5 +- .../opentracks/util/LocationUtils.java | 52 ------------------- 4 files changed, 21 insertions(+), 57 deletions(-) delete mode 100644 src/main/java/de/dennisguse/opentracks/util/LocationUtils.java diff --git a/src/main/java/de/dennisguse/opentracks/data/models/Position.java b/src/main/java/de/dennisguse/opentracks/data/models/Position.java index 9597d0788..b8ebe0ab1 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/Position.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/Position.java @@ -85,4 +85,22 @@ public record Position( return location; } + + /** + * Checks if a given location is a valid (i.e. physically possible) location on Earth. + * + * @return true if the location is a valid location. + */ + public boolean hasValidLocation() { + return hasLocation() + && Math.abs(latitude) <= 90 + && Math.abs(longitude) <= 180; + } + + public boolean fulfillsAccuracy(Distance thresholdHorizontalAccuracy) { + return hasHorizontalAccuracy() && + horizontalAccuracy + .lessThan(thresholdHorizontalAccuracy); + + } } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/TrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/TrackImporter.java index d5df4ff69..d4fa2d447 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/TrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/TrackImporter.java @@ -28,7 +28,6 @@ import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.stats.TrackStatisticsUpdater; import de.dennisguse.opentracks.ui.markers.MarkerUtils; import de.dennisguse.opentracks.util.FileUtils; -import de.dennisguse.opentracks.util.LocationUtils; /** * Handles logic to import: @@ -186,7 +185,7 @@ public class TrackImporter { //TODO Remove by 31st December 2021. trackPoints.set(i, new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, time)); //TODO Delete location - } else if (!LocationUtils.isValidLocation(current.getLocation())) { + } else if (!current.getPosition().hasValidLocation()) { throw new ImportParserException("Invalid location detected: " + current); } } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/GpsManager.java b/src/main/java/de/dennisguse/opentracks/sensors/GpsManager.java index 857805741..543c9f1f2 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/GpsManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/GpsManager.java @@ -24,7 +24,6 @@ import de.dennisguse.opentracks.sensors.sensorData.AggregatorGPS; import de.dennisguse.opentracks.sensors.sensorData.Raw; import de.dennisguse.opentracks.services.handlers.TrackPointCreator; import de.dennisguse.opentracks.settings.PreferencesUtils; -import de.dennisguse.opentracks.util.LocationUtils; import de.dennisguse.opentracks.util.PermissionRequester; @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) @@ -128,12 +127,12 @@ public class GpsManager implements SensorConnector, LocationListenerCompat, GpsS TrackPoint trackPoint = new TrackPoint(location, trackPointCreator.createNow()); gpsStatusManager.onNewTrackPoint(trackPoint); - if (!LocationUtils.isValidLocation(location)) { + if (!trackPoint.getPosition().hasValidLocation()) { Log.w(TAG, "Ignore newTrackPoint. location is invalid."); return; } - if (!LocationUtils.fulfillsAccuracy(location, thresholdHorizontalAccuracy)) { + if (!trackPoint.getPosition().fulfillsAccuracy(thresholdHorizontalAccuracy)) { Log.d(TAG, "Ignore newTrackPoint. Poor accuracy."); return; } diff --git a/src/main/java/de/dennisguse/opentracks/util/LocationUtils.java b/src/main/java/de/dennisguse/opentracks/util/LocationUtils.java deleted file mode 100644 index d5b28dd31..000000000 --- a/src/main/java/de/dennisguse/opentracks/util/LocationUtils.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2008 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package de.dennisguse.opentracks.util; - -import android.location.Location; - -import de.dennisguse.opentracks.data.models.Distance; - -/** - * Utility class for decimating tracks at a given level of precision. - * - * @author Leif Hendrik Wilden - */ -public class LocationUtils { - - private static final String TAG = LocationUtils.class.getSimpleName(); - - private LocationUtils() { - } - - /** - * Checks if a given location is a valid (i.e. physically possible) location on Earth. - * - * @param location the location to test - * @return true if the location is a valid location. - */ - public static boolean isValidLocation(Location location) { - return location != null - && Math.abs(location.getLatitude()) <= 90 - && Math.abs(location.getLongitude()) <= 180; - } - - public static boolean fulfillsAccuracy(Location location, Distance thresholdHorizontalAccuracy) { - return location.hasAccuracy() && - Distance.of(location.getAccuracy()) - .lessThan(thresholdHorizontalAccuracy); - - } -}