From 2531a36f20134cafa70147788f0a19566a81faf4 Mon Sep 17 00:00:00 2001 From: y20k Date: Mon, 3 Aug 2020 16:42:47 +0200 Subject: [PATCH] GPX output adapted for new "starred" feature --- .../java/org/y20k/trackbook/MapFragment.kt | 4 +- .../java/org/y20k/trackbook/TrackFragment.kt | 6 +-- .../{MapOverlay.kt => MapOverlayHelper.kt} | 24 +++++----- .../org/y20k/trackbook/helpers/TrackHelper.kt | 46 ++++++++++++++++++- .../trackbook/ui/MapFragmentLayoutHolder.kt | 10 ++-- .../trackbook/ui/TrackFragmentLayoutHolder.kt | 6 +-- app/src/main/res/values-sw600dp/bools.xml | 2 - 7 files changed, 71 insertions(+), 27 deletions(-) rename app/src/main/java/org/y20k/trackbook/helpers/{MapOverlay.kt => MapOverlayHelper.kt} (86%) delete mode 100644 app/src/main/res/values-sw600dp/bools.xml diff --git a/app/src/main/java/org/y20k/trackbook/MapFragment.kt b/app/src/main/java/org/y20k/trackbook/MapFragment.kt index d9f6ce0..0eefaba 100644 --- a/app/src/main/java/org/y20k/trackbook/MapFragment.kt +++ b/app/src/main/java/org/y20k/trackbook/MapFragment.kt @@ -44,7 +44,7 @@ import org.y20k.trackbook.ui.MapFragmentLayoutHolder /* * MapFragment class */ -class MapFragment : Fragment(), YesNoDialog.YesNoDialogListener, MapOverlay.MarkerListener { +class MapFragment : Fragment(), YesNoDialog.YesNoDialogListener, MapOverlayHelper.MarkerListener { /* Define log tag */ private val TAG: String = LogHelper.makeLogTag(MapFragment::class.java) @@ -75,7 +75,7 @@ class MapFragment : Fragment(), YesNoDialog.YesNoDialogListener, MapOverlay.Mark /* Overrides onStop from Fragment */ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { // initialize layout - layout = MapFragmentLayoutHolder(activity as Context, this as MapOverlay.MarkerListener, inflater, container, currentBestLocation, trackingState) + layout = MapFragmentLayoutHolder(activity as Context, this as MapOverlayHelper.MarkerListener, inflater, container, currentBestLocation, trackingState) // set up buttons layout.currentLocationButton.setOnClickListener { diff --git a/app/src/main/java/org/y20k/trackbook/TrackFragment.kt b/app/src/main/java/org/y20k/trackbook/TrackFragment.kt index d33305d..6a4e0e5 100644 --- a/app/src/main/java/org/y20k/trackbook/TrackFragment.kt +++ b/app/src/main/java/org/y20k/trackbook/TrackFragment.kt @@ -41,12 +41,12 @@ import org.y20k.trackbook.core.Track import org.y20k.trackbook.dialogs.RenameTrackDialog import org.y20k.trackbook.helpers.FileHelper import org.y20k.trackbook.helpers.LogHelper -import org.y20k.trackbook.helpers.MapOverlay +import org.y20k.trackbook.helpers.MapOverlayHelper import org.y20k.trackbook.helpers.TrackHelper import org.y20k.trackbook.ui.TrackFragmentLayoutHolder -class TrackFragment : Fragment(), RenameTrackDialog.RenameTrackListener, YesNoDialog.YesNoDialogListener, MapOverlay.MarkerListener { +class TrackFragment : Fragment(), RenameTrackDialog.RenameTrackListener, YesNoDialog.YesNoDialogListener, MapOverlayHelper.MarkerListener { /* Define log tag */ private val TAG: String = LogHelper.makeLogTag(TrackFragment::class.java) @@ -73,7 +73,7 @@ class TrackFragment : Fragment(), RenameTrackDialog.RenameTrackListener, YesNoDi /* Overrides onCreateView from Fragment */ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { // initialize layout - layout = TrackFragmentLayoutHolder(activity as Context, this as MapOverlay.MarkerListener, inflater, container, track) + layout = TrackFragmentLayoutHolder(activity as Context, this as MapOverlayHelper.MarkerListener, inflater, container, track) // set up share button layout.shareButton.setOnClickListener { diff --git a/app/src/main/java/org/y20k/trackbook/helpers/MapOverlay.kt b/app/src/main/java/org/y20k/trackbook/helpers/MapOverlayHelper.kt similarity index 86% rename from app/src/main/java/org/y20k/trackbook/helpers/MapOverlay.kt rename to app/src/main/java/org/y20k/trackbook/helpers/MapOverlayHelper.kt index 8fcb595..4f154ad 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/MapOverlay.kt +++ b/app/src/main/java/org/y20k/trackbook/helpers/MapOverlayHelper.kt @@ -1,7 +1,7 @@ /* * MapHelper.kt - * Implements the MapHelper object - * A MapHelper offers helper methods for manipulating osmdroid maps + * Implements the MapOverlayHelper class + * A MapOverlayHelper offers helper methods for creating osmdroid map overlays * * This file is part of * TRACKBOOK - Movement Recorder for Android @@ -30,15 +30,17 @@ import org.osmdroid.views.overlay.OverlayItem import org.y20k.trackbook.Keys import org.y20k.trackbook.R import org.y20k.trackbook.core.Track +import org.y20k.trackbook.core.WayPoint import java.text.DecimalFormat import java.text.SimpleDateFormat import java.util.* +import kotlin.collections.ArrayList /* - * MapHelper class + * MapOverlayHelper class */ -class MapOverlay (private var markerListener: MarkerListener) { +class MapOverlayHelper (private var markerListener: MarkerListener) { /* Interface used to communicate back to activity/fragment */ interface MarkerListener { @@ -47,14 +49,14 @@ class MapOverlay (private var markerListener: MarkerListener) { } /* Define log tag */ - private val TAG = MapOverlay::class.java.simpleName + private val TAG = MapOverlayHelper::class.java.simpleName /* Creates icon overlay for current position (used in MapFragment) */ fun createMyLocationOverlay(context: Context, location: Location, trackingState: Int): ItemizedIconOverlay { - val overlayItems = ArrayList() - val locationIsOld = LocationHelper.isOldLocation(location) + val overlayItems: ArrayList = ArrayList() + val locationIsOld:Boolean = LocationHelper.isOldLocation(location) // create marker val newMarker: Drawable @@ -76,7 +78,7 @@ class MapOverlay (private var markerListener: MarkerListener) { } // add marker to list of overlay items - val overlayItem = createOverlayItem(context, location.latitude, location.longitude, location.accuracy, location.provider, location.time) + val overlayItem: OverlayItem = createOverlayItem(context, location.latitude, location.longitude, location.accuracy, location.provider, location.time) overlayItem.setMarker(newMarker) overlayItems.add(overlayItem) @@ -88,8 +90,8 @@ class MapOverlay (private var markerListener: MarkerListener) { /* Creates icon overlay for track */ fun createTrackOverlay(context: Context, track: Track, trackingState: Int): ItemizedIconOverlay { - val overlayItems = ArrayList() - val wayPoints = track.wayPoints + val overlayItems: ArrayList = ArrayList() + val wayPoints: MutableList = track.wayPoints wayPoints.forEach { wayPoint -> // create marker @@ -120,7 +122,7 @@ class MapOverlay (private var markerListener: MarkerListener) { } // create overlay item and add to list of overlay items - val overlayItem = createOverlayItem(context, wayPoint.latitude, wayPoint.longitude, wayPoint.accuracy, wayPoint.provider, wayPoint.time) + val overlayItem: OverlayItem = createOverlayItem(context, wayPoint.latitude, wayPoint.longitude, wayPoint.accuracy, wayPoint.provider, wayPoint.time) overlayItem.setMarker(newMarker) overlayItems.add(overlayItem) } diff --git a/app/src/main/java/org/y20k/trackbook/helpers/TrackHelper.kt b/app/src/main/java/org/y20k/trackbook/helpers/TrackHelper.kt index 9e525cc..99c5fc4 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/TrackHelper.kt +++ b/app/src/main/java/org/y20k/trackbook/helpers/TrackHelper.kt @@ -161,6 +161,12 @@ object TrackHelper { " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\">\n" + // add name + gpxString += createGpxName(track) + + // add POIs + gpxString += createGpxPois(track) + // add track gpxString += createGpxTrk(track) @@ -171,6 +177,44 @@ object TrackHelper { } + /* Creates name for GPX file */ + private fun createGpxName(track: Track): String { + val gpxName = StringBuilder("") + gpxName.append("\t") + gpxName.append("Trackbook Recording: ${track.name}") + gpxName.append("\n") + return gpxName.toString() + } + + + /* Creates GPX formatted points of interest */ + private fun createGpxPois(track: Track): String { + val gpxPois = StringBuilder("") + val poiList: List = track.wayPoints.filter { it.starred } + poiList.forEach { poi -> + gpxPois.append("\t\n") + + // add name to waypoint + gpxPois.append("\t\t") + gpxPois.append("Point of interest") + gpxPois.append("\n") + + // add altitude + gpxPois.append("\t\t") + gpxPois.append(poi.altitude) + gpxPois.append("\n") + + // add closing tag + gpxPois.append("\t\n") + } + return gpxPois.toString() + } + + /* Creates GPX formatted track */ private fun createGpxTrk(track: Track): String { val gpxTrack = StringBuilder("") @@ -182,7 +226,7 @@ object TrackHelper { // add name to track gpxTrack.append("\t\t") - gpxTrack.append("Trackbook Recording: ${track.name}") + gpxTrack.append("Track") gpxTrack.append("\n") // add opening track segment tag diff --git a/app/src/main/java/org/y20k/trackbook/ui/MapFragmentLayoutHolder.kt b/app/src/main/java/org/y20k/trackbook/ui/MapFragmentLayoutHolder.kt index 66bf9ab..6783e24 100644 --- a/app/src/main/java/org/y20k/trackbook/ui/MapFragmentLayoutHolder.kt +++ b/app/src/main/java/org/y20k/trackbook/ui/MapFragmentLayoutHolder.kt @@ -44,14 +44,14 @@ import org.y20k.trackbook.R import org.y20k.trackbook.core.Track import org.y20k.trackbook.helpers.AppThemeHelper import org.y20k.trackbook.helpers.LogHelper -import org.y20k.trackbook.helpers.MapOverlay +import org.y20k.trackbook.helpers.MapOverlayHelper import org.y20k.trackbook.helpers.PreferencesHelper /* * MapFragmentLayoutHolder class */ -data class MapFragmentLayoutHolder(private var context: Context, private var markerListener: MapOverlay.MarkerListener, private var inflater: LayoutInflater, private var container: ViewGroup?, private val startLocation: Location, private val trackingState: Int) { +data class MapFragmentLayoutHolder(private var context: Context, private var markerListener: MapOverlayHelper.MarkerListener, private var inflater: LayoutInflater, private var container: ViewGroup?, private val startLocation: Location, private val trackingState: Int) { /* Define log tag */ private val TAG: String = LogHelper.makeLogTag(MapFragmentLayoutHolder::class.java) @@ -109,7 +109,7 @@ data class MapFragmentLayoutHolder(private var context: Context, private var mar mapView.overlays.add(compassOverlay) // add my location overlay - currentPositionOverlay = MapOverlay(markerListener).createMyLocationOverlay(context, startLocation, trackingState) + currentPositionOverlay = MapOverlayHelper(markerListener).createMyLocationOverlay(context, startLocation, trackingState) mapView.overlays.add(currentPositionOverlay) centerMap(startLocation) @@ -157,7 +157,7 @@ data class MapFragmentLayoutHolder(private var context: Context, private var mar /* Mark current position on map */ fun markCurrentPosition(location: Location, trackingState: Int = Keys.STATE_TRACKING_NOT) { mapView.overlays.remove(currentPositionOverlay) - currentPositionOverlay = MapOverlay(markerListener).createMyLocationOverlay(context, location, trackingState) + currentPositionOverlay = MapOverlayHelper(markerListener).createMyLocationOverlay(context, location, trackingState) mapView.overlays.add(currentPositionOverlay) } @@ -168,7 +168,7 @@ data class MapFragmentLayoutHolder(private var context: Context, private var mar mapView.overlays.remove(currentTrackOverlay) } if (track.wayPoints.isNotEmpty()) { - currentTrackOverlay = MapOverlay(markerListener).createTrackOverlay(context, track, trackingState) + currentTrackOverlay = MapOverlayHelper(markerListener).createTrackOverlay(context, track, trackingState) mapView.overlays.add(currentTrackOverlay) } } 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 5609dac..67b5a3a 100644 --- a/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt +++ b/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt @@ -50,7 +50,7 @@ import kotlin.math.roundToInt /* * TrackFragmentLayoutHolder class */ -data class TrackFragmentLayoutHolder(private var context: Context, private var markerListener: MapOverlay.MarkerListener, private var inflater: LayoutInflater, private var container: ViewGroup?, var track: Track) { +data class TrackFragmentLayoutHolder(private var context: Context, private var markerListener: MapOverlayHelper.MarkerListener, private var inflater: LayoutInflater, private var container: ViewGroup?, var track: Track) { /* Define log tag */ private val TAG: String = LogHelper.makeLogTag(TrackFragmentLayoutHolder::class.java) @@ -140,7 +140,7 @@ data class TrackFragmentLayoutHolder(private var context: Context, private var m mapView.overlays.add(compassOverlay) // create map overlay - trackOverlay = MapOverlay(markerListener).createTrackOverlay(context, track, Keys.STATE_TRACKING_NOT) + trackOverlay = MapOverlayHelper(markerListener).createTrackOverlay(context, track, Keys.STATE_TRACKING_NOT) if (track.wayPoints.isNotEmpty()) { mapView.overlays.add(trackOverlay) } @@ -168,7 +168,7 @@ data class TrackFragmentLayoutHolder(private var context: Context, private var m mapView.overlays.remove(trackOverlay) } if (track.wayPoints.isNotEmpty()) { - trackOverlay = MapOverlay(markerListener).createTrackOverlay(context, track, Keys.STATE_TRACKING_NOT) + trackOverlay = MapOverlayHelper(markerListener).createTrackOverlay(context, track, Keys.STATE_TRACKING_NOT) mapView.overlays.add(trackOverlay) } } diff --git a/app/src/main/res/values-sw600dp/bools.xml b/app/src/main/res/values-sw600dp/bools.xml deleted file mode 100644 index 3ea04e7..0000000 --- a/app/src/main/res/values-sw600dp/bools.xml +++ /dev/null @@ -1,2 +0,0 @@ - -