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 0683905c107..bf238ced009 100644 --- a/app/src/androidMain/kotlin/de/westnordost/streetcomplete/quests/QuestsModule.kt +++ b/app/src/androidMain/kotlin/de/westnordost/streetcomplete/quests/QuestsModule.kt @@ -83,6 +83,7 @@ import de.westnordost.streetcomplete.quests.drinking_water_type.AddDrinkingWater import de.westnordost.streetcomplete.quests.existence.CheckExistence import de.westnordost.streetcomplete.quests.ferry.AddFerryAccessMotorVehicle import de.westnordost.streetcomplete.quests.ferry.AddFerryAccessPedestrian +import de.westnordost.streetcomplete.quests.ferry.AddFerryFee 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 @@ -438,6 +439,7 @@ fun questTypeRegistry( // ferry: usually visible from looking at the boat, but not always... 101 to AddFerryAccessPedestrian(), 102 to AddFerryAccessMotorVehicle(), + 185 to AddFerryFee(), 103 to AddProhibitedForPedestrians(), // need to understand the pedestrian situation diff --git a/app/src/androidMain/kotlin/de/westnordost/streetcomplete/quests/ferry/AddFerryFee.kt b/app/src/androidMain/kotlin/de/westnordost/streetcomplete/quests/ferry/AddFerryFee.kt new file mode 100644 index 00000000000..f3a76b70622 --- /dev/null +++ b/app/src/androidMain/kotlin/de/westnordost/streetcomplete/quests/ferry/AddFerryFee.kt @@ -0,0 +1,54 @@ +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.CAR +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 AddFerryFee : OsmElementQuestType, AndroidQuest { + + private val filter by lazy { + ("""ways, relations with + route = ferry + and !fee + and !toll""" + ).toElementFilterExpression() + } + override val changesetComment = "Specify ferry fee" + 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_fee_title + + override fun createForm() = YesNoQuestForm() + + override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) { + tags["fee"] = answer.toYesNo() + } + + override fun getApplicableElements(mapData: MapDataWithGeometry): Iterable { + 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 c34dde495d1..d21cfd323bd 100644 --- a/app/src/androidMain/res/values/strings.xml +++ b/app/src/androidMain/res/values/strings.xml @@ -1121,6 +1121,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? + Is there a fee for anyone to use this ferry? What diameter is specified on the sign for this fire hydrant? This diameter looks implausible, it is usually between %1$d and %2$d. 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 00000000000..f213806bed2 --- /dev/null +++ b/app/src/main/res/drawable/ic_quest_ferry_fee.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + diff --git a/res/graphics/quest/ferry_fee.svg b/res/graphics/quest/ferry_fee.svg new file mode 100644 index 00000000000..03aaa90f07a --- /dev/null +++ b/res/graphics/quest/ferry_fee.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + +