Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.air_pump

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -40,7 +41,7 @@ class AddAirCompressor : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateWithCheckDate("compressed_air", answer.toYesNo())
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.air_pump

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -48,7 +49,7 @@ class AddBicyclePump : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateWithCheckDate("service:bicycle:pump", answer.toYesNo())
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.atm_cashin

import de.westnordost.streetcomplete.R
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.filter
Expand All @@ -26,7 +27,7 @@ class AddAtmCashIn : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["cash_in"] = answer.toYesNo()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.atm_operator

import de.westnordost.streetcomplete.R
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.filter
Expand All @@ -24,7 +25,7 @@ class AddAtmOperator : OsmFilterQuestType<String>() {

override fun createForm() = AddAtmOperatorForm()

override fun applyAnswerTo(answer: String, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: String, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["operator"] = answer
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.baby_changing_table

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CITIZEN
import de.westnordost.streetcomplete.osm.Tags
Expand Down Expand Up @@ -31,7 +32,7 @@ class AddBabyChangingTable : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["changing_table"] = answer.toYesNo()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.barrier_bicycle_barrier_installation

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -31,7 +32,7 @@ class AddBicycleBarrierInstallation : OsmFilterQuestType<BicycleBarrierInstallat

override fun createForm() = AddBicycleBarrierInstallationForm()

override fun applyAnswerTo(answer: BicycleBarrierInstallationAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: BicycleBarrierInstallationAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is BicycleBarrierInstallation -> tags["cycle_barrier:installation"] = answer.osmValue
BarrierTypeIsNotBicycleBarrier -> tags["barrier"] = "yes"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.barrier_bicycle_barrier_type

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.BICYCLIST
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.BLIND
Expand All @@ -21,7 +22,7 @@ class AddBicycleBarrierType : OsmFilterQuestType<BicycleBarrierTypeAnswer>() {

override fun createForm() = AddBicycleBarrierTypeForm()

override fun applyAnswerTo(answer: BicycleBarrierTypeAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: BicycleBarrierTypeAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is BicycleBarrierType -> tags["cycle_barrier"] = answer.osmValue
BarrierTypeIsNotBicycleBarrier -> tags["barrier"] = "yes"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.barrier_type

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.Node
Expand Down Expand Up @@ -41,6 +42,6 @@ class AddBarrierOnPath : OsmElementQuestType<BarrierType> {

override fun createForm() = AddBarrierTypeForm()

override fun applyAnswerTo(answer: BarrierType, tags: Tags, timestampEdited: Long) =
override fun applyAnswerTo(answer: BarrierType, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) =
answer.applyTo(tags)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.barrier_type

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.Node
Expand Down Expand Up @@ -40,6 +41,6 @@ class AddBarrierOnRoad : OsmElementQuestType<BarrierType> {

override fun createForm() = AddBarrierTypeForm()

override fun applyAnswerTo(answer: BarrierType, tags: Tags, timestampEdited: Long) =
override fun applyAnswerTo(answer: BarrierType, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) =
answer.applyTo(tags)
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.barrier_type

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.BICYCLIST
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.BLIND
Expand Down Expand Up @@ -35,6 +36,6 @@ class AddBarrierType : OsmFilterQuestType<BarrierType>() {

override fun createForm() = AddBarrierTypeForm()

override fun applyAnswerTo(answer: BarrierType, tags: Tags, timestampEdited: Long) =
override fun applyAnswerTo(answer: BarrierType, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) =
answer.applyTo(tags)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.barrier_type

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.osmquests.OsmElementQuestType
Expand Down Expand Up @@ -47,7 +48,7 @@ class AddStileType : OsmElementQuestType<StileTypeAnswer> {

override fun createForm() = AddStileTypeForm()

override fun applyAnswerTo(answer: StileTypeAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: StileTypeAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is StileType -> {
val newType = answer.osmValue
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.bench_backrest

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -35,7 +36,7 @@ class AddBenchBackrest : OsmFilterQuestType<BenchBackrestAnswer>() {

override fun createForm() = AddBenchBackrestForm()

override fun applyAnswerTo(answer: BenchBackrestAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: BenchBackrestAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
PICNIC_TABLE -> {
tags["leisure"] = "picnic_table"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.bike_parking_capacity

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -38,7 +39,7 @@ class AddBikeParkingCapacity : OsmFilterQuestType<Int>() {

override fun createForm() = AddBikeParkingCapacityForm.create(showClarificationText = true)

override fun applyAnswerTo(answer: Int, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Int, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateWithCheckDate("capacity", answer.toString())
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.bike_parking_cover

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -32,7 +33,7 @@ class AddBikeParkingCover : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["covered"] = answer.toYesNo()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.bike_parking_type

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -29,7 +30,7 @@ class AddBikeParkingType : OsmFilterQuestType<BikeParkingType>() {

override fun createForm() = AddBikeParkingTypeForm()

override fun applyAnswerTo(answer: BikeParkingType, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: BikeParkingType, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["bicycle_parking"] = answer.osmValue
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.bike_rental_capacity

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -33,7 +34,7 @@ class AddBikeRentalCapacity : OsmFilterQuestType<Int>() {

override fun createForm() = AddBikeParkingCapacityForm.create(showClarificationText = false)

override fun applyAnswerTo(answer: Int, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Int, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateWithCheckDate("capacity", answer.toString())
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.bike_rental_type

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -30,7 +31,7 @@ class AddBikeRentalType : OsmFilterQuestType<BikeRentalTypeAnswer>() {

override fun createForm() = AddBikeRentalTypeForm()

override fun applyAnswerTo(answer: BikeRentalTypeAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: BikeRentalTypeAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is BikeRentalType -> {
tags["bicycle_rental"] = answer.osmValue
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.bike_shop

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -36,7 +37,7 @@ class AddBikeRepairAvailability : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateWithCheckDate("service:bicycle:repair", answer.toYesNo())
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.bike_shop

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -39,7 +40,7 @@ class AddSecondHandBicycleAvailability : OsmFilterQuestType<SecondHandBicycleAva

override fun createForm() = AddSecondHandBicycleAvailabilityForm()

override fun applyAnswerTo(answer: SecondHandBicycleAvailability, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: SecondHandBicycleAvailability, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
if (answer.osmValue == null) {
tags.updateWithCheckDate("service:bicycle:retail", "no")
} else {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.board_type

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -32,7 +33,7 @@ class AddBoardType : OsmFilterQuestType<BoardType>() {

override fun createForm() = AddBoardTypeForm()

override fun applyAnswerTo(answer: BoardType, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: BoardType, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
if (answer == BoardType.MAP) {
tags["information"] = "map"
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.bollard_type

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.filter
Expand Down Expand Up @@ -51,7 +52,7 @@ class AddBollardType : OsmElementQuestType<BollardTypeAnswer> {

override fun createForm() = AddBollardTypeForm()

override fun applyAnswerTo(answer: BollardTypeAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: BollardTypeAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is BollardType -> tags["bollard"] = answer.osmValue
BarrierTypeIsNotBollard -> tags["barrier"] = "yes"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.bridge_structure

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.BUILDING
import de.westnordost.streetcomplete.osm.Tags
Expand All @@ -17,7 +18,7 @@ class AddBridgeStructure : OsmFilterQuestType<BridgeStructure>() {

override fun createForm() = AddBridgeStructureForm()

override fun applyAnswerTo(answer: BridgeStructure, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: BridgeStructure, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["bridge:structure"] = answer.osmValue
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.building_entrance

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.osmquests.OsmElementQuestType
Expand Down Expand Up @@ -66,7 +67,7 @@ class AddEntrance : OsmElementQuestType<EntranceAnswer> {

override fun createForm() = AddEntranceForm()

override fun applyAnswerTo(answer: EntranceAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: EntranceAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
DeadEnd -> tags["noexit"] = "yes"
is EntranceExistsAnswer -> tags["entrance"] = answer.osmValue
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.building_entrance_reference

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.Node
Expand Down Expand Up @@ -87,7 +88,7 @@ class AddEntranceReference : OsmElementQuestType<EntranceAnswer> {

override fun createForm() = AddEntranceReferenceForm()

override fun applyAnswerTo(answer: EntranceAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: EntranceAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is FlatRange -> {
tags["addr:flats"] = answer.flatRange
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.building_levels

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.BUILDING
import de.westnordost.streetcomplete.osm.BUILDINGS_WITH_LEVELS
Expand Down Expand Up @@ -29,7 +30,7 @@ class AddBuildingLevels : OsmFilterQuestType<BuildingLevelsAnswer>() {

override fun createForm() = AddBuildingLevelsForm()

override fun applyAnswerTo(answer: BuildingLevelsAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: BuildingLevelsAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["building:levels"] = answer.levels.toString()
answer.roofLevels?.let { tags["roof:levels"] = it.toString() }
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.building_type

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.BUILDING
import de.westnordost.streetcomplete.osm.Tags
Expand Down Expand Up @@ -39,7 +40,7 @@ class AddBuildingType : OsmFilterQuestType<BuildingType>() {

override fun createForm() = AddBuildingTypeForm()

override fun applyAnswerTo(answer: BuildingType, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: BuildingType, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
if (answer.osmKey == "man_made") {
tags.remove("building")
tags["man_made"] = answer.osmValue
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.building_underground

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.BUILDING
import de.westnordost.streetcomplete.osm.Tags
Expand All @@ -18,7 +19,7 @@ class AddIsBuildingUnderground : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["location"] = if (answer) "underground" else "surface"
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.bus_stop_bench

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.PEDESTRIAN
import de.westnordost.streetcomplete.osm.Tags
Expand Down Expand Up @@ -28,7 +29,7 @@ class AddBenchStatusOnBusStop : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateWithCheckDate("bench", answer.toYesNo())
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.bus_stop_bin

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CITIZEN
import de.westnordost.streetcomplete.osm.Tags
Expand Down Expand Up @@ -28,7 +29,7 @@ class AddBinStatusOnBusStop : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateWithCheckDate("bin", answer.toYesNo())
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.bus_stop_lit

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.PEDESTRIAN
import de.westnordost.streetcomplete.osm.Tags
Expand Down Expand Up @@ -35,7 +36,7 @@ class AddBusStopLit : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateWithCheckDate("lit", answer.toYesNo())
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.bus_stop_name

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.quest.AllCountriesExcept
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.PEDESTRIAN
Expand Down Expand Up @@ -28,7 +29,7 @@ class AddBusStopName : OsmFilterQuestType<BusStopNameAnswer>() {

override fun createForm() = AddBusStopNameForm()

override fun applyAnswerTo(answer: BusStopNameAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: BusStopNameAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is NoBusStopName -> {
tags["name:signed"] = "no"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.bus_stop_ref

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.quest.NoCountriesExcept
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.PEDESTRIAN
Expand Down Expand Up @@ -34,7 +35,7 @@ class AddBusStopRef : OsmFilterQuestType<BusStopRefAnswer>() {

override fun createForm() = AddBusStopRefForm()

override fun applyAnswerTo(answer: BusStopRefAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: BusStopRefAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is NoVisibleBusStopRef -> tags["ref:signed"] = "no"
is BusStopRef -> tags["ref"] = answer.ref
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.bus_stop_shelter

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.PEDESTRIAN
import de.westnordost.streetcomplete.osm.Tags
Expand Down Expand Up @@ -36,7 +37,7 @@ class AddBusStopShelter : OsmFilterQuestType<BusStopShelterAnswer>() {

override fun createForm() = AddBusStopShelterForm()

override fun applyAnswerTo(answer: BusStopShelterAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: BusStopShelterAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
SHELTER -> tags.updateWithCheckDate("shelter", "yes")
NO_SHELTER -> tags.updateWithCheckDate("shelter", "no")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.camera_type

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -28,7 +29,7 @@ class AddCameraType : OsmFilterQuestType<CameraType>() {

override fun createForm() = AddCameraTypeForm()

override fun applyAnswerTo(answer: CameraType, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: CameraType, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["camera:type"] = answer.osmValue
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.camping

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -33,7 +34,7 @@ class AddCampDrinkingWater : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["drinking_water"] = answer.toYesNo()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.camping

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -33,7 +34,7 @@ class AddCampPower : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["power_supply"] = answer.toYesNo()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.camping

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -33,7 +34,7 @@ class AddCampShower : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["shower"] = answer.toYesNo()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.camping

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -32,7 +33,7 @@ class AddCampType : OsmFilterQuestType<CampType>() {

override fun createForm() = AddCampTypeForm()

override fun applyAnswerTo(answer: CampType, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: CampType, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
BACKCOUNTRY -> tags["backcountry"] = "yes"
else -> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.car_wash_type

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CAR
import de.westnordost.streetcomplete.osm.Tags
Expand All @@ -20,7 +21,7 @@ class AddCarWashType : OsmFilterQuestType<List<CarWashType>>() {

override fun createForm() = AddCarWashTypeForm()

override fun applyAnswerTo(answer: List<CarWashType>, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: List<CarWashType>, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
val isAutomated = answer.contains(AUTOMATED)
tags["automated"] = isAutomated.toYesNo()

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.charging_station_capacity

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -30,7 +31,7 @@ class AddChargingStationCapacity : OsmFilterQuestType<Int>() {

override fun createForm() = AddChargingStationCapacityForm()

override fun applyAnswerTo(answer: Int, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Int, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateWithCheckDate("capacity", answer.toString())
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.charging_station_operator

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -28,7 +29,7 @@ class AddChargingStationOperator : OsmFilterQuestType<String>() {

override fun createForm() = AddChargingStationOperatorForm()

override fun applyAnswerTo(answer: String, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: String, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["operator"] = answer
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.clothing_bin_operator

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.filter
Expand Down Expand Up @@ -47,7 +48,7 @@ class AddClothingBinOperator : OsmElementQuestType<String> {

override fun createForm() = AddClothingBinOperatorForm()

override fun applyAnswerTo(answer: String, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: String, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["operator"] = answer
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.construction

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.BUILDING
import de.westnordost.streetcomplete.osm.Tags
Expand All @@ -23,7 +24,7 @@ class MarkCompletedBuildingConstruction : OsmFilterQuestType<CompletedConstructi

override fun createForm() = MarkCompletedConstructionForm()

override fun applyAnswerTo(answer: CompletedConstructionAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: CompletedConstructionAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is OpeningDateAnswer -> {
tags["opening_date"] = answer.date.toCheckDateString()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.construction

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CAR
import de.westnordost.streetcomplete.osm.ALL_ROADS
Expand Down Expand Up @@ -41,7 +42,7 @@ class MarkCompletedHighwayConstruction : OsmFilterQuestType<CompletedConstructio

override fun createForm() = MarkCompletedConstructionForm()

override fun applyAnswerTo(answer: CompletedConstructionAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: CompletedConstructionAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is OpeningDateAnswer -> {
tags["opening_date"] = answer.date.toCheckDateString()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.crossing

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.Node
Expand Down Expand Up @@ -74,7 +75,7 @@ class AddCrossing : OsmElementQuestType<KerbHeight> {

override fun createForm() = AddKerbHeightForm()

override fun applyAnswerTo(answer: KerbHeight, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: KerbHeight, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateWithCheckDate("kerb", answer.osmValue)
/* So, we don't assume there is a crossing here for kerb=no and kerb=raised.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.crossing_island

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.osmquests.OsmElementQuestType
Expand Down Expand Up @@ -56,7 +57,7 @@ class AddCrossingIsland : OsmElementQuestType<Boolean> {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["crossing:island"] = answer.toYesNo()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.crossing_type

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.osmquests.OsmElementQuestType
Expand Down Expand Up @@ -63,7 +64,7 @@ class AddCrossingType : OsmElementQuestType<CrossingType> {

override fun createForm() = AddCrossingTypeForm()

override fun applyAnswerTo(answer: CrossingType, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: CrossingType, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
val crossingValue = tags["crossing"]
val isAndWasMarked = answer == CrossingType.MARKED && crossingValue in listOf("zebra", "marked", "uncontrolled")
/* don't change the tag value of the synonyms for "marked" because it is something of a
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,31 @@ import androidx.appcompat.app.AlertDialog
import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.elementfilter.toElementFilterExpression
import de.westnordost.streetcomplete.osm.cycleway.Cycleway
import de.westnordost.streetcomplete.osm.cycleway.CyclewayAndDirection
import de.westnordost.streetcomplete.osm.cycleway.LeftAndRightCycleway
import de.westnordost.streetcomplete.osm.cycleway.asDialogItem
import de.westnordost.streetcomplete.osm.cycleway.asStreetSideItem
import de.westnordost.streetcomplete.osm.cycleway.createCyclewaySides
import de.westnordost.streetcomplete.osm.cycleway.getSelectableCyclewaysInCountry
import de.westnordost.streetcomplete.osm.cycleway.isAmbiguous
import de.westnordost.streetcomplete.osm.isForwardOneway
import de.westnordost.streetcomplete.osm.isNotOnewayForCyclists
import de.westnordost.streetcomplete.osm.cycleway.getSelectableCycleways
import de.westnordost.streetcomplete.osm.cycleway.wasNoOnewayForCyclistsButNowItIs
import de.westnordost.streetcomplete.osm.cycleway.selectableOrNullValues
import de.westnordost.streetcomplete.osm.isOneway
import de.westnordost.streetcomplete.osm.isReversedOneway
import de.westnordost.streetcomplete.quests.AStreetSideSelectForm
import de.westnordost.streetcomplete.quests.AnswerItem
import de.westnordost.streetcomplete.quests.IAnswerItem
import de.westnordost.streetcomplete.util.ktx.toast
import de.westnordost.streetcomplete.view.controller.StreetSideDisplayItem
import de.westnordost.streetcomplete.view.controller.StreetSideSelectWithLastAnswerButtonViewController
import de.westnordost.streetcomplete.view.controller.StreetSideSelectWithLastAnswerButtonViewController.Sides.BOTH
import de.westnordost.streetcomplete.view.controller.StreetSideSelectWithLastAnswerButtonViewController.Sides.LEFT
import de.westnordost.streetcomplete.view.controller.StreetSideSelectWithLastAnswerButtonViewController.Sides.RIGHT
import de.westnordost.streetcomplete.view.image_select.ImageListPickerDialog
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json

class AddCyclewayForm : AStreetSideSelectForm<Cycleway, CyclewayAnswer>() {
class AddCyclewayForm : AStreetSideSelectForm<CyclewayAndDirection, LeftAndRightCycleway>() {

override val buttonPanelAnswers get() =
if (isDisplayingPrevious) listOf(
Expand All @@ -30,15 +39,11 @@ class AddCyclewayForm : AStreetSideSelectForm<Cycleway, CyclewayAnswer>() {
)
else emptyList()

override val otherAnswers: List<AnswerItem> get() {
val isNoRoundabout = element.tags["junction"] != "roundabout" && element.tags["junction"] != "circular"
val result = mutableListOf<AnswerItem>()
if (streetSideSelect.showSides != BOTH && isNoRoundabout) {
result.add(AnswerItem(R.string.quest_cycleway_answer_contraflow_cycleway) { streetSideSelect.showSides = BOTH })
}
result.add(AnswerItem(R.string.quest_cycleway_answer_no_bicycle_infrastructure) { noCyclewayHereHint() })
return result
}
override val otherAnswers: List<IAnswerItem> get() = listOfNotNull(
createShowBothSidesAnswer(),
AnswerItem(R.string.quest_cycleway_answer_no_bicycle_infrastructure, ::noCyclewayHereHint),
AnswerItem(R.string.cycleway_reverse_direction, ::selectReverseCyclewayDirection)
)

private fun noCyclewayHereHint() {
activity?.let { AlertDialog.Builder(it)
Expand All @@ -49,27 +54,22 @@ class AddCyclewayForm : AStreetSideSelectForm<Cycleway, CyclewayAnswer>() {
}
}

private val likelyNoBicycleContraflow = """
ways with oneway:bicycle != no and (
oneway ~ yes|-1 and highway ~ primary|primary_link|secondary|secondary_link|tertiary|tertiary_link|unclassified
or junction ~ roundabout|circular
)
""".toElementFilterExpression()
private var reverseDirection: Boolean = false

/** returns whether the side that goes into the opposite direction of the driving direction of a
* one-way is on the right side of the way */
private val isReverseSideRight get() = isReversedOneway xor isLeftHandTraffic

private val isOneway get() = isOneway(element.tags)

private val isForwardOneway get() = isForwardOneway(element.tags)
private val isReversedOneway get() = isReversedOneway(element.tags)

// just a shortcut
private val isLeftHandTraffic get() = countryInfo.isLeftHandTraffic

private fun isContraflowInOneway(isRight: Boolean): Boolean =
isOneway && (isReverseSideRight xor !isRight)
isOneway && (isReverseSideRight == isRight)

/* ---------------------------------------- lifecycle --------------------------------------- */

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
Expand All @@ -79,106 +79,101 @@ class AddCyclewayForm : AStreetSideSelectForm<Cycleway, CyclewayAnswer>() {
}

private fun initStateFromTags() {
val sides = createCyclewaySides(element.tags, isLeftHandTraffic)
val left = sides?.left?.takeIf { !it.isAmbiguous(countryInfo) && !it.isInvalid && !it.isUnknown }
val right = sides?.right?.takeIf { !it.isAmbiguous(countryInfo) && !it.isInvalid && !it.isUnknown }
val bothSidesWereDefinedBefore = sides?.left != null && sides.right != null
val bicycleTrafficOnBothSidesIsLikely = !likelyNoBicycleContraflow.matches(element)
val cycleways = createCyclewaySides(element.tags, isLeftHandTraffic)?.selectableOrNullValues(countryInfo)

streetSideSelect.showSides = when {
bothSidesWereDefinedBefore || bicycleTrafficOnBothSidesIsLikely -> BOTH
isLeftHandTraffic -> LEFT
else -> RIGHT
}
val leftItem = left?.asStreetSideItem(countryInfo, isContraflowInOneway(false))
streetSideSelect.showSides = getInitiallyShownSides(cycleways)

val leftItem = cycleways?.left?.asStreetSideItem(false, isContraflowInOneway(false), countryInfo)
streetSideSelect.setPuzzleSide(leftItem, false)

val rightItem = right?.asStreetSideItem(countryInfo, isContraflowInOneway(true))
val rightItem = cycleways?.right?.asStreetSideItem(true, isContraflowInOneway(true), countryInfo)
streetSideSelect.setPuzzleSide(rightItem, true)

// only show as re-survey (yes/no button) if the previous tagging was complete
isDisplayingPrevious = streetSideSelect.isComplete
}

/* ---------------------------------- selection dialog -------------------------------------- */
/* --------------------------------- showing only one side ---------------------------------- */

override fun onClickSide(isRight: Boolean) {
val isContraflowInOneway = isContraflowInOneway(isRight)
val dialogItems = getSelectableCycleways(isRight)
.map { it.asDialogItem(requireContext(), countryInfo, isContraflowInOneway) }
private fun createShowBothSidesAnswer(): IAnswerItem? {
val isNoRoundabout = element.tags["junction"] != "roundabout" && element.tags["junction"] != "circular"
return if (streetSideSelect.showSides != BOTH && isNoRoundabout) {
AnswerItem(R.string.quest_cycleway_answer_contraflow_cycleway) { streetSideSelect.showSides = BOTH }
} else null
}

ImageListPickerDialog(requireContext(), dialogItems, R.layout.labeled_icon_button_cell, 2) { item ->
val streetSideItem = item.value!!.asStreetSideItem(countryInfo, isContraflowInOneway)
streetSideSelect.replacePuzzleSide(streetSideItem, isRight)
}.show()
private fun getInitiallyShownSides(cycleways: LeftAndRightCycleway?): StreetSideSelectWithLastAnswerButtonViewController.Sides {
val bothSidesWereDefinedBefore = cycleways?.left != null && cycleways.right != null
val bicycleTrafficOnBothSidesIsLikely = !likelyNoBicycleContraflow.matches(element)

return when {
bothSidesWereDefinedBefore || bicycleTrafficOnBothSidesIsLikely -> BOTH
isLeftHandTraffic -> LEFT
else -> RIGHT
}
}

private fun getSelectableCycleways(isRight: Boolean): List<Cycleway> {
val values = getSelectableCyclewaysInCountry(countryInfo).toMutableList()
// different wording for a contraflow lane that is marked like a "shared" lane (just bicycle pictogram)
if (isOneway && isReverseSideRight == isRight) {
values.remove(Cycleway.PICTOGRAMS)
values.add(values.indexOf(Cycleway.NONE) + 1, Cycleway.NONE_NO_ONEWAY)
private val likelyNoBicycleContraflow = """
ways with oneway:bicycle != no and (
oneway ~ yes|-1 and highway ~ primary|primary_link|secondary|secondary_link|tertiary|tertiary_link|unclassified
or junction ~ roundabout|circular
)
""".toElementFilterExpression()

/* ------------------------------ reverse cycleway direction -------------------------------- */

private fun selectReverseCyclewayDirection() {
confirmSelectReverseCyclewayDirection {
reverseDirection = true
context?.toast(R.string.cycleway_reverse_direction_toast)
}
return values
}

override fun serialize(item: Cycleway) = item.name
override fun deserialize(str: String) = Cycleway.valueOf(str)
override fun asStreetSideItem(item: Cycleway, isRight: Boolean): StreetSideDisplayItem<Cycleway> {
private fun confirmSelectReverseCyclewayDirection(callback: () -> Unit) {
AlertDialog.Builder(requireContext())
.setTitle(R.string.quest_generic_confirmation_title)
.setMessage(R.string.cycleway_reverse_direction_warning)
.setPositiveButton(R.string.quest_generic_confirmation_yes) { _, _ -> callback() }
.setNegativeButton(R.string.quest_generic_confirmation_no, null)
.show()
}

private fun reverseCyclewayDirection(isRight: Boolean) {
val isContraflowInOneway = isContraflowInOneway(isRight)
// NONE_NO_ONEWAY is displayed as simply NONE if not in contraflow because the former makes
// only really sense in contraflow. This can only happen when applying the side(s) via the
// last answer button
val item2 = if (item == Cycleway.NONE_NO_ONEWAY && !isContraflowInOneway) Cycleway.NONE else item
return item2.asStreetSideItem(countryInfo, isContraflowInOneway)
reverseDirection = false
val value = streetSideSelect.getPuzzleSide(isRight)?.value ?: return
val newValue = value.copy(direction = value.direction.reverse())
val newItem = newValue.asStreetSideItem(isRight, isContraflowInOneway, countryInfo)
streetSideSelect.replacePuzzleSide(newItem, isRight)
}

/* --------------------------------------- apply answer ------------------------------------- */
/* --------------------------------- select & apply answer ---------------------------------- */

override fun onClickOk() {
val leftSide = streetSideSelect.left?.value
val rightSide = streetSideSelect.right?.value

// a cycleway that goes into opposite direction of a oneway street needs special tagging
// as oneway:bicycle=* tag will differ from oneway=*
// there is no need to tag cases where oneway:bicycle=* would merely repeat oneway=*
var leftSideDir = 0
var rightSideDir = 0
var isOnewayNotForCyclists = false
if (isOneway && leftSide != null && rightSide != null) {
// if the road is oneway=-1, a cycleway that goes opposite to it would be cycleway:oneway=yes
val reverseDir = if (isReversedOneway) 1 else -1

if (isReverseSideRight) {
if (rightSide.isSingleTrackOrLane()) {
rightSideDir = reverseDir
}
} else {
if (leftSide.isSingleTrackOrLane()) {
leftSideDir = reverseDir
}
}

isOnewayNotForCyclists = leftSide.isDualTrackOrLane() || rightSide.isDualTrackOrLane()
|| (if (isReverseSideRight) rightSide else leftSide) !== Cycleway.NONE
override fun onClickSide(isRight: Boolean) {
if (reverseDirection) {
reverseCyclewayDirection(isRight)
} else {
selectCycleway(isRight)
}
}

val answer = CyclewayAnswer(
left = leftSide?.let { CyclewaySide(it, leftSideDir) },
right = rightSide?.let { CyclewaySide(it, rightSideDir) },
isOnewayNotForCyclists = isOnewayNotForCyclists
)
private fun selectCycleway(isRight: Boolean) {
val isContraflowInOneway = isContraflowInOneway(isRight)
val dialogItems = getSelectableCycleways(countryInfo, element.tags, isRight)
.map { it.asDialogItem(isRight, isContraflowInOneway, requireContext(), countryInfo, ) }

val wasOnewayNotForCyclists = isOneway && isNotOnewayForCyclists(element.tags, isLeftHandTraffic)
if (!isOnewayNotForCyclists && wasOnewayNotForCyclists) {
confirmNotOnewayForCyclists {
applyAnswer(answer)
streetSideSelect.saveLastSelection()
}
ImageListPickerDialog(requireContext(), dialogItems, R.layout.labeled_icon_button_cell, 2) { item ->
val streetSideItem = item.value!!.asStreetSideItem(isRight, isContraflowInOneway, countryInfo)
streetSideSelect.replacePuzzleSide(streetSideItem, isRight)
}.show()
}

override fun onClickOk() {
val cycleways = LeftAndRightCycleway(streetSideSelect.left?.value, streetSideSelect.right?.value)
if (cycleways.wasNoOnewayForCyclistsButNowItIs(element.tags, isLeftHandTraffic)) {
confirmNotOnewayForCyclists { saveAndApplyCycleway(cycleways) }
} else {
applyAnswer(answer)
streetSideSelect.saveLastSelection()
saveAndApplyCycleway(cycleways)
}
}

Expand All @@ -189,10 +184,22 @@ class AddCyclewayForm : AStreetSideSelectForm<Cycleway, CyclewayAnswer>() {
.setNegativeButton(R.string.quest_generic_confirmation_no, null)
.show()
}
}

private fun Cycleway.isSingleTrackOrLane() =
this === Cycleway.TRACK || this === Cycleway.EXCLUSIVE_LANE
private fun saveAndApplyCycleway(cycleways: LeftAndRightCycleway) {
streetSideSelect.saveLastSelection()
applyAnswer(cycleways)
}

/* --------------------------------- AStreetSideSelectForm ---------------------------------- */

private fun Cycleway.isDualTrackOrLane() =
this === Cycleway.DUAL_TRACK || this === Cycleway.DUAL_LANE
override fun serialize(item: CyclewayAndDirection) = Json.encodeToString(item)
override fun deserialize(str: String) = Json.decodeFromString<CyclewayAndDirection>(str)
override fun asStreetSideItem(item: CyclewayAndDirection, isRight: Boolean): StreetSideDisplayItem<CyclewayAndDirection> {
val isContraflowInOneway = isContraflowInOneway(isRight)
// NONE_NO_ONEWAY is displayed as simply NONE if not in contraflow because the former makes
// only really sense in contraflow. This can only happen when applying the side(s) via the
// last answer button
val item2 = if (item.cycleway == Cycleway.NONE_NO_ONEWAY && !isContraflowInOneway) item.copy(cycleway = Cycleway.NONE) else item
return item2.asStreetSideItem(isRight, isContraflowInOneway, countryInfo)
}
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.defibrillator

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -30,7 +31,7 @@ class AddIsDefibrillatorIndoor : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["indoor"] = answer.toYesNo()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.diet_type

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -38,7 +39,7 @@ class AddHalal : OsmFilterQuestType<DietAvailabilityAnswer>() {

override fun createForm() = AddDietTypeForm.create(R.string.quest_dietType_explanation_halal)

override fun applyAnswerTo(answer: DietAvailabilityAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: DietAvailabilityAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is DietAvailability -> tags.updateWithCheckDate("diet:halal", answer.osmValue)
NoFood -> tags["food"] = "no"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.diet_type

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -38,7 +39,7 @@ class AddKosher : OsmFilterQuestType<DietAvailabilityAnswer>() {

override fun createForm() = AddDietTypeForm.create(R.string.quest_dietType_explanation_kosher)

override fun applyAnswerTo(answer: DietAvailabilityAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: DietAvailabilityAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is DietAvailability -> tags.updateWithCheckDate("diet:kosher", answer.osmValue)
NoFood -> tags["food"] = "no"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.diet_type

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -42,7 +43,7 @@ class AddVegan : OsmFilterQuestType<DietAvailabilityAnswer>() {

override fun createForm() = AddDietTypeForm.create(R.string.quest_dietType_explanation_vegan)

override fun applyAnswerTo(answer: DietAvailabilityAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: DietAvailabilityAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is DietAvailability -> tags.updateWithCheckDate("diet:vegan", answer.osmValue)
NoFood -> tags["food"] = "no"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.diet_type

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -38,7 +39,7 @@ class AddVegetarian : OsmFilterQuestType<DietAvailabilityAnswer>() {

override fun createForm() = AddDietTypeForm.create(R.string.quest_dietType_explanation_vegetarian)

override fun applyAnswerTo(answer: DietAvailabilityAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: DietAvailabilityAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is DietAvailability -> {
tags.updateWithCheckDate("diet:vegetarian", answer.osmValue)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.drinking_water

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -39,7 +40,7 @@ class AddDrinkingWater : OsmFilterQuestType<DrinkingWater>() {

override fun createForm() = AddDrinkingWaterForm()

override fun applyAnswerTo(answer: DrinkingWater, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: DrinkingWater, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["drinking_water"] = answer.osmValue
answer.osmLegalValue?.let { tags["drinking_water:legal"] = it }
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.drinking_water_type

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CITIZEN
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.OUTDOORS
Expand Down Expand Up @@ -29,7 +30,7 @@ class AddDrinkingWaterType : OsmFilterQuestType<DrinkingWaterType>() {

override fun createForm() = AddDrinkingWaterTypeForm()

override fun applyAnswerTo(answer: DrinkingWaterType, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: DrinkingWaterType, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
answer.applyTo(tags)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package de.westnordost.streetcomplete.quests.existence
import de.westnordost.osmfeatures.FeatureDictionary
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.osmquests.OsmElementQuestType
Expand Down Expand Up @@ -114,7 +115,7 @@ class CheckExistence(

override fun createForm() = CheckExistenceForm()

override fun applyAnswerTo(answer: Unit, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Unit, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateCheckDate()
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.ferry

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CAR
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.RARE
Expand All @@ -21,7 +22,7 @@ class AddFerryAccessMotorVehicle : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["motor_vehicle"] = answer.toYesNo()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.ferry

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.PEDESTRIAN
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.RARE
Expand All @@ -21,7 +22,7 @@ class AddFerryAccessPedestrian : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["foot"] = answer.toYesNo()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.fire_hydrant

import de.westnordost.streetcomplete.R
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.filter
Expand All @@ -24,7 +25,7 @@ class AddFireHydrantType : OsmFilterQuestType<FireHydrantType>() {

override fun createForm() = AddFireHydrantTypeForm()

override fun applyAnswerTo(answer: FireHydrantType, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: FireHydrantType, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["fire_hydrant:type"] = answer.osmValue
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.fire_hydrant_diameter

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -36,7 +37,7 @@ class AddFireHydrantDiameter : OsmFilterQuestType<FireHydrantDiameterAnswer>() {

override fun createForm() = AddFireHydrantDiameterForm()

override fun applyAnswerTo(answer: FireHydrantDiameterAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: FireHydrantDiameterAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is FireHydrantDiameter -> tags["fire_hydrant:diameter"] = answer.toOsmValue()
is NoFireHydrantDiameterSign -> tags["fire_hydrant:diameter:signed"] = "no"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.fire_hydrant_position

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -29,7 +30,7 @@ class AddFireHydrantPosition : OsmFilterQuestType<FireHydrantPosition>() {

override fun createForm() = AddFireHydrantPositionForm()

override fun applyAnswerTo(answer: FireHydrantPosition, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: FireHydrantPosition, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["fire_hydrant:position"] = answer.osmValue
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.fire_hydrant_ref

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.quest.NoCountriesExcept
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement
Expand All @@ -26,7 +27,7 @@ class AddFireHydrantRef : OsmFilterQuestType<FireHydrantRefAnswer>() {

override fun createForm() = AddFireHydrantRefForm()

override fun applyAnswerTo(answer: FireHydrantRefAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: FireHydrantRefAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is NoVisibleFireHydrantRef -> tags["ref:signed"] = "no"
is FireHydrantRef -> tags["ref"] = answer.ref
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.foot

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.PEDESTRIAN
import de.westnordost.streetcomplete.osm.ANYTHING_PAVED
Expand Down Expand Up @@ -50,7 +51,7 @@ class AddProhibitedForPedestrians : OsmFilterQuestType<ProhibitedForPedestriansA

override fun createForm() = AddProhibitedForPedestriansForm()

override fun applyAnswerTo(answer: ProhibitedForPedestriansAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: ProhibitedForPedestriansAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
// the question is whether it is prohibited, so YES -> foot=no etc
YES -> tags["foot"] = "no"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.fuel_service

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.quest.NoCountriesExcept
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CAR
Expand All @@ -26,7 +27,7 @@ class AddFuelSelfService : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["self_service"] = answer.toYesNo()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.general_fee

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CITIZEN
import de.westnordost.streetcomplete.osm.Tags
Expand All @@ -24,7 +25,7 @@ class AddGeneralFee : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["fee"] = answer.toYesNo()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.handrail

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.PEDESTRIAN
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.WHEELCHAIR
Expand Down Expand Up @@ -33,7 +34,7 @@ class AddHandrail : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateWithCheckDate("handrail", answer.toYesNo())
if (!answer) {
tags.remove("handrail:left")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.incline_direction

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.geometry.ElementPolylinesGeometry
import de.westnordost.streetcomplete.data.osm.mapdata.Element
import de.westnordost.streetcomplete.data.osm.mapdata.MapDataWithGeometry
Expand Down Expand Up @@ -49,6 +50,6 @@ class AddBicycleIncline : OsmElementQuestType<BicycleInclineAnswer> {

override fun createForm() = AddBicycleInclineForm()

override fun applyAnswerTo(answer: BicycleInclineAnswer, tags: Tags, timestampEdited: Long) =
override fun applyAnswerTo(answer: BicycleInclineAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) =
answer.applyTo(tags)
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.incline_direction

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.PEDESTRIAN
import de.westnordost.streetcomplete.osm.Tags
Expand All @@ -23,6 +24,6 @@ class AddStepsIncline : OsmFilterQuestType<Incline>() {

override fun createForm() = AddInclineForm()

override fun applyAnswerTo(answer: Incline, tags: Tags, timestampEdited: Long) =
override fun applyAnswerTo(answer: Incline, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) =
answer.applyTo(tags)
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.internet_access

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CITIZEN
import de.westnordost.streetcomplete.osm.Tags
Expand Down Expand Up @@ -35,7 +36,7 @@ class AddInternetAccess : OsmFilterQuestType<InternetAccess>() {

override fun createForm() = AddInternetAccessForm()

override fun applyAnswerTo(answer: InternetAccess, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: InternetAccess, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateWithCheckDate("internet_access", answer.osmValue)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.kerb_height

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.Node
Expand Down Expand Up @@ -39,7 +40,7 @@ class AddKerbHeight : OsmElementQuestType<KerbHeight> {

override fun createForm() = AddKerbHeightForm()

override fun applyAnswerTo(answer: KerbHeight, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: KerbHeight, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateWithCheckDate("kerb", answer.osmValue)
if (answer.osmValue == "no") {
tags.remove("barrier")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.lanes

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CAR
import de.westnordost.streetcomplete.osm.ANYTHING_PAVED
Expand Down Expand Up @@ -32,7 +33,7 @@ class AddLanes : OsmFilterQuestType<LanesAnswer>() {

override fun createForm() = AddLanesForm()

override fun applyAnswerTo(answer: LanesAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: LanesAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {

val laneCount = answer.total

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.leaf_detail

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.geometry.ElementPolygonsGeometry
import de.westnordost.streetcomplete.data.osm.mapdata.Element
import de.westnordost.streetcomplete.data.osm.mapdata.MapDataWithGeometry
Expand Down Expand Up @@ -47,7 +48,7 @@ class AddForestLeafType : OsmElementQuestType<ForestLeafType> {

override fun createForm() = AddForestLeafTypeForm()

override fun applyAnswerTo(answer: ForestLeafType, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: ForestLeafType, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["leaf_type"] = answer.osmValue
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.level

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.geometry.ElementPolygonsGeometry
import de.westnordost.streetcomplete.data.osm.mapdata.Element
import de.westnordost.streetcomplete.data.osm.mapdata.MapDataWithGeometry
Expand Down Expand Up @@ -112,7 +113,7 @@ class AddLevel : OsmElementQuestType<String> {

override fun createForm() = AddLevelForm()

override fun applyAnswerTo(answer: String, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: String, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["level"] = answer
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.max_height

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.geometry.ElementPolylinesGeometry
import de.westnordost.streetcomplete.data.osm.mapdata.Element
import de.westnordost.streetcomplete.data.osm.mapdata.MapDataWithGeometry
Expand Down Expand Up @@ -122,7 +123,7 @@ class AddMaxHeight : OsmElementQuestType<MaxHeightAnswer> {

override fun createForm() = AddMaxHeightForm()

override fun applyAnswerTo(answer: MaxHeightAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: MaxHeightAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is MaxHeight -> {
tags["maxheight"] = answer.value.toOsmValue()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.max_height

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.osmquests.OsmElementQuestType
Expand Down Expand Up @@ -62,7 +63,7 @@ class AddMaxPhysicalHeight(

override fun createForm() = AddMaxPhysicalHeightForm()

override fun applyAnswerTo(answer: MaxPhysicalHeightAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: MaxPhysicalHeightAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
// overwrite maxheight value but retain the info that there is no sign onto another tag
tags["maxheight"] = answer.height.toOsmValue()
tags["maxheight:signed"] = "no"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.max_speed

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.quest.AllCountriesExcept
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CAR
Expand Down Expand Up @@ -36,7 +37,7 @@ class AddMaxSpeed : OsmFilterQuestType<MaxSpeedAnswer>() {

override fun createForm() = AddMaxSpeedForm()

override fun applyAnswerTo(answer: MaxSpeedAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: MaxSpeedAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is MaxSpeedSign -> {
tags["maxspeed"] = answer.value.toString()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.max_weight

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CAR
import de.westnordost.streetcomplete.osm.Tags
Expand Down Expand Up @@ -37,7 +38,7 @@ class AddMaxWeight : OsmFilterQuestType<MaxWeightAnswer>() {

override fun createForm() = AddMaxWeightForm()

override fun applyAnswerTo(answer: MaxWeightAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: MaxWeightAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
when (answer) {
is MaxWeight -> {
tags[answer.sign.osmKey] = answer.weight.toString()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.memorial_type

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CITIZEN
import de.westnordost.streetcomplete.osm.Tags
Expand All @@ -22,7 +23,7 @@ class AddMemorialType : OsmFilterQuestType<MemorialType>() {

override fun createForm() = AddMemorialTypeForm()

override fun applyAnswerTo(answer: MemorialType, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: MemorialType, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
answer.applyTo(tags)
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.motorcycle_parking_capacity

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -29,7 +30,7 @@ class AddMotorcycleParkingCapacity : OsmFilterQuestType<Int>() {
override fun getHighlightedElements(element: Element, getMapData: () -> MapDataWithGeometry) =
getMapData().filter("nodes, ways with amenity = motorcycle_parking")

override fun applyAnswerTo(answer: Int, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Int, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateWithCheckDate("capacity", answer.toString())
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.motorcycle_parking_cover

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -31,7 +32,7 @@ class AddMotorcycleParkingCover : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["covered"] = answer.toYesNo()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package de.westnordost.streetcomplete.quests.oneway

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
Expand Down Expand Up @@ -79,7 +80,7 @@ class AddOneway : OsmElementQuestType<OnewayAnswer> {

override fun createForm() = AddOnewayForm()

override fun applyAnswerTo(answer: OnewayAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: OnewayAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["oneway"] = when (answer) {
FORWARD -> "yes"
BACKWARD -> "-1"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package de.westnordost.streetcomplete.quests.oneway_suspects
import android.util.Log
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.geometry.ElementPolylinesGeometry
import de.westnordost.streetcomplete.data.osm.mapdata.Element
import de.westnordost.streetcomplete.data.osm.mapdata.LatLon
Expand Down Expand Up @@ -134,7 +135,7 @@ class AddSuspectedOneway(

override fun createForm() = AddSuspectedOnewayForm()

override fun applyAnswerTo(answer: SuspectedOnewayAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: SuspectedOnewayAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
if (!answer.isOneway) {
tags["oneway"] = "no"
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.elementfilter.filters.RelativeDate
import de.westnordost.streetcomplete.data.elementfilter.filters.TagOlderThan
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.filter
Expand Down Expand Up @@ -156,7 +157,7 @@ class AddOpeningHours(

override fun createForm() = AddOpeningHoursForm()

override fun applyAnswerTo(answer: OpeningHoursAnswer, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: OpeningHoursAnswer, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
if (answer is NoOpeningHoursSign) {
tags["opening_hours:signed"] = "no"
tags.updateCheckDateForKey("opening_hours")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package de.westnordost.streetcomplete.quests.opening_hours_signed
import de.westnordost.osmfeatures.FeatureDictionary
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.filter
Expand Down Expand Up @@ -62,7 +63,7 @@ class CheckOpeningHoursSigned(

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {

if (answer) {
tags.remove("opening_hours:signed")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.orchard_produce

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.OUTDOORS
import de.westnordost.streetcomplete.osm.Tags
Expand All @@ -22,7 +23,7 @@ class AddOrchardProduce : OsmFilterQuestType<List<OrchardProduce>>() {

override fun createForm() = AddOrchardProduceForm()

override fun applyAnswerTo(answer: List<OrchardProduce>, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: List<OrchardProduce>, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["produce"] = answer.joinToString(";") { it.osmValue }

val landuse = answer.singleOrNull()?.osmLanduseValue
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.parking_access

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.BICYCLIST
import de.westnordost.streetcomplete.osm.Tags
Expand All @@ -24,7 +25,7 @@ class AddBikeParkingAccess : OsmFilterQuestType<ParkingAccess>() {

override fun createForm() = AddParkingAccessForm()

override fun applyAnswerTo(answer: ParkingAccess, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: ParkingAccess, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["access"] = answer.osmValue
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.parking_access

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CAR
import de.westnordost.streetcomplete.osm.Tags
Expand Down Expand Up @@ -38,7 +39,7 @@ class AddParkingAccess : OsmFilterQuestType<ParkingAccess>() {

override fun createForm() = AddParkingAccessForm()

override fun applyAnswerTo(answer: ParkingAccess, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: ParkingAccess, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["access"] = answer.osmValue
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.parking_fee

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.BICYCLIST
import de.westnordost.streetcomplete.osm.Tags
Expand Down Expand Up @@ -30,6 +31,6 @@ class AddBikeParkingFee : OsmFilterQuestType<FeeAndMaxStay>() {

override fun createForm() = AddParkingFeeForm()

override fun applyAnswerTo(answer: FeeAndMaxStay, tags: Tags, timestampEdited: Long) =
override fun applyAnswerTo(answer: FeeAndMaxStay, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) =
answer.applyTo(tags)
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.parking_fee

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CAR
import de.westnordost.streetcomplete.osm.Tags
Expand All @@ -24,6 +25,6 @@ class AddParkingFee : OsmFilterQuestType<FeeAndMaxStay>() {

override fun createForm() = AddParkingFeeForm()

override fun applyAnswerTo(answer: FeeAndMaxStay, tags: Tags, timestampEdited: Long) =
override fun applyAnswerTo(answer: FeeAndMaxStay, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) =
answer.applyTo(tags)
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.parking_type

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.CAR
import de.westnordost.streetcomplete.osm.Tags
Expand All @@ -21,7 +22,7 @@ class AddParkingType : OsmFilterQuestType<ParkingType>() {

override fun createForm() = AddParkingTypeForm()

override fun applyAnswerTo(answer: ParkingType, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: ParkingType, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["parking"] = answer.osmValue
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.picnic_table_cover

import de.westnordost.streetcomplete.R
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.filter
Expand Down Expand Up @@ -32,7 +33,7 @@ class AddPicnicTableCover : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags["covered"] = answer.toYesNo()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.westnordost.streetcomplete.quests.pitch_lit

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.data.osm.geometry.ElementGeometry
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.data.user.achievements.EditTypeAchievement.OUTDOORS
import de.westnordost.streetcomplete.osm.Tags
Expand Down Expand Up @@ -29,7 +30,7 @@ class AddPitchLit : OsmFilterQuestType<Boolean>() {

override fun createForm() = YesNoQuestForm()

override fun applyAnswerTo(answer: Boolean, tags: Tags, timestampEdited: Long) {
override fun applyAnswerTo(answer: Boolean, tags: Tags, geometry: ElementGeometry, timestampEdited: Long) {
tags.updateWithCheckDate("lit", answer.toYesNo())
}
}
Loading