From befdeff428f6202147dab07b31881e71db48b30f Mon Sep 17 00:00:00 2001 From: y20k Date: Fri, 15 May 2020 10:06:47 +0200 Subject: [PATCH] adds velocity in mph / km/h to track statistics sheet (see #69) --- .../trackbook/helpers/LengthUnitHelper.kt | 22 +++++- .../trackbook/ui/TrackFragmentLayoutHolder.kt | 3 + app/src/main/res/layout/track_statistics.xml | 73 ++++++++++++------- app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 5 files changed, 73 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/org/y20k/trackbook/helpers/LengthUnitHelper.kt b/app/src/main/java/org/y20k/trackbook/helpers/LengthUnitHelper.kt index 1e5bc0d..a5b1e51 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/LengthUnitHelper.kt +++ b/app/src/main/java/org/y20k/trackbook/helpers/LengthUnitHelper.kt @@ -17,6 +17,8 @@ package org.y20k.trackbook.helpers +import java.math.BigDecimal +import java.math.RoundingMode import java.text.NumberFormat import java.util.* @@ -27,13 +29,13 @@ import java.util.* object LengthUnitHelper { - /* Converts for the given uni System a distance value to a readable string */ + /* Converts for the given unit system a distance value to a readable string */ fun convertDistanceToString(distance: Float, useImperial: Boolean = false): String { return convertDistanceToString(distance.toDouble(), useImperial) } - /* Converts for the given uni System a distance value to a readable string */ + /* Converts for the given unit system a distance value to a readable string */ fun convertDistanceToString(distance: Double, useImperial: Boolean = false): String { val readableDistance: Double val unit: String @@ -93,6 +95,22 @@ object LengthUnitHelper { } + /* Converts for the given unit System distance and duration values to a readable velocity string */ + fun convertToVelocityString(trackDuration: Long, trackRecordingPause: Long, trackLength: Float, useImperialUnits: Boolean = false) : String { + // duration minus pause in seconds + val duration: Long = (trackDuration - trackRecordingPause) / 1000L + // speed in km/h / mph + val velocity: Double = convertMetersPerSecond((trackLength / duration), useImperialUnits) + // create readable speed string + var bd: BigDecimal = BigDecimal.valueOf(velocity) + bd = bd.setScale(1, RoundingMode.HALF_UP) + when (useImperialUnits) { + true -> return "${bd.toPlainString()} mph" + false -> return "${bd.toPlainString()} km/h" + } + } + + /* Coverts meters per second to either km/h or mph */ fun convertMetersPerSecond(metersPerSecond: Float, useImperial: Boolean = false): Double { if (useImperial) { diff --git a/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt b/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt index 159c2da..5ed80ce 100644 --- a/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt +++ b/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt @@ -73,6 +73,7 @@ data class TrackFragmentLayoutHolder(var context: Context, var inflater: LayoutI private val stepsView: MaterialTextView private val waypointsView: MaterialTextView private val durationView: MaterialTextView + private val velocityView: MaterialTextView private val recordingStartView: MaterialTextView private val recordingStopView: MaterialTextView private val recordingPausedView: MaterialTextView @@ -112,6 +113,7 @@ data class TrackFragmentLayoutHolder(var context: Context, var inflater: LayoutI stepsView = rootView.findViewById(R.id.statistics_data_steps) waypointsView = rootView.findViewById(R.id.statistics_data_waypoints) durationView = rootView.findViewById(R.id.statistics_data_duration) + velocityView = rootView.findViewById(R.id.statistics_data_velocity) recordingStartView = rootView.findViewById(R.id.statistics_data_recording_start) recordingStopView = rootView.findViewById(R.id.statistics_data_recording_stop) recordingPausedLabelView = rootView.findViewById(R.id.statistics_p_recording_paused) @@ -185,6 +187,7 @@ data class TrackFragmentLayoutHolder(var context: Context, var inflater: LayoutI stepsView.text = steps waypointsView.text = track.wayPoints.size.toString() durationView.text = DateTimeHelper.convertToReadableTime(context, track.duration) + velocityView.text = LengthUnitHelper.convertToVelocityString(track.duration, track.recordingPaused, track.length, useImperialUnits) recordingStartView.text = DateTimeHelper.convertToReadableDateAndTime(track.recordingStart) recordingStopView.text = DateTimeHelper.convertToReadableDateAndTime(track.recordingStart) maxAltitudeView.text = LengthUnitHelper.convertDistanceToString(track.maxAltitude, useImperialUnits) diff --git a/app/src/main/res/layout/track_statistics.xml b/app/src/main/res/layout/track_statistics.xml index a914935..3f898c6 100755 --- a/app/src/main/res/layout/track_statistics.xml +++ b/app/src/main/res/layout/track_statistics.xml @@ -166,6 +166,52 @@ app:layout_constraintTop_toTopOf="@+id/statistics_p_duration" tools:text="@string/sample_text_default_data" /> + + + + + + + + + app:layout_constraintStart_toStartOf="@+id/statistics_p_velocity" + app:layout_constraintTop_toBottomOf="@+id/statistics_p_velocity" /> - - - - Tiefster Wegpunkt: Höhenmeter (bergauf): Höhenmeter (bergab): + Durchschnittliche Geschwindigkeit: Trackbook App-Symbol diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6e6f4d5..09e1726 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -58,6 +58,7 @@ Lowest waypoint: Elevation (uphill): Elevation (downhill): + Average velocity: Recording Start Recording