adds velocity in mph / km/h to track statistics sheet (see #69)

master
y20k 2020-05-15 10:06:47 +02:00
parent e0e47ea279
commit befdeff428
No known key found for this signature in database
GPG Key ID: 824D4259F41FAFF6
5 changed files with 73 additions and 27 deletions

View File

@ -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) {

View File

@ -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)

View File

@ -166,6 +166,52 @@
app:layout_constraintTop_toTopOf="@+id/statistics_p_duration"
tools:text="@string/sample_text_default_data" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/statistics_p_recording_paused"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/statistics_sheet_p_recording_paused"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body2"
android:textColor="@color/text_lightweight"
app:layout_constraintStart_toStartOf="@+id/statistics_p_duration"
app:layout_constraintTop_toBottomOf="@+id/statistics_p_duration" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/statistics_data_recording_paused"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:textColor="@color/text_default"
app:layout_constraintBottom_toBottomOf="@+id/statistics_p_recording_paused"
app:layout_constraintStart_toEndOf="@+id/statistics_p_recording_paused"
app:layout_constraintTop_toTopOf="@+id/statistics_p_recording_paused"
tools:text="@string/sample_text_default_data" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/statistics_p_velocity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/statistics_sheet_p_velocity"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body2"
android:textColor="@color/text_lightweight"
app:layout_constraintStart_toStartOf="@+id/statistics_p_recording_paused"
app:layout_constraintTop_toBottomOf="@+id/statistics_p_recording_paused" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/statistics_data_velocity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:textColor="@color/text_default"
app:layout_constraintBottom_toBottomOf="@+id/statistics_p_velocity"
app:layout_constraintStart_toEndOf="@+id/statistics_p_velocity"
app:layout_constraintTop_toTopOf="@+id/statistics_p_velocity"
tools:text="@string/sample_text_default_data" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/statistics_p_recording_start"
android:layout_width="wrap_content"
@ -174,8 +220,8 @@
android:text="@string/statistics_sheet_p_recording_start"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body2"
android:textColor="@color/text_lightweight"
app:layout_constraintStart_toStartOf="@+id/statistics_p_recording_paused"
app:layout_constraintTop_toBottomOf="@+id/statistics_p_recording_paused" />
app:layout_constraintStart_toStartOf="@+id/statistics_p_velocity"
app:layout_constraintTop_toBottomOf="@+id/statistics_p_velocity" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/statistics_data_recording_start"
@ -212,29 +258,6 @@
app:layout_constraintTop_toTopOf="@+id/statistics_p_recording_stop"
tools:text="@string/sample_text_default_data" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/statistics_data_recording_paused"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:textColor="@color/text_default"
app:layout_constraintBottom_toBottomOf="@+id/statistics_p_recording_paused"
app:layout_constraintStart_toEndOf="@+id/statistics_p_recording_paused"
app:layout_constraintTop_toTopOf="@+id/statistics_p_recording_paused"
tools:text="@string/sample_text_default_data" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/statistics_p_recording_paused"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/statistics_sheet_p_recording_paused"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body2"
android:textColor="@color/text_lightweight"
app:layout_constraintStart_toStartOf="@+id/statistics_p_duration"
app:layout_constraintTop_toBottomOf="@+id/statistics_p_duration" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/statistics_p_positive_elevation"
android:layout_width="wrap_content"

View File

@ -42,6 +42,7 @@
<string name="statistics_sheet_p_min_altitude">Tiefster Wegpunkt:</string>
<string name="statistics_sheet_p_positive_elevation">Höhenmeter (bergauf):</string>
<string name="statistics_sheet_p_negative_elevation">Höhenmeter (bergab):</string>
<string name="statistics_sheet_p_velocity">Durchschnittliche Geschwindigkeit:</string>
<!-- onboarding layout -->
<string name="layout_onboarding_description_app_icon">Trackbook App-Symbol</string>
<!-- track tab onboarding -->

View File

@ -58,6 +58,7 @@
<string name="statistics_sheet_p_min_altitude">Lowest waypoint:</string>
<string name="statistics_sheet_p_positive_elevation">Elevation (uphill):</string>
<string name="statistics_sheet_p_negative_elevation">Elevation (downhill):</string>
<string name="statistics_sheet_p_velocity">Average velocity:</string>
<!-- Recording Quick Settings Tile -->
<string name="quick_settings_tile_title_default">Recording</string>
<string name="quick_settings_tile_title_start">Start Recording</string>