From fa43dde01707fd0ebbc9cbe86386036f5b174471 Mon Sep 17 00:00:00 2001 From: y20k Date: Tue, 9 Mar 2021 22:27:42 +0100 Subject: [PATCH] mark start and end of a track with a pin icon (see #95) --- .../java/org/y20k/trackbook/MapFragment.kt | 8 +- .../java/org/y20k/trackbook/TrackFragment.kt | 6 +- .../trackbook/helpers/MapOverlayHelper.kt | 34 ++++++--- .../trackbook/ui/MapFragmentLayoutHolder.kt | 6 +- .../trackbook/ui/TrackFragmentLayoutHolder.kt | 6 +- .../ic_marker_track_end_blue_36dp.xml | 10 --- .../ic_marker_track_end_blue_48dp.xml | 12 +++ .../ic_marker_track_end_starred_blue_48dp.xml | 13 ++++ .../ic_marker_track_start_blue_48dp.xml | 12 +++ ...c_marker_track_start_starred_blue_48dp.xml | 13 ++++ assets/Location Marker with Pin 24px.svg | 68 ----------------- ....svg => template-location-marker-24px.svg} | 0 ...template-location-marker-with-pin-48px.svg | 74 +++++++++++++++++++ 13 files changed, 160 insertions(+), 102 deletions(-) delete mode 100644 app/src/main/res/drawable/ic_marker_track_end_blue_36dp.xml create mode 100644 app/src/main/res/drawable/ic_marker_track_end_blue_48dp.xml create mode 100644 app/src/main/res/drawable/ic_marker_track_end_starred_blue_48dp.xml create mode 100644 app/src/main/res/drawable/ic_marker_track_start_blue_48dp.xml create mode 100644 app/src/main/res/drawable/ic_marker_track_start_starred_blue_48dp.xml delete mode 100644 assets/Location Marker with Pin 24px.svg rename assets/{Location Marker 24px.svg => template-location-marker-24px.svg} (100%) create mode 100644 assets/template-location-marker-with-pin-48px.svg diff --git a/app/src/main/java/org/y20k/trackbook/MapFragment.kt b/app/src/main/java/org/y20k/trackbook/MapFragment.kt index 1e15891..3be2fca 100644 --- a/app/src/main/java/org/y20k/trackbook/MapFragment.kt +++ b/app/src/main/java/org/y20k/trackbook/MapFragment.kt @@ -181,11 +181,11 @@ class MapFragment : Fragment(), YesNoDialog.YesNoDialogListener, MapOverlayHelpe /* Overrides onMarkerTapped from MarkerListener */ - override fun onMarkerTapped(latitude: Double, longitude: Double) { - super.onMarkerTapped(latitude, longitude) + override fun onMarkerTapped(latitude: Double, longitude: Double, displayStartEndMarker: Boolean) { + super.onMarkerTapped(latitude, longitude, displayStartEndMarker) if (bound) { track = TrackHelper.toggleStarred(activity as Context, track, latitude, longitude) - layout.overlayCurrentTrack(track, trackingState) + layout.overlayCurrentTrack(track, trackingState, displayStartEndMarker) trackerService.track = track } } @@ -320,7 +320,7 @@ class MapFragment : Fragment(), YesNoDialog.YesNoDialogListener, MapOverlayHelpe trackingState = trackerService.trackingState // update location and track layout.markCurrentPosition(currentBestLocation, trackingState) - layout.overlayCurrentTrack(track, trackingState) + layout.overlayCurrentTrack(track, trackingState, displayStartEndMarker = false) // center map, if it had not been dragged/zoomed before if (!layout.userInteraction) { layout.centerMap(currentBestLocation, true)} // show error snackbar if necessary diff --git a/app/src/main/java/org/y20k/trackbook/TrackFragment.kt b/app/src/main/java/org/y20k/trackbook/TrackFragment.kt index 230ee28..e20592e 100644 --- a/app/src/main/java/org/y20k/trackbook/TrackFragment.kt +++ b/app/src/main/java/org/y20k/trackbook/TrackFragment.kt @@ -162,11 +162,11 @@ class TrackFragment : Fragment(), RenameTrackDialog.RenameTrackListener, YesNoDi /* Overrides onMarkerTapped from MarkerListener */ - override fun onMarkerTapped(latitude: Double, longitude: Double) { - super.onMarkerTapped(latitude, longitude) + override fun onMarkerTapped(latitude: Double, longitude: Double, displayStartEndMarker: Boolean) { + super.onMarkerTapped(latitude, longitude, displayStartEndMarker) // update track display track = TrackHelper.toggleStarred(activity as Context, track, latitude, longitude) - layout.updateTrackOverlay(track) + layout.updateTrackOverlay(track, displayStartEndMarker) // save track GlobalScope.launch { FileHelper.saveTrackSuspended(track, true) diff --git a/app/src/main/java/org/y20k/trackbook/helpers/MapOverlayHelper.kt b/app/src/main/java/org/y20k/trackbook/helpers/MapOverlayHelper.kt index e7f20f7..70ada89 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/MapOverlayHelper.kt +++ b/app/src/main/java/org/y20k/trackbook/helpers/MapOverlayHelper.kt @@ -44,7 +44,7 @@ class MapOverlayHelper (private var markerListener: MarkerListener) { /* Interface used to communicate back to activity/fragment */ interface MarkerListener { - fun onMarkerTapped(latitude: Double, longitude: Double) { + fun onMarkerTapped(latitude: Double, longitude: Double, displayStartEndMarker: Boolean) { } } @@ -83,12 +83,12 @@ class MapOverlayHelper (private var markerListener: MarkerListener) { overlayItems.add(overlayItem) // create and return overlay for current position - return createOverlay(context, overlayItems) + return createOverlay(context, overlayItems, enableStarring = false, displayStartEndMarker = false) } /* Creates icon overlay for track */ - fun createTrackOverlay(context: Context, track: Track, trackingState: Int, displayEndMarker: Boolean = false): ItemizedIconOverlay { + fun createTrackOverlay(context: Context, track: Track, trackingState: Int, displayStartEndMarker: Boolean = false): ItemizedIconOverlay { val overlayItems: ArrayList = ArrayList() val wayPoints: MutableList = track.wayPoints @@ -118,11 +118,17 @@ class MapOverlayHelper (private var markerListener: MarkerListener) { wayPoints.forEachIndexed { index: Int, wayPoint: WayPoint -> // get drawable val newMarker: Drawable - if (displayEndMarker && index == maxIndex) { + if (displayStartEndMarker && index == 0) { if (wayPoint.starred) { - newMarker = ContextCompat.getDrawable(context, R.drawable.ic_marker_track_end_starred_blue_36dp)!! + newMarker = ContextCompat.getDrawable(context, R.drawable.ic_marker_track_start_starred_blue_48dp)!! } else { - newMarker = ContextCompat.getDrawable(context, R.drawable.ic_marker_track_end_blue_36dp)!! + newMarker = ContextCompat.getDrawable(context, R.drawable.ic_marker_track_start_blue_48dp)!! + } + } else if (displayStartEndMarker && index == maxIndex) { + if (wayPoint.starred) { + newMarker = ContextCompat.getDrawable(context, R.drawable.ic_marker_track_end_starred_blue_48dp)!! + } else { + newMarker = ContextCompat.getDrawable(context, R.drawable.ic_marker_track_end_blue_48dp)!! } } else if (wayPoint.starred) { @@ -140,7 +146,7 @@ class MapOverlayHelper (private var markerListener: MarkerListener) { } } // create and return overlay for current position - return createOverlay(context, overlayItems) + return createOverlay(context, overlayItems, enableStarring = true, displayStartEndMarker = displayStartEndMarker) } @@ -150,17 +156,23 @@ class MapOverlayHelper (private var markerListener: MarkerListener) { //val description: String = "${context.getString(R.string.marker_description_accuracy)}: ${DecimalFormat("#0.00").format(accuracy)} (${provider})" val description: String = "${context.getString(R.string.marker_description_time)}: ${SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM, Locale.getDefault()).format(time)} | ${context.getString(R.string.marker_description_accuracy)}: ${DecimalFormat("#0.00").format(accuracy)} (${provider})" val position: GeoPoint = GeoPoint(latitude, longitude) - return OverlayItem(title, description, position) + val item: OverlayItem = OverlayItem(title, description, position) + item.markerHotspot = OverlayItem.HotspotPlace.CENTER + return item } /* Creates an overlay */ - private fun createOverlay(context: Context, overlayItems: ArrayList): ItemizedIconOverlay { + private fun createOverlay(context: Context, overlayItems: ArrayList, enableStarring: Boolean, displayStartEndMarker: Boolean): ItemizedIconOverlay { return ItemizedIconOverlay(context, overlayItems, object : ItemizedIconOverlay.OnItemGestureListener { override fun onItemSingleTapUp(index: Int, item: OverlayItem): Boolean { - markerListener.onMarkerTapped(item.point.latitude, item.point.longitude) - return true + if (enableStarring) { + markerListener.onMarkerTapped(item.point.latitude, item.point.longitude, displayStartEndMarker) + return true + } else { + return false + } } override fun onItemLongPress(index: Int, item: OverlayItem): Boolean { val v = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator 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 3b908f0..a4313b6 100644 --- a/app/src/main/java/org/y20k/trackbook/ui/MapFragmentLayoutHolder.kt +++ b/app/src/main/java/org/y20k/trackbook/ui/MapFragmentLayoutHolder.kt @@ -162,12 +162,12 @@ data class MapFragmentLayoutHolder(private var context: Context, private var mar /* Overlay current track on map */ - fun overlayCurrentTrack(track: Track, trackingState: Int) { + fun overlayCurrentTrack(track: Track, trackingState: Int, displayStartEndMarker: Boolean) { if (currentTrackOverlay != null) { mapView.overlays.remove(currentTrackOverlay) } if (track.wayPoints.isNotEmpty()) { - currentTrackOverlay = MapOverlayHelper(markerListener).createTrackOverlay(context, track, trackingState) + currentTrackOverlay = MapOverlayHelper(markerListener).createTrackOverlay(context, track, trackingState, displayStartEndMarker) mapView.overlays.add(currentTrackOverlay) } } @@ -216,4 +216,4 @@ data class MapFragmentLayoutHolder(private var context: Context, private var mar } } -} \ No newline at end of file +} 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 b877dff..bce60a1 100644 --- a/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt +++ b/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt @@ -146,7 +146,7 @@ data class TrackFragmentLayoutHolder(private var context: Context, private var m mapView.overlays.add(compassOverlay) // create map overlay - trackOverlay = MapOverlayHelper(markerListener).createTrackOverlay(context, track, Keys.STATE_TRACKING_NOT, displayEndMarker = true) + trackOverlay = MapOverlayHelper(markerListener).createTrackOverlay(context, track, Keys.STATE_TRACKING_NOT, displayStartEndMarker = true) if (track.wayPoints.isNotEmpty()) { mapView.overlays.add(trackOverlay) } @@ -168,13 +168,13 @@ data class TrackFragmentLayoutHolder(private var context: Context, private var m /* Updates map overlay */ - fun updateTrackOverlay(newTrack: Track) { + fun updateTrackOverlay(newTrack: Track, displayStartEndMarker: Boolean) { track = newTrack if (trackOverlay != null) { mapView.overlays.remove(trackOverlay) } if (track.wayPoints.isNotEmpty()) { - trackOverlay = MapOverlayHelper(markerListener).createTrackOverlay(context, track, Keys.STATE_TRACKING_NOT) + trackOverlay = MapOverlayHelper(markerListener).createTrackOverlay(context, track, Keys.STATE_TRACKING_NOT, displayStartEndMarker) mapView.overlays.add(trackOverlay) } } diff --git a/app/src/main/res/drawable/ic_marker_track_end_blue_36dp.xml b/app/src/main/res/drawable/ic_marker_track_end_blue_36dp.xml deleted file mode 100644 index b0da6dc..0000000 --- a/app/src/main/res/drawable/ic_marker_track_end_blue_36dp.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_marker_track_end_blue_48dp.xml b/app/src/main/res/drawable/ic_marker_track_end_blue_48dp.xml new file mode 100644 index 0000000..f4bbf32 --- /dev/null +++ b/app/src/main/res/drawable/ic_marker_track_end_blue_48dp.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_marker_track_end_starred_blue_48dp.xml b/app/src/main/res/drawable/ic_marker_track_end_starred_blue_48dp.xml new file mode 100644 index 0000000..a9fc9aa --- /dev/null +++ b/app/src/main/res/drawable/ic_marker_track_end_starred_blue_48dp.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_marker_track_start_blue_48dp.xml b/app/src/main/res/drawable/ic_marker_track_start_blue_48dp.xml new file mode 100644 index 0000000..7d3ae59 --- /dev/null +++ b/app/src/main/res/drawable/ic_marker_track_start_blue_48dp.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_marker_track_start_starred_blue_48dp.xml b/app/src/main/res/drawable/ic_marker_track_start_starred_blue_48dp.xml new file mode 100644 index 0000000..d5a4540 --- /dev/null +++ b/app/src/main/res/drawable/ic_marker_track_start_starred_blue_48dp.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/assets/Location Marker with Pin 24px.svg b/assets/Location Marker with Pin 24px.svg deleted file mode 100644 index f26157f..0000000 --- a/assets/Location Marker with Pin 24px.svg +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - diff --git a/assets/Location Marker 24px.svg b/assets/template-location-marker-24px.svg similarity index 100% rename from assets/Location Marker 24px.svg rename to assets/template-location-marker-24px.svg diff --git a/assets/template-location-marker-with-pin-48px.svg b/assets/template-location-marker-with-pin-48px.svg new file mode 100644 index 0000000..7cf4bbb --- /dev/null +++ b/assets/template-location-marker-with-pin-48px.svg @@ -0,0 +1,74 @@ + +image/svg+xml + + + + + + +