Commit b4ce1610 authored by Bartek Fabiszewski's avatar Bartek Fabiszewski
Browse files

Add fix for GPS rollover bug, closes #78

parent c39c3a9d
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -32,6 +32,13 @@ class LocationHelper {
    private final Context context;
    private final LocationManager locationManager;

    // millis 1999-08-21T23:59:42+00:00
    private static final long FIRST_ROLLOVER_TIMESTAMP = 935279982000L;
    // millis 2019-04-06T23:59:42+00:00
    private static final long SECOND_ROLLOVER_TIMESTAMP = 1554595182000L;
    // 1024 weeks in milliseconds
    private static final long ROLLOVER_MILLIS = 1024 * 7 * 24 * 60 * 60 * 1000L;

    private boolean liveSync = false;
    private int maxAccuracy;
    private float minDistance;
@@ -249,6 +256,20 @@ class LocationHelper {
        return liveSync;
    }


    /**
     * Fix GPS week count rollover bug if needed
     * https://galileognss.eu/gps-week-number-rollover-april-6-2019/
     * @param location Location
     */
    static void handleRolloverBug(Location location) {
        long gpsTime = location.getTime();
        if (gpsTime > FIRST_ROLLOVER_TIMESTAMP && gpsTime < SECOND_ROLLOVER_TIMESTAMP) {
            if (Logger.DEBUG) { Log.d(TAG, "[Fixing GPS rollover bug: " + gpsTime + "]"); }
            location.setTime(gpsTime + ROLLOVER_MILLIS);
        }
    }

    /**
     * Logger exceptions
     */
+2 −0
Original line number Diff line number Diff line
@@ -300,6 +300,8 @@ public class LoggerService extends Service {
        public void onLocationChanged(Location location) {
            if (Logger.DEBUG) { Log.d(TAG, "[location changed: " + location + "]"); }

            LocationHelper.handleRolloverBug(location);

            if (meetsCriteria(location)) {
                lastLocation = location;
                DbAccess.writeLocation(LoggerService.this, location);