diff --git a/app/build.gradle b/app/build.gradle index 647154b..78a4184 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId 'org.y20k.trackbook' minSdkVersion 25 targetSdkVersion 27 - versionCode 38 - versionName '2.0.1' + versionCode 39 + versionName '2.0.2' resConfigs "en", "da", "de", "fr", "id", "it", "ja", "nb-rNO", "nl", "sv", "zh-rCN" } diff --git a/app/src/main/java/org/y20k/trackbook/TrackerService.kt b/app/src/main/java/org/y20k/trackbook/TrackerService.kt index 46f6148..637a753 100644 --- a/app/src/main/java/org/y20k/trackbook/TrackerService.kt +++ b/app/src/main/java/org/y20k/trackbook/TrackerService.kt @@ -63,6 +63,7 @@ class TrackerService(): Service(), CoroutineScope, SensorEventListener { var locationAccuracyThreshold: Int = Keys.DEFAULT_THRESHOLD_LOCATION_ACCURACY var currentBestLocation: Location = LocationHelper.getDefaultLocation() var stepCountOffset: Float = 0f + var resumed: Boolean = false var track: Track = Track() var gpsLocationListenerRegistered: Boolean = false var networkLocationListenerRegistered: Boolean = false @@ -213,6 +214,8 @@ class TrackerService(): Service(), CoroutineScope, SensorEventListener { val lastWayPointIndex = track.wayPoints.size - 1 track.wayPoints.get(lastWayPointIndex).isStopOver = true } + // set resumed flag + resumed = true // calculate length of recording break track.recordingPaused = TrackHelper.calculateRecordingPaused(track.recordingStop) LogHelper.e(TAG, "We took a break for ${DateTimeHelper.convertToReadableTime(this, track.recordingPaused)}") // todo remove @@ -457,7 +460,14 @@ class TrackerService(): Service(), CoroutineScope, SensorEventListener { private val periodicTrackUpdate: Runnable = object : Runnable { override fun run() { // add waypoint to track - step count is continuously updated in onSensorChanged - track = TrackHelper.addWayPointToTrack(track, currentBestLocation, locationAccuracyThreshold) + val result: Pair = TrackHelper.addWayPointToTrack(track, currentBestLocation, locationAccuracyThreshold, resumed) + // get track from result + track = result.first + // check if waypoint was successfully added (= result.second) + if (resumed && result.second) { + // reset resumed flag, if necessary + resumed = false + } // update notification displayNotification() // save temp track using GlobalScope.launch = fire & forget (no return value from save) diff --git a/app/src/main/java/org/y20k/trackbook/helpers/NotificationHelper.kt b/app/src/main/java/org/y20k/trackbook/helpers/NotificationHelper.kt index 2f2fe02..23157bc 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/NotificationHelper.kt +++ b/app/src/main/java/org/y20k/trackbook/helpers/NotificationHelper.kt @@ -40,7 +40,6 @@ class NotificationHelper(private val trackerService: TrackerService) { private val TAG: String = LogHelper.makeLogTag(NotificationHelper::class.java) - /* Main class variables */ private val notificationManager: NotificationManager = trackerService.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager diff --git a/app/src/main/java/org/y20k/trackbook/helpers/TrackHelper.kt b/app/src/main/java/org/y20k/trackbook/helpers/TrackHelper.kt index e5c14d2..84d366c 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/TrackHelper.kt +++ b/app/src/main/java/org/y20k/trackbook/helpers/TrackHelper.kt @@ -45,7 +45,7 @@ object TrackHelper { /* Adds given locatiom as waypoint to track */ - fun addWayPointToTrack(track: Track, location: Location, locationAccuracyThreshold: Int): Track { + fun addWayPointToTrack(track: Track, location: Location, locationAccuracyThreshold: Int, resumed: Boolean): Pair { // get previous location val previousLocation: Location? @@ -69,8 +69,10 @@ object TrackHelper { && LocationHelper.isDifferentEnough(previousLocation, location)) if (shouldBeAdded) { - // update distance - track.length = track.length + LocationHelper.calculateDistance(previousLocation, location) + // update distance (do not update if resumed -> we do not want to add values calculated during a recording pause) + if (!resumed) { + track.length = track.length + LocationHelper.calculateDistance(previousLocation, location) + } if (location.altitude != 0.0) { // update altitude values @@ -78,16 +80,18 @@ object TrackHelper { track.maxAltitude = location.altitude track.minAltitude = location.altitude } else { - // calculate elevation values + // calculate elevation values (upwards / downwards movements) val elevationDifferences: Pair = LocationHelper.calculateElevationDifferences(previousLocation, location, track) - // check if significant differences were calculated + // check if any differences were calculated if (elevationDifferences != Pair(track.positiveElevation, track.negativeElevation)) { // update altitude values if (location.altitude > track.maxAltitude) track.maxAltitude = location.altitude if (location.altitude < track.minAltitude) track.minAltitude = location.altitude - // update elevation values - track.positiveElevation = elevationDifferences.first - track.negativeElevation = elevationDifferences.second + // update elevation values (do not update if resumed -> we do not want to add values calculated during a recording pause) + if (!resumed) { + track.positiveElevation = elevationDifferences.first + track.negativeElevation = elevationDifferences.second + } } } } @@ -114,7 +118,7 @@ object TrackHelper { track.wayPoints.add(WayPoint(location.provider, location.latitude, location.longitude, location.altitude, location.accuracy, location.time, track.length, numberOfSatellites)) } - return track + return Pair(track, shouldBeAdded) } diff --git a/build.gradle b/build.gradle index d68504b..f42cf58 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.6.0' + classpath 'com.android.tools.build:gradle:3.6.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.2.0" // NOTE: Do not place your application dependencies here; they belong