fixes calculation auf pauses & displays start time in addition to start date

This commit is contained in:
y20k 2020-05-14 16:16:34 +02:00
parent 8796aa9331
commit f686cac359
No known key found for this signature in database
GPG key ID: 824D4259F41FAFF6
11 changed files with 23 additions and 17 deletions

View file

@ -72,10 +72,10 @@ dependencies {
implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0'
implementation "androidx.preference:preference-ktx:1.1.0" implementation "androidx.preference:preference-ktx:1.1.1"
implementation 'androidx.navigation:navigation-fragment-ktx:2.2.1' implementation 'androidx.navigation:navigation-fragment-ktx:2.2.2'
implementation 'androidx.navigation:navigation-ui-ktx:2.2.1' implementation 'androidx.navigation:navigation-ui-ktx:2.2.2'
implementation "com.google.android.material:material:1.1.0-beta01" implementation "com.google.android.material:material:1.1.0-beta01"

View file

@ -215,7 +215,7 @@ class TrackerService(): Service(), CoroutineScope, SensorEventListener {
// set resumed flag // set resumed flag
resumed = true resumed = true
// calculate length of recording break // calculate length of recording break
track.recordingPaused = TrackHelper.calculateRecordingPaused(track.recordingStop) track.recordingPaused = track.recordingPaused + TrackHelper.calculateDurationOfPause(track.recordingStop)
// start tracking // start tracking
startTracking(newTrack = false) startTracking(newTrack = false)
} }

View file

@ -20,7 +20,6 @@ package org.y20k.trackbook.dialogs
import android.content.Context import android.content.Context
import android.text.InputType import android.text.InputType
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View
import android.widget.EditText import android.widget.EditText
import android.widget.TextView import android.widget.TextView
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
@ -51,7 +50,7 @@ class RenameTrackDialog (private var renameTrackListener: RenameTrackListener) {
// get input field // get input field
val inflater = LayoutInflater.from(context) val inflater = LayoutInflater.from(context)
val view = inflater.inflate(R.layout.dialog_rename_track, null) val view = inflater.inflate(R.layout.dialog_rename_track, null)
val inputField = view.findViewById<View>(R.id.dialog_rename_track_input_edit_text) as EditText val inputField = view.findViewById<EditText>(R.id.dialog_rename_track_input_edit_text)
// pre-fill with current track name // pre-fill with current track name
inputField.setText(trackName, TextView.BufferType.EDITABLE) inputField.setText(trackName, TextView.BufferType.EDITABLE)

View file

@ -56,19 +56,25 @@ object DateTimeHelper {
} }
/* Create sortable string from date - used for filenames */ /* Create sortable string for date - used for filenames */
fun convertToSortableDateString(date: Date): String { fun convertToSortableDateString(date: Date): String {
val dateFormat: SimpleDateFormat = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.US) val dateFormat: SimpleDateFormat = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.US)
return dateFormat.format(date) return dateFormat.format(date)
} }
/* Creates a readable string from date - used in the UI */ /* Creates a readable string for date - used in the UI */
fun convertToReadableDate(date: Date, dateStyle: Int = DateFormat.LONG): String { fun convertToReadableDate(date: Date, dateStyle: Int = DateFormat.LONG): String {
return DateFormat.getDateInstance(dateStyle, Locale.getDefault()).format(date) return DateFormat.getDateInstance(dateStyle, Locale.getDefault()).format(date)
} }
/* Creates a readable string date and time - used in the UI */
fun convertToReadableDateAndTime(date: Date, dateStyle: Int = DateFormat.SHORT, timeStyle: Int = DateFormat.SHORT): String {
return "${DateFormat.getDateInstance(dateStyle, Locale.getDefault()).format(date)} ${DateFormat.getTimeInstance(timeStyle, Locale.getDefault()).format(date)}"
}
/* Calculates time difference between two locations */ /* Calculates time difference between two locations */
fun calculateTimeDistance(previousLocation: Location?, location: Location): Long { fun calculateTimeDistance(previousLocation: Location?, location: Location): Long {
var timeDifference: Long = 0L var timeDifference: Long = 0L

View file

@ -75,7 +75,7 @@ object LocationHelper {
} }
/* Determines whether one Location reading is better than the current Location fix */ /* Determines whether one location reading is better than the current location fix */
fun isBetterLocation(location: Location, currentBestLocation: Location?): Boolean { fun isBetterLocation(location: Location, currentBestLocation: Location?): Boolean {
// Credit: https://developer.android.com/guide/topics/location/strategies.html#BestEstimate // Credit: https://developer.android.com/guide/topics/location/strategies.html#BestEstimate

View file

@ -145,7 +145,7 @@ object TrackHelper {
/* Calculates time passed since last stop of recording */ /* Calculates time passed since last stop of recording */
fun calculateRecordingPaused(recordingStop: Date): Long = fun calculateDurationOfPause(recordingStop: Date): Long =
GregorianCalendar.getInstance().time.time - recordingStop.time GregorianCalendar.getInstance().time.time - recordingStop.time

View file

@ -111,10 +111,10 @@ class TracklistAdapter(private val fragment: Fragment) : RecyclerView.Adapter<Re
val backgroundJob = Job() val backgroundJob = Job()
val uiScope = CoroutineScope(Dispatchers.Main + backgroundJob) val uiScope = CoroutineScope(Dispatchers.Main + backgroundJob)
uiScope.launch { uiScope.launch {
notifyItemRemoved(position)
val deferred: Deferred<Tracklist> = async { FileHelper.deleteTrackSuspended(context, position, tracklist) } val deferred: Deferred<Tracklist> = async { FileHelper.deleteTrackSuspended(context, position, tracklist) }
// wait for result and store in tracklist // wait for result and store in tracklist
tracklist = deferred.await() tracklist = deferred.await()
notifyItemRemoved(position)
backgroundJob.cancel() backgroundJob.cancel()
} }
} }

View file

@ -185,8 +185,8 @@ data class TrackFragmentLayoutHolder(var context: Context, var inflater: LayoutI
stepsView.text = steps stepsView.text = steps
waypointsView.text = track.wayPoints.size.toString() waypointsView.text = track.wayPoints.size.toString()
durationView.text = DateTimeHelper.convertToReadableTime(context, track.duration) durationView.text = DateTimeHelper.convertToReadableTime(context, track.duration)
recordingStartView.text = DateTimeHelper.convertToReadableDate(track.recordingStart) recordingStartView.text = DateTimeHelper.convertToReadableDateAndTime(track.recordingStart)
recordingStopView.text = DateTimeHelper.convertToReadableDate(track.recordingStart) recordingStopView.text = DateTimeHelper.convertToReadableDateAndTime(track.recordingStart)
maxAltitudeView.text = LengthUnitHelper.convertDistanceToString(track.maxAltitude, useImperialUnits) maxAltitudeView.text = LengthUnitHelper.convertDistanceToString(track.maxAltitude, useImperialUnits)
minAltitudeView.text = LengthUnitHelper.convertDistanceToString(track.minAltitude, useImperialUnits) minAltitudeView.text = LengthUnitHelper.convertDistanceToString(track.minAltitude, useImperialUnits)
positiveElevationView.text = LengthUnitHelper.convertDistanceToString(track.positiveElevation, useImperialUnits) positiveElevationView.text = LengthUnitHelper.convertDistanceToString(track.positiveElevation, useImperialUnits)

View file

@ -16,6 +16,7 @@
android:layout_marginBottom="24dp" android:layout_marginBottom="24dp"
android:hint="@string/dialog_rename_track_input_hint" android:hint="@string/dialog_rename_track_input_hint"
android:maxLines="1" android:maxLines="1"
app:endIconMode="clear_text"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"

View file

@ -1,16 +1,16 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript { buildscript {
ext.kotlin_version = '1.3.71' ext.kotlin_version = '1.3.72'
repositories { repositories {
google() google()
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.6.1' classpath 'com.android.tools.build:gradle:3.6.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.2.1" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.2.2"
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files
} }

View file

@ -1,5 +1,5 @@
# v2.0.3 - Echoes # v2.0.3 - Echoes
**2020-03-13** **2020-03-13**
- updated translation - updated translations
- minor bug fixes (e.g. plausibility check for the first location) - minor bug fixes (e.g. plausibility check for the first location)