Implementing edition map into roadtrip detail

master
Arthur VALIN 2 years ago
parent fd33116210
commit 9cee2c6512

@ -16,7 +16,7 @@ interface RoadTripDAO {
@Delete
suspend fun deleteRoadTrip(r: RoadTripEntity)
@Query("SELECT * FROM Roadtrip")
@Query("SELECT * FROM Roadtrip ORDER BY date")
fun getAllRoadTrips(): Flow<MutableList<RoadTripEntity>>
@Query("SELECT * FROM Roadtrip WHERE id = :id")

@ -0,0 +1,44 @@
package uca.baptistearthur.geocaching.ui.fragment
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import org.osmdroid.bonuspack.routing.OSRMRoadManager
import org.osmdroid.views.MapView
import uca.baptistearthur.geocaching.model.RoadTripEntity
import uca.baptistearthur.geocaching.ui.overlay.AddMarkerOverlay
import uca.baptistearthur.geocaching.ui.overlay.EditMarkerOverlay
import uca.baptistearthur.geocaching.ui.overlay.MarkerOverlay
import uca.baptistearthur.geocaching.ui.overlay.EditRoadtripOverlay
class EditRoadtripMap : Map() {
companion object{
const val defaultZoomLevel = 10.0
}
var roadTrip: RoadTripEntity? = null
set(value) {
roadTrip?:
value?.let {
val editMarkerOverlay = EditMarkerOverlay(OSRMRoadManager(context, userAgent), value)
editMarkerOverlay.addPlaces(value.places, map)
map.overlays.add(editMarkerOverlay);
map.controller.setCenter(value.places.first())
field = value
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
Log.d("GeoMap", "CREATE EDIT MAP")
val view = super.onCreateView(inflater, container, savedInstanceState)
map.controller.setZoom(defaultZoomLevel)
return view
}
}

@ -10,20 +10,18 @@ import org.osmdroid.util.GeoPoint
import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.ScaleBarOverlay
import android.util.Log
import org.osmdroid.bonuspack.routing.OSRMRoadManager
import org.osmdroid.tileprovider.tilesource.TileSourceFactory
import org.osmdroid.views.overlay.compass.CompassOverlay
import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider
import uca.baptistearthur.geocaching.R
import uca.baptistearthur.geocaching.ui.overlay.AddMarkerOverlay
open class Map : Fragment() {
protected lateinit var map : MapView
companion object{
private val minimumZoomLevel = 4.0
private val defaultZoomLevel = 21.0
private val userAgent = "RoadTrip"
private val defaultPoint = GeoPoint(48.8583, 2.2944)
const val minimumZoomLevel = 4.0
const val defaultZoomLevel = 21.0
const val userAgent = "RoadTrip"
val defaultPoint = GeoPoint(48.8583, 2.2944)
}
override fun onCreate(savedInstanceState: Bundle?) {
@ -50,10 +48,6 @@ open class Map : Fragment() {
val scaleBarOverlay = ScaleBarOverlay(map)
scaleBarOverlay.setAlignRight(true)
map.overlays.add(scaleBarOverlay)
// Add Marker Overlay
val addMarker = AddMarkerOverlay(OSRMRoadManager(context, userAgent))
map.overlays.add(addMarker);
}
override fun onCreateView(

@ -8,20 +8,20 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import org.osmdroid.config.Configuration
import org.osmdroid.util.GeoPoint
import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.ScaleBarOverlay
import android.Manifest.permission.ACCESS_FINE_LOCATION
import android.location.Location
import android.location.LocationListener
import android.util.Log
import android.widget.ProgressBar
import androidx.activity.result.contract.ActivityResultContracts
import org.osmdroid.bonuspack.routing.OSRMRoadManager
import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay
import uca.baptistearthur.geocaching.R
import uca.baptistearthur.geocaching.ui.overlay.AddMarkerOverlay
import uca.baptistearthur.geocaching.ui.overlay.MarkerOverlay
import uca.baptistearthur.geocaching.ui.overlay.NewRoadtripOverlay
import uca.baptistearthur.geocaching.ui.overlay.RecenterOverlay
class MyLocationMap : Map() {
@ -62,8 +62,12 @@ class MyLocationMap : Map() {
// My Location Overlay
val myLocation = MyLocationNewOverlay(GpsMyLocationProvider(context), map)
myLocation.enableMyLocation()
map.overlays.add(myLocation)
// Add Marker Overlay
val addMarker = AddMarkerOverlay(OSRMRoadManager(context, userAgent))
map.overlays.add(addMarker);
}
override fun onCreateView(

@ -6,13 +6,12 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import android.util.Log
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.fragment.app.viewModels
import androidx.fragment.app.*
import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
@ -21,6 +20,7 @@ import uca.baptistearthur.geocaching.R
import uca.baptistearthur.geocaching.application.RTApplication
import uca.baptistearthur.geocaching.converters.Converters
import uca.baptistearthur.geocaching.converters.toFrenchFormat
import uca.baptistearthur.geocaching.model.RoadTripEntity
import uca.baptistearthur.geocaching.recyclerview.PlacesAdapter
import uca.baptistearthur.geocaching.viewModels.RoadTripViewModel
import uca.baptistearthur.geocaching.viewModels.RoadTripViewModelFactory
@ -30,8 +30,9 @@ import java.util.*
class RoadtripDetail : Fragment() {
private var placesRecyclerView : RecyclerView? = null
private val roadTripViewModel: RoadTripViewModel by viewModels<RoadTripViewModel> {
private val map: EditRoadtripMap = EditRoadtripMap()
private lateinit var roadTrip: RoadTripEntity;
private val roadTripViewModel: RoadTripViewModel by viewModels {
RoadTripViewModelFactory((requireActivity().application as RTApplication).db.roadTripDAO())
}
@ -39,16 +40,14 @@ class RoadtripDetail : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.roadtrip_detail, container, false)
var roadTripJSON = arguments?.getString("roadTrip")
val roadTrip = Converters().toRoadTripEntity(roadTripJSON)
roadTrip = Converters().toRoadTripEntity(arguments?.getString("roadTrip"))
childFragmentManager.beginTransaction()
.add(R.id.roadTripDetailMapView, map)
.commit()
placesRecyclerView = view?.findViewById(R.id.recyclerViewPlacesList)
placesRecyclerView?.adapter = PlacesAdapter(roadTrip.places)
placesRecyclerView?.layoutManager = LinearLayoutManager(context)
view?.findViewById<TextView>(R.id.roadTripDetailTitle)?.text = roadTrip.name
view?.findViewById<TextView>(R.id.roadTripDetailDate)?.text = roadTrip.date.toFrenchFormat()
@ -69,10 +68,12 @@ class RoadtripDetail : Fragment() {
Toast.LENGTH_SHORT
).show()
}
}
return view
}
override fun onStart() {
super.onStart()
map.roadTrip=roadTrip
}
}

@ -1,99 +1,8 @@
package uca.baptistearthur.geocaching.ui.overlay
import android.content.Context
import android.util.Log
import android.view.MotionEvent
import androidx.core.content.ContextCompat
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.osmdroid.bonuspack.routing.RoadManager
import org.osmdroid.util.GeoPoint
import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.Overlay
import org.osmdroid.views.overlay.Polyline
import uca.baptistearthur.geocaching.R
class AddMarkerOverlay(val roadManager: RoadManager) : Overlay() {
private var locations: MutableSet<PlaceMarker> = mutableSetOf()
private lateinit var roadOverlay: Polyline
private var newRoadtripOverlayVisible = false;
fun addPlaces(geoPoints: Collection<GeoPoint>, mapView: MapView)=
geoPoints.forEach { addMarkerAtGeopoint(it, mapView)}
private fun addMarkerAtGeopoint(geoPoint: GeoPoint, mapView: MapView){
val marker = PlaceMarker(mapView, this)
marker.position = geoPoint
if(locations.isNotEmpty()) locations.last().setDefaultIcon()
locations.add(marker)
locations.forEach{ it.closeInfoWindow()}
computeIcons(mapView.context)
mapView.overlays.add(marker)
computeRoad(mapView)
computeNewRoadtripOverlay(mapView);
mapView.invalidate()
}
override fun onDoubleTap(e: MotionEvent?, mapView: MapView?): Boolean {
val proj = mapView?.projection;
if(proj!=null){
val geoPoint = proj.fromPixels(e?.x?.toInt()!!, e.y.toInt() ) as GeoPoint
addMarkerAtGeopoint(geoPoint, mapView)
}
return true;
}
fun computeIcons(context: Context) {
if (locations.isNotEmpty()) {
val flagIcon = ContextCompat.getDrawable(context, R.drawable.roadtrip_marker)!!
locations.last().icon = flagIcon
locations.first().icon = flagIcon
}
}
fun computeRoad(mapView: MapView) {
mapView.overlays.removeAll{ it is Polyline }
if (locations.size > 1) {
CoroutineScope(Dispatchers.IO).launch {
val road = roadManager.getRoad(ArrayList(locations.map{it.position}))
withContext(Dispatchers.Main) {
roadOverlay = RoadManager.buildRoadOverlay(road)
mapView.overlays.add(roadOverlay)
}
}
}
}
fun computeNewRoadtripOverlay(mapView: MapView){
if (locations.size > 1) {
if(!newRoadtripOverlayVisible) {
mapView.overlays.add(NewRoadtripOverlay(locations))
newRoadtripOverlayVisible = true
}
}else{
Log.d("GeoRoad", "TRY DELETE ROADTRIP OVERLAY" + locations.size)
Log.d("GeoRoad", ""+mapView.overlays.size)
mapView.overlays.removeAll{ it is NewRoadtripOverlay }
newRoadtripOverlayVisible=false
}
}
fun removeMarker(placeMarker: PlaceMarker) = locations.remove(placeMarker);
fun getMarkerLabel(placeMarker: PlaceMarker) =
when (placeMarker) {
locations.first() -> {
"Start"
}
locations.last() -> {
"Finish"
}
else -> {
"Step " + locations.indexOf(placeMarker);
}
}
import uca.baptistearthur.geocaching.model.RoadTripEntity
class AddMarkerOverlay(roadManager: RoadManager) : MarkerOverlay<NewRoadtripOverlay>(roadManager) {
override fun createNewConfirmationOverlay(): NewRoadtripOverlay = NewRoadtripOverlay(places)
}

@ -0,0 +1,59 @@
package uca.baptistearthur.geocaching.ui.overlay
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.RectF
import android.util.Log
import android.view.MotionEvent
import androidx.core.content.ContextCompat
import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.Overlay
import uca.baptistearthur.geocaching.R
abstract class ConfirmationOverlay(val points: MutableCollection<PlaceMarker>) : Overlay() {
private var circleRectF=RectF()
override fun draw(canvas: Canvas, mapView: MapView, shadow: Boolean) {
val circleSize = 300f
val circlePadding = 20f
val circleY = canvas.height - circleSize - circlePadding
circleRectF= RectF(circlePadding, circleY, circlePadding + circleSize, circleY + circleSize)
val paint = Paint().apply {
color = Color.WHITE
style = Paint.Style.FILL
}
canvas.drawCircle(
circleSize / 2 + circlePadding,
circleY + circleSize / 2,
circleSize / 2,
paint
)
val iconSize = 180
val icon = ContextCompat.getDrawable(mapView.context, R.drawable.check)
val iconX = (circleSize / 2 - iconSize / 2 + circlePadding).toInt()
val iconY = (circleY + circleSize / 2 - iconSize / 2).toInt()
icon?.setBounds(iconX, iconY, iconX + iconSize, iconY + iconSize)
icon?.draw(canvas)
}
override fun onSingleTapConfirmed(e: MotionEvent?, mapView: MapView?) =
if (e != null && circleRectF.contains(e.x, e.y)) {
mapView?.let{
confirm(it)
}
true
}else{
false
}
abstract fun confirm(mapView: MapView)
}

@ -0,0 +1,17 @@
package uca.baptistearthur.geocaching.ui.overlay
import android.graphics.Canvas
import org.osmdroid.bonuspack.routing.RoadManager
import org.osmdroid.util.GeoPoint
import org.osmdroid.views.MapView
import uca.baptistearthur.geocaching.model.RoadTripEntity
class EditMarkerOverlay(roadManager: RoadManager, val roadTrip: RoadTripEntity) : MarkerOverlay<EditRoadtripOverlay>(roadManager) {
fun addPlaces(geopoints: Collection<GeoPoint>, mapView: MapView)=
geopoints.forEach {
addMarkerAtGeopoint(it, mapView)
}
override fun createNewConfirmationOverlay(): EditRoadtripOverlay = EditRoadtripOverlay(places, roadTrip)
}

@ -0,0 +1,48 @@
package uca.baptistearthur.geocaching.ui.overlay
import android.content.Context
import android.widget.Toast
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStoreOwner
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.osmdroid.util.GeoPoint
import org.osmdroid.views.MapView
import uca.baptistearthur.geocaching.R
import uca.baptistearthur.geocaching.application.RTApplication
import uca.baptistearthur.geocaching.model.Place
import uca.baptistearthur.geocaching.model.RoadTripEntity
import uca.baptistearthur.geocaching.viewModels.RoadTripViewModel
import uca.baptistearthur.geocaching.viewModels.RoadTripViewModelFactory
class EditRoadtripOverlay(points: MutableCollection<PlaceMarker>, val roadTripEntity: RoadTripEntity) : ConfirmationOverlay(points) {
fun getRoadTripViewModelFromOverlay(overlayContext: Context): RoadTripViewModel {
val roadTripDao = (overlayContext.applicationContext as RTApplication).db.roadTripDAO()
val viewModelFactory = RoadTripViewModelFactory(roadTripDao)
return ViewModelProvider(overlayContext as ViewModelStoreOwner, viewModelFactory).get(
RoadTripViewModel::class.java)
}
override fun confirm(mapView: MapView) {
val places: MutableList<Place> = points.map { Place(it.position.latitude, it.position.longitude) }.toMutableList()
CoroutineScope(Dispatchers.Main).launch {
places.filter{it.address.displayName==="unknown"}.forEach{ it.initAddress() }
val newRoadTrip = RoadTripEntity(
id = roadTripEntity.id,
name = roadTripEntity.name,
date = roadTripEntity.date,
places = places
)
getRoadTripViewModelFromOverlay(mapView.context).deleteRoadTrip(roadTripEntity)
getRoadTripViewModelFromOverlay(mapView.context).insertRoadTrip(newRoadTrip)
Toast.makeText(
mapView.context,
R.string.changesSaved,
Toast.LENGTH_SHORT
).show()
}
}
}

@ -0,0 +1,95 @@
package uca.baptistearthur.geocaching.ui.overlay
import android.content.Context
import android.view.MotionEvent
import androidx.core.content.ContextCompat
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.osmdroid.bonuspack.routing.RoadManager
import org.osmdroid.util.GeoPoint
import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.Overlay
import org.osmdroid.views.overlay.Polyline
import uca.baptistearthur.geocaching.R
abstract class MarkerOverlay<T : ConfirmationOverlay>(val roadManager: RoadManager) : Overlay() {
protected var places: MutableSet<PlaceMarker> = mutableSetOf()
private lateinit var roadOverlay: Polyline
private var confirmationOverlayIsVisible = false;
protected fun addMarkerAtGeopoint(geoPoint: GeoPoint, mapView: MapView){
val marker = PlaceMarker(mapView, this)
marker.position = geoPoint
if(places.isNotEmpty()) places.last().setDefaultIcon()
places.add(marker)
places.forEach{ it.closeInfoWindow()}
computeIcons(mapView.context)
mapView.overlays.add(marker)
computeRoad(mapView)
computeConfirmationOverlay(mapView);
mapView.invalidate()
}
override fun onDoubleTap(e: MotionEvent?, mapView: MapView?): Boolean {
val proj = mapView?.projection;
if(proj!=null){
val geoPoint = proj.fromPixels(e?.x?.toInt()!!, e.y.toInt() ) as GeoPoint
addMarkerAtGeopoint(geoPoint, mapView)
}
return true;
}
fun computeIcons(context: Context) {
if (places.isNotEmpty()) {
val flagIcon = ContextCompat.getDrawable(context, R.drawable.roadtrip_marker)!!
places.last().icon = flagIcon
places.first().icon = flagIcon
}
}
fun computeRoad(mapView: MapView) {
mapView.overlays.removeAll{ it is Polyline }
if (places.size > 1) {
CoroutineScope(Dispatchers.IO).launch {
val road = roadManager.getRoad(ArrayList(places.map{it.position}))
withContext(Dispatchers.Main) {
roadOverlay = RoadManager.buildRoadOverlay(road)
mapView.overlays.add(roadOverlay)
}
}
}
}
abstract fun createNewConfirmationOverlay(): T
fun computeConfirmationOverlay(mapView: MapView){
if (places.size > 1) {
if(!confirmationOverlayIsVisible) {
mapView.overlays.add(createNewConfirmationOverlay())
confirmationOverlayIsVisible = true
}
}else{
mapView.overlays.removeAll{ it is ConfirmationOverlay }
confirmationOverlayIsVisible=false
}
}
fun removeMarker(placeMarker: PlaceMarker) = places.remove(placeMarker);
fun getMarkerLabel(placeMarker: PlaceMarker) =
when (placeMarker) {
places.first() -> {
"Start"
}
places.last() -> {
"Finish"
}
else -> {
"Step " + places.indexOf(placeMarker);
}
}
}

@ -2,17 +2,10 @@ package uca.baptistearthur.geocaching.ui.overlay
import android.app.AlertDialog
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.RectF
import android.text.InputFilter
import android.util.Log
import android.view.MotionEvent
import android.widget.EditText
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStoreOwner
import kotlinx.coroutines.CoroutineScope
@ -20,7 +13,6 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.Overlay
import org.osmdroid.views.overlay.Polyline
import uca.baptistearthur.geocaching.R
import uca.baptistearthur.geocaching.application.RTApplication
@ -32,9 +24,7 @@ import uca.baptistearthur.geocaching.viewModels.RoadTripViewModelFactory
import java.util.*
class NewRoadtripOverlay(val points: MutableCollection<PlaceMarker>) : Overlay() {
private var circleRectF=RectF()
class NewRoadtripOverlay(points: MutableCollection<PlaceMarker>) : ConfirmationOverlay(points) {
fun getRoadTripViewModelFromOverlay(overlayContext: Context): RoadTripViewModel {
val roadTripDao = (overlayContext.applicationContext as RTApplication).db.roadTripDAO()
@ -42,61 +32,11 @@ class NewRoadtripOverlay(val points: MutableCollection<PlaceMarker>) : Overlay()
return ViewModelProvider(overlayContext as ViewModelStoreOwner, viewModelFactory).get(RoadTripViewModel::class.java)
}
override fun draw(canvas: Canvas, mapView: MapView, shadow: Boolean) {
val circleSize = 300f
val circlePadding = 20f
val circleY = canvas.height - circleSize - circlePadding
circleRectF= RectF(circlePadding, circleY, circlePadding + circleSize, circleY + circleSize)
val paint = Paint().apply {
color = Color.WHITE
style = Paint.Style.FILL
}
canvas.drawCircle(
circleSize / 2 + circlePadding,
circleY + circleSize / 2,
circleSize / 2,
paint
)
val iconSize = 180
val icon = ContextCompat.getDrawable(mapView.context, R.drawable.check)
val iconX = (circleSize / 2 - iconSize / 2 + circlePadding).toInt()
val iconY = (circleY + circleSize / 2 - iconSize / 2).toInt()
icon?.setBounds(iconX, iconY, iconX + iconSize, iconY + iconSize)
icon?.draw(canvas)
}
override fun onSingleTapConfirmed(e: MotionEvent?, mapView: MapView?) =
if (e != null && circleRectF.contains(e.x, e.y)) {
mapView?.let{
createDialog(it)
}
Log.d("GeoRoad", "CONFIRM : "+points.size)
true
}else{
false
}
private fun clearMap(mapView: MapView){
mapView.overlays.removeAll { it is PlaceMarker || it is Polyline || it is NewRoadtripOverlay }
}
private fun createDialog(mapView: MapView){
val context = mapView.context
val input = EditText(context)
input.filters = arrayOf<InputFilter>(InputFilter.LengthFilter(50))
val dialog = AlertDialog.Builder(context)
.setTitle(R.string.newRoadtripDialog)
.setView(input)
.setPositiveButton(R.string.confirm) { _, _ ->
val userInput = input.text.toString()
if (userInput.isNotBlank()) {
private fun onValidation(mapView: MapView, input: String){
val places: MutableList<Place> = points.map { Place(it.position.latitude, it.position.longitude) }.toMutableList()
CoroutineScope(Dispatchers.Main).launch {
places.forEach{
@ -105,23 +45,35 @@ class NewRoadtripOverlay(val points: MutableCollection<PlaceMarker>) : Overlay()
}
val newRoadTrip = RoadTripEntity(
id = 0, // auto-generated ID
name = input.text.toString(),
name = input,
date = Date(),
places = places
)
getRoadTripViewModelFromOverlay(context).insertRoadTrip(newRoadTrip);
getRoadTripViewModelFromOverlay(mapView.context).insertRoadTrip(newRoadTrip);
Toast.makeText(
context,
mapView.context,
R.string.roadtripAdded,
Toast.LENGTH_SHORT
).show()
points.clear()
}
clearMap(mapView)
}
override fun confirm(mapView: MapView){
val input = EditText(mapView.context)
input.filters = arrayOf<InputFilter>(InputFilter.LengthFilter(50))
val dialog = AlertDialog.Builder(mapView.context)
.setTitle(R.string.newRoadtripDialog)
.setView(input)
.setPositiveButton(R.string.confirm) { _, _ ->
val userInput = input.text.toString()
if (userInput.isNotBlank()) {
onValidation(mapView, input.text.toString())
} else {
Toast.makeText(
context,
mapView.context,
R.string.emptyTextError,
Toast.LENGTH_SHORT
).show()

@ -1,18 +1,10 @@
package uca.baptistearthur.geocaching.ui.overlay
import android.graphics.drawable.Drawable
import android.util.Log
import android.view.MotionEvent
import androidx.core.content.ContextCompat
import org.osmdroid.bonuspack.routing.OSRMRoadManager
import org.osmdroid.bonuspack.routing.RoadManager
import org.osmdroid.util.GeoPoint
import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.Marker
import org.osmdroid.views.overlay.infowindow.InfoWindow
import uca.baptistearthur.geocaching.R
class PlaceMarker(val mapView: MapView, val parent : AddMarkerOverlay) : Marker(mapView) {
class PlaceMarker(val mapView: MapView, val parent : MarkerOverlay<*>) : Marker(mapView) {
override fun getTitle() = parent.getMarkerLabel(this)
override fun onLongPress(e: MotionEvent?, mapView: MapView?): Boolean {
@ -22,7 +14,7 @@ class PlaceMarker(val mapView: MapView, val parent : AddMarkerOverlay) : Marker(
mapView.overlays.remove(this)
parent.computeIcons(mapView.context)
parent.computeRoad(mapView)
parent.computeNewRoadtripOverlay(mapView)
parent.computeConfirmationOverlay(mapView)
mapView.invalidate()
return true
}

@ -32,8 +32,7 @@
android:paddingRight="10dp"
android:paddingBottom="5dp"/>
<androidx.fragment.app.FragmentContainerView
android:name="uca.baptistearthur.geocaching.ui.fragment.Map"
<FrameLayout
android:id="@+id/roadTripDetailMapView"
android:layout_width="match_parent"
android:layout_height="match_parent"

@ -30,10 +30,10 @@
<fragment android:id="@+id/placeholder" >
<action
android:id="@+id/action_placeholder_to_map2"
app:destination="@id/map2" />
app:destination="@id/roadTripDetailMapView" />
</fragment>
<fragment
android:id="@+id/map2"
android:name="uca.baptistearthur.geocaching.ui.fragment.Map"
android:id="@+id/roadTripDetailMapView"
android:name="uca.baptistearthur.geocaching.ui.fragment.EditRoadtripMap"
android:label="Map" />
</navigation>

@ -14,4 +14,5 @@
<string name="roadTripDeleteError">Une erreur est survenue lors de la suppresion du voyage</string>
<string name="noRoadTripFound">Aucun voyage n\'a été trouvé, utilisez la carte</string>
<string name="roadtripAdded">Roadtrip ajouté</string>
<string name="changesSaved">Changements sauvegardés</string>
</resources>

@ -14,4 +14,5 @@
<string name="roadTripDeleteError">An error occurred while deleting the road trip.</string>
<string name="noRoadTripFound">No trip was found, add one with the map.</string>
<string name="roadtripAdded">Roadtrip added</string>
<string name="changesSaved">Changes saved</string>
</resources>
Loading…
Cancel
Save