diff --git a/app/src/androidMain/kotlin/de/westnordost/streetcomplete/quests/QuestsModule.kt b/app/src/androidMain/kotlin/de/westnordost/streetcomplete/quests/QuestsModule.kt index ae4c8cba39..9576e3a1ca 100644 --- a/app/src/androidMain/kotlin/de/westnordost/streetcomplete/quests/QuestsModule.kt +++ b/app/src/androidMain/kotlin/de/westnordost/streetcomplete/quests/QuestsModule.kt @@ -91,6 +91,7 @@ import de.westnordost.streetcomplete.quests.existence.CheckExistence import de.westnordost.streetcomplete.quests.ferry.AddFerryAccessBicycle import de.westnordost.streetcomplete.quests.ferry.AddFerryAccessMotorVehicle import de.westnordost.streetcomplete.quests.ferry.AddFerryAccessPedestrian +import de.westnordost.streetcomplete.quests.ferry.AddFerryToll import de.westnordost.streetcomplete.quests.fire_hydrant.AddFireHydrantType import de.westnordost.streetcomplete.quests.fire_hydrant_diameter.AddFireHydrantDiameter import de.westnordost.streetcomplete.quests.fire_hydrant_position.AddFireHydrantPosition @@ -460,6 +461,7 @@ fun questTypeRegistry( // ferry: usually visible from looking at the boat, but not always... 101 to AddFerryAccessPedestrian(), 102 to AddFerryAccessMotorVehicle(), + 195 to AddFerryToll(), 196 to AddFerryAccessBicycle(), // aerial way: usually visible from looking at the aerial way, but not always... diff --git a/app/src/androidMain/kotlin/de/westnordost/streetcomplete/quests/ferry/AddFerryToll.kt b/app/src/androidMain/kotlin/de/westnordost/streetcomplete/quests/ferry/AddFerryToll.kt new file mode 100644 index 0000000000..7d5acc3b5c --- /dev/null +++ b/app/src/androidMain/kotlin/de/westnordost/streetcomplete/quests/ferry/AddFerryToll.kt @@ -0,0 +1,62 @@ +package de.westnordost.streetcomplete.quests.ferry + +import de.westnordost.streetcomplete.R +import de.westnordost.streetcomplete.data.elementfilter.toElementFilterExpression +import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry +import de.westnordost.streetcomplete.data.osm.mapdata.Element +import de.westnordost.streetcomplete.data.osm.mapdata.MapDataWithGeometry +import de.westnordost.streetcomplete.data.osm.mapdata.Way +import de.westnordost.streetcomplete.data.osm.mapdata.filter +import de.westnordost.streetcomplete.data.osm.osmquests.OsmElementQuestType +import de.westnordost.streetcomplete.data.quest.AndroidQuest +import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.RARE +import de.westnordost.streetcomplete.osm.Tags +import de.westnordost.streetcomplete.quests.YesNoQuestForm +import de.westnordost.streetcomplete.util.ktx.toYesNo + +class AddFerryToll : OsmElementQuestType, AndroidQuest { + + private val filter by lazy { + """ + ways, relations with + route = ferry + and !toll + and !fee + """.toElementFilterExpression() + } + + override val changesetComment = "Specify whether a ferry requires payment" + override val wikiLink = "Tag:route=ferry" + override val icon = R.drawable.ic_quest_ferry_fee + override val hasMarkersAtEnds = true + override val achievements = listOf(RARE) + + override fun getTitle(tags: Map) = + R.string.quest_ferry_toll_title + + override fun createForm() = YesNoQuestForm() + + override fun applyAnswerTo( + answer: Boolean, + tags: Tags, + geometry: ElementGeometry, + timestampEdited: Long + ) { + tags["toll"] = answer.toYesNo() + } + + override fun getApplicableElements(mapData: MapDataWithGeometry): Iterable { + // same logic as other ferry access quests + val wayIdsInFerryRoutes = wayIdsInFerryRoutes(mapData.relations) + return mapData + .filter(filter) + .filter { it !is Way || it.id !in wayIdsInFerryRoutes } + .asIterable() + } + + override fun isApplicableTo(element: Element): Boolean? { + if (!filter.matches(element)) return false + if (element is Way) return null + return true + } +} diff --git a/app/src/androidMain/res/values/strings.xml b/app/src/androidMain/res/values/strings.xml index cec0073035..2d8a7a2067 100644 --- a/app/src/androidMain/res/values/strings.xml +++ b/app/src/androidMain/res/values/strings.xml @@ -1152,6 +1152,7 @@ A level counts as a roof level when its windows are in the roof. Subsequently, r Does this ferry route transport pedestrians? Does this ferry route transport motor vehicles? + Do you generally have to pay to use this ferry? Are bicycles allowed on this ferry? diff --git a/app/src/main/res/drawable/ic_quest_ferry_fee.xml b/app/src/main/res/drawable/ic_quest_ferry_fee.xml new file mode 100644 index 0000000000..3317e1c0a1 --- /dev/null +++ b/app/src/main/res/drawable/ic_quest_ferry_fee.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + diff --git a/res/graphics/quest/ferry_fee.svg b/res/graphics/quest/ferry_fee.svg new file mode 100644 index 0000000000..a356ecd848 --- /dev/null +++ b/res/graphics/quest/ferry_fee.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + +