Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions aat-android/src/main/kotlin/ch/bailu/aat/menus/AbsFileMenu.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package ch.bailu.aat.menus
import android.view.Menu
import ch.bailu.aat.R
import ch.bailu.aat.activities.ActivityContext
import ch.bailu.aat.activities.CockpitSplitActivity
import ch.bailu.aat.app.ActivitySwitcher
import ch.bailu.aat.util.fs.AndroidFileAction
import ch.bailu.aat_lib.resources.Res
import ch.bailu.aat_lib.util.fs.AppDirectory
Expand Down Expand Up @@ -51,6 +53,10 @@ abstract class AbsFileMenu(private val aContext: ActivityContext, protected val
}
add(menu, R.string.file_reload) { FileAction.reloadPreview(aContext.appContext, file) }
add(menu, R.string.file_mock) { FileAction.useForMockLocation(aContext.appContext, file) }
add(menu, R.string.file_resume) {
FileAction.resumeTracker(aContext.appContext, file)
ActivitySwitcher.start(aContext, CockpitSplitActivity::class.java)
}
}

protected fun inflateOverlay(menu: Menu) {
Expand Down
1 change: 1 addition & 0 deletions aat-android/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,7 @@
<string name="file_rename">Rename file</string>
<string name="file_overlay">Use as overlay</string>
<string name="file_mock">Use for mock location</string>
<string name="file_resume">Resume from file</string>
<string name="file_delete_ask">Delete file?</string>
<string name="file_send">Send…</string>
<string name="file_view">View/Edit…</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,8 @@ open class Strings {

open fun file_mock(): String = "Use for mock location"

open fun file_resume(): String = "Resume from file"

open fun file_delete_ask(): String = "Delete file?"

open fun file_send(): String = "Send…"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ch.bailu.aat_lib.service.tracker

import ch.bailu.aat_lib.gpx.GpxList
import ch.bailu.aat_lib.gpx.information.GpxInformation
import ch.bailu.aat_lib.gpx.information.StateID
import ch.bailu.aat_lib.gpx.attributes.GpxAttributes
Expand All @@ -12,6 +13,9 @@ abstract class Logger : GpxInformation(), Closeable {

open fun logPause() {}

@Throws(IOException::class)
abstract fun logAllFrom(list: GpxList)

@Throws(IOException::class)
abstract fun log(tp: GpxPointInterface, attr: GpxAttributes)

Expand All @@ -30,6 +34,7 @@ abstract class Logger : GpxInformation(), Closeable {

companion object {
val NULL_LOGGER: Logger = object : Logger() {
override fun logAllFrom(list: GpxList) {}
override fun log(tp: GpxPointInterface, attr: GpxAttributes) {}
override fun flush() {}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package ch.bailu.aat_lib.service.tracker

import ch.bailu.aat_lib.file.xml.writer.GpxListWriter
import ch.bailu.aat_lib.gpx.GpxList
import ch.bailu.aat_lib.gpx.GpxListIterator
import ch.bailu.aat_lib.gpx.GpxPoint
import ch.bailu.aat_lib.gpx.GpxPointNode
import ch.bailu.aat_lib.gpx.attributes.GpxAttributes
Expand Down Expand Up @@ -49,21 +50,47 @@ class TrackLogger(val sdirectory: SolidDataDirectory, private val presetIndex: I
}
}

@Throws(IOException::class)
override fun log(tp: GpxPointInterface, attr: GpxAttributes) {
private fun append(tp: GpxPointInterface, attr: GpxAttributes) {
if (requestSegment) {
requestSegment = false
track.appendToNewSegment(GpxPoint(tp), attr)
} else {
track.appendToCurrentSegment(GpxPoint(tp), attr)
}
}

private fun postAppend() {
val node = track.pointList.last
if (node is GpxPointNode) {
setVisibleTrackPoint(node)
}
writer.writeNewPoints()
}

@Throws(IOException::class)
override fun logAllFrom(src: GpxList) {
requestSegment = true

val i = GpxListIterator(src)
while (i.nextPoint()) {
if (i.isFirstInSegment)
requestSegment = true

val point = i.getPoint()
append(point, point.getAttributes())
}

requestSegment = true

postAppend()
}

@Throws(IOException::class)
override fun log(tp: GpxPointInterface, attr: GpxAttributes) {
append(tp, attr)
postAppend()
}

/**
* Flush internal buffers to the output file.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package ch.bailu.aat_lib.service.tracker
import ch.bailu.aat_lib.broadcaster.AppBroadcaster
import ch.bailu.aat_lib.broadcaster.BroadcastReceiver
import ch.bailu.aat_lib.broadcaster.Broadcaster
import ch.bailu.aat_lib.gpx.GpxList
import ch.bailu.aat_lib.gpx.information.GpxInformation
import ch.bailu.aat_lib.gpx.information.StateID
import ch.bailu.aat_lib.preferences.system.SolidDataDirectory
import ch.bailu.aat_lib.service.ServicesInterface
import ch.bailu.aat_lib.service.VirtualService
Expand Down Expand Up @@ -51,6 +53,15 @@ class TrackerService(
broadcaster.unregister(onLocation)
}

@Synchronized
override fun resumeLogger(old: GpxList) {
if (internal.logger.getState() != StateID.OFF)
throw IllegalStateException("Logger is already on")

onStartStop()
internal.logger.logAllFrom(old)
}

@Synchronized
override fun updateTrack() {
internal.getState().updateTrack()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package ch.bailu.aat_lib.service.tracker

import ch.bailu.aat_lib.gpx.GpxList
import ch.bailu.aat_lib.gpx.information.GpxInformationProvider

interface TrackerServiceInterface : StateInterface,
GpxInformationProvider {
fun getPresetIndex(): Int

fun resumeLogger(old: GpxList)
}
15 changes: 15 additions & 0 deletions aat-lib/src/main/java/ch/bailu/aat_lib/util/fs/FileAction.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ package ch.bailu.aat_lib.util.fs

import ch.bailu.aat_lib.app.AppContext
import ch.bailu.aat_lib.broadcaster.AppBroadcaster
import ch.bailu.aat_lib.file.xml.parser.gpx.GpxListReaderXml
import ch.bailu.aat_lib.gpx.attributes.AutoPause
import ch.bailu.aat_lib.gpx.information.StateID
import ch.bailu.aat_lib.logger.AppLog
import ch.bailu.aat_lib.preferences.file_list.SolidDirectoryQuery
import ch.bailu.aat_lib.preferences.location.SolidMockLocationFile
Expand Down Expand Up @@ -38,6 +41,18 @@ object FileAction {
)
}

fun resumeTracker(context: AppContext, file: Foc) {
val trackerService = context.services.getTrackerService()

try {
trackerService.resumeLogger(GpxListReaderXml(file, AutoPause.NULL).gpxList)
} catch (e: IOException) {
AppLog.e(this, e)
} catch (e: IllegalStateException) {
AppLog.e(this, e)
}
}

/**
* Copy source to destination.
* If destination already exists, try creating a new file name
Expand Down