From 18a1164578b2bc196431ae65e64dfd5c338fceda Mon Sep 17 00:00:00 2001 From: y20k Date: Mon, 21 Jun 2021 17:47:59 +0200 Subject: [PATCH] store total distance, duration, etc. --- .../java/org/y20k/trackbook/core/Tracklist.kt | 6 +++- .../org/y20k/trackbook/helpers/FileHelper.kt | 4 +++ .../org/y20k/trackbook/helpers/TrackHelper.kt | 28 +++++++++++++++++++ .../trackbook/tracklist/TracklistAdapter.kt | 13 ++++++--- 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/y20k/trackbook/core/Tracklist.kt b/app/src/main/java/org/y20k/trackbook/core/Tracklist.kt index 53ec512..d109ce4 100644 --- a/app/src/main/java/org/y20k/trackbook/core/Tracklist.kt +++ b/app/src/main/java/org/y20k/trackbook/core/Tracklist.kt @@ -33,7 +33,11 @@ import java.util.* @Parcelize data class Tracklist (@Expose val tracklistFormatVersion: Int = Keys.CURRENT_TRACKLIST_FORMAT_VERSION, @Expose val tracklistElements: MutableList = mutableListOf(), - @Expose var modificationDate: Date = Date()): Parcelable { + @Expose var modificationDate: Date = Date(), + @Expose var totalDistanceAll: Float = 0f, + @Expose var totalDurationAll: Long = 0L, + @Expose var totalRecordingPausedAll: Long = 0L, + @Expose var totalStepCountAll: Float = 0f): Parcelable { /* Return trackelement for given track id */ fun getTrackElement(trackId: Long): TracklistElement? { diff --git a/app/src/main/java/org/y20k/trackbook/helpers/FileHelper.kt b/app/src/main/java/org/y20k/trackbook/helpers/FileHelper.kt index a0dd186..6b92289 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/FileHelper.kt +++ b/app/src/main/java/org/y20k/trackbook/helpers/FileHelper.kt @@ -181,6 +181,10 @@ object FileHelper { return suspendCoroutine { cont -> val tracklist: Tracklist = readTracklist(context) tracklist.tracklistElements.add(track.toTracklistElement(context)) + tracklist.totalDistanceAll += track.length + tracklist.totalDurationAll += track.duration + tracklist.totalRecordingPausedAll += track.recordingPaused + tracklist.totalStepCountAll += track.stepCount cont.resume(saveTracklist(context, tracklist, modificationDate)) } } 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 a329bb8..41dc59f 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/TrackHelper.kt +++ b/app/src/main/java/org/y20k/trackbook/helpers/TrackHelper.kt @@ -20,9 +20,14 @@ package org.y20k.trackbook.helpers import android.content.Context import android.location.Location import android.widget.Toast +import androidx.core.net.toUri +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers.IO +import kotlinx.coroutines.launch import org.y20k.trackbook.Keys import org.y20k.trackbook.R import org.y20k.trackbook.core.Track +import org.y20k.trackbook.core.Tracklist import org.y20k.trackbook.core.TracklistElement import org.y20k.trackbook.core.WayPoint import java.text.SimpleDateFormat @@ -248,4 +253,27 @@ object TrackHelper { return track } + + /* Calculates total distance, duration and pause */ + fun calculateAndSaveTrackTotals(context: Context, tracklist: Tracklist) { + CoroutineScope(IO).launch { + var totalDistanceAll: Float = 0f + var totalDurationAll: Long = 0L + var totalRecordingPausedAll: Long = 0L + var totalStepCountAll: Float = 0f + tracklist.tracklistElements.forEach { tracklistElement -> + val track: Track = FileHelper.readTrack(context, tracklistElement.trackUriString.toUri()) + totalDistanceAll += track.length + totalDurationAll += track.duration + totalRecordingPausedAll += track.recordingPaused + totalStepCountAll += track.stepCount + } + tracklist.totalDistanceAll = totalDistanceAll + tracklist.totalDurationAll = totalDurationAll + tracklist.totalRecordingPausedAll = totalRecordingPausedAll + tracklist.totalStepCountAll = totalStepCountAll + FileHelper.saveTracklistSuspended(context, tracklist, GregorianCalendar.getInstance().time) + } + } + } diff --git a/app/src/main/java/org/y20k/trackbook/tracklist/TracklistAdapter.kt b/app/src/main/java/org/y20k/trackbook/tracklist/TracklistAdapter.kt index aace758..8e9bb3a 100644 --- a/app/src/main/java/org/y20k/trackbook/tracklist/TracklistAdapter.kt +++ b/app/src/main/java/org/y20k/trackbook/tracklist/TracklistAdapter.kt @@ -25,6 +25,7 @@ import android.view.ViewGroup import android.widget.ImageButton import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView @@ -66,6 +67,10 @@ class TracklistAdapter(private val fragment: Fragment) : RecyclerView.Adapter tracklistElement.date } + // calculate total duration and distance, if necessary + if (tracklist.tracklistElements.isNotEmpty() && tracklist.totalDurationAll == 0L) { + TrackHelper.calculateAndSaveTrackTotals(context, tracklist) + } } @@ -88,8 +93,8 @@ class TracklistAdapter(private val fragment: Fragment) : RecyclerView.Adapter trackElementViewHolder.starButton.setImageDrawable(context.getDrawable(R.drawable.ic_star_filled_24dp)) - false -> trackElementViewHolder.starButton.setImageDrawable(context.getDrawable(R.drawable.ic_star_outline_24dp)) + true -> trackElementViewHolder.starButton.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_star_filled_24dp)) + false -> trackElementViewHolder.starButton.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_star_outline_24dp)) } trackElementViewHolder.trackElement.setOnClickListener { tracklistListener.onTrackElementTapped(tracklist.tracklistElements[position]) @@ -134,11 +139,11 @@ class TracklistAdapter(private val fragment: Fragment) : RecyclerView.Adapter { - starButton.setImageDrawable(context.getDrawable(R.drawable.ic_star_outline_24dp)) + starButton.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_star_outline_24dp)) tracklist.tracklistElements[position].starred = false } false -> { - starButton.setImageDrawable(context.getDrawable(R.drawable.ic_star_filled_24dp)) + starButton.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_star_filled_24dp)) tracklist.tracklistElements[position].starred = true } }