store total distance, duration, etc.

master
y20k 2021-06-21 17:47:59 +02:00
parent cd621ad368
commit 18a1164578
No known key found for this signature in database
GPG Key ID: 824D4259F41FAFF6
4 changed files with 46 additions and 5 deletions

View File

@ -33,7 +33,11 @@ import java.util.*
@Parcelize @Parcelize
data class Tracklist (@Expose val tracklistFormatVersion: Int = Keys.CURRENT_TRACKLIST_FORMAT_VERSION, data class Tracklist (@Expose val tracklistFormatVersion: Int = Keys.CURRENT_TRACKLIST_FORMAT_VERSION,
@Expose val tracklistElements: MutableList<TracklistElement> = mutableListOf<TracklistElement>(), @Expose val tracklistElements: MutableList<TracklistElement> = mutableListOf<TracklistElement>(),
@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 */ /* Return trackelement for given track id */
fun getTrackElement(trackId: Long): TracklistElement? { fun getTrackElement(trackId: Long): TracklistElement? {

View File

@ -181,6 +181,10 @@ object FileHelper {
return suspendCoroutine { cont -> return suspendCoroutine { cont ->
val tracklist: Tracklist = readTracklist(context) val tracklist: Tracklist = readTracklist(context)
tracklist.tracklistElements.add(track.toTracklistElement(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)) cont.resume(saveTracklist(context, tracklist, modificationDate))
} }
} }

View File

@ -20,9 +20,14 @@ package org.y20k.trackbook.helpers
import android.content.Context import android.content.Context
import android.location.Location import android.location.Location
import android.widget.Toast 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.Keys
import org.y20k.trackbook.R import org.y20k.trackbook.R
import org.y20k.trackbook.core.Track import org.y20k.trackbook.core.Track
import org.y20k.trackbook.core.Tracklist
import org.y20k.trackbook.core.TracklistElement import org.y20k.trackbook.core.TracklistElement
import org.y20k.trackbook.core.WayPoint import org.y20k.trackbook.core.WayPoint
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
@ -248,4 +253,27 @@ object TrackHelper {
return track 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)
}
}
} }

View File

@ -25,6 +25,7 @@ import android.view.ViewGroup
import android.widget.ImageButton import android.widget.ImageButton
import android.widget.TextView import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -66,6 +67,10 @@ class TracklistAdapter(private val fragment: Fragment) : RecyclerView.Adapter<Re
// load tracklist // load tracklist
tracklist = FileHelper.readTracklist(context) tracklist = FileHelper.readTracklist(context)
tracklist.tracklistElements.sortByDescending { tracklistElement -> tracklistElement.date } tracklist.tracklistElements.sortByDescending { tracklistElement -> 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<Re
trackElementViewHolder.trackNameView.text = tracklist.tracklistElements[position].name trackElementViewHolder.trackNameView.text = tracklist.tracklistElements[position].name
trackElementViewHolder.trackDataView.text = createTrackDataString(position) trackElementViewHolder.trackDataView.text = createTrackDataString(position)
when (tracklist.tracklistElements[position].starred) { when (tracklist.tracklistElements[position].starred) {
true -> trackElementViewHolder.starButton.setImageDrawable(context.getDrawable(R.drawable.ic_star_filled_24dp)) true -> trackElementViewHolder.starButton.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_star_filled_24dp))
false -> trackElementViewHolder.starButton.setImageDrawable(context.getDrawable(R.drawable.ic_star_outline_24dp)) false -> trackElementViewHolder.starButton.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_star_outline_24dp))
} }
trackElementViewHolder.trackElement.setOnClickListener { trackElementViewHolder.trackElement.setOnClickListener {
tracklistListener.onTrackElementTapped(tracklist.tracklistElements[position]) tracklistListener.onTrackElementTapped(tracklist.tracklistElements[position])
@ -134,11 +139,11 @@ class TracklistAdapter(private val fragment: Fragment) : RecyclerView.Adapter<Re
val starButton: ImageButton = view as ImageButton val starButton: ImageButton = view as ImageButton
when (tracklist.tracklistElements[position].starred) { when (tracklist.tracklistElements[position].starred) {
true -> { true -> {
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 tracklist.tracklistElements[position].starred = false
} }
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 tracklist.tracklistElements[position].starred = true
} }
} }