package de.tstratmann.gpstracker
import android.content.Context
import android.location.Location
import java.io.File
import java.text.SimpleDateFormat
import java.util.*
class GPXManager(private val context: Context) {
private var currentFile: File? = null
fun startNewSession(): File {
val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
val fileName = "track_$timeStamp.gpx"
val file = File(context.filesDir, fileName)
file.writeText(getGpxHeader())
currentFile = file
return file
}
fun appendLocation(location: Location) {
currentFile?.let { file ->
val time = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US).apply {
timeZone = TimeZone.getTimeZone("UTC")
}.format(Date(location.time))
val trkpt = """
${location.altitude}
""".trimIndent()
val content = file.readText().removeSuffix(getGpxFooter())
file.writeText(content + trkpt + getGpxFooter())
}
}
fun getActivitiesCount(): Int {
return context.filesDir.listFiles { _, name -> name.endsWith(".gpx") }?.size ?: 0
}
fun getAllFiles(): List {
return context.filesDir.listFiles { _, name -> name.endsWith(".gpx") }?.toList() ?: emptyList()
}
private fun getGpxHeader() = """
Track ${SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault()).format(Date())}
""".trimIndent()
private fun getGpxFooter() = """
""".trimIndent()
}