Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Quest: trail_visibility #486

Merged
merged 11 commits into from
Nov 10, 2023
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ import de.westnordost.streetcomplete.quests.traffic_calming_type.AddTrafficCalmi
import de.westnordost.streetcomplete.quests.traffic_signals_button.AddTrafficSignalsButton
import de.westnordost.streetcomplete.quests.traffic_signals_sound.AddTrafficSignalsSound
import de.westnordost.streetcomplete.quests.traffic_signals_vibrate.AddTrafficSignalsVibration
import de.westnordost.streetcomplete.quests.trail_visibility.AddTrailVisibility
import de.westnordost.streetcomplete.quests.tree.AddTreeGenus
import de.westnordost.streetcomplete.quests.way_lit.AddWayLit
import de.westnordost.streetcomplete.quests.wheelchair_access.AddWheelchairAccessBusiness
Expand Down Expand Up @@ -586,6 +587,7 @@ fun getQuestTypeList(
EE_QUEST_OFFSET + 25 to AddDestination(),
EE_QUEST_OFFSET + 22 to AddArtworkType(),
EE_QUEST_OFFSET + 23 to AddRailwayPlatformRef(),
EE_QUEST_OFFSET + 33 to AddTrailVisibility(),
EE_QUEST_OFFSET + 9 to AddTreeGenus(),
EE_QUEST_OFFSET + 26 to AddIsPharmacyDispensing(),
EE_QUEST_OFFSET + 28 to AddFootwayWidth(arSupportChecker),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package de.westnordost.streetcomplete.quests.trail_visibility

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
import de.westnordost.streetcomplete.data.osm.osmquests.OsmFilterQuestType
import de.westnordost.streetcomplete.osm.Tags

class AddTrailVisibility : OsmFilterQuestType<TrailVisibility>() {

override val elementFilter = """
ways with
highway ~ path|footway|cycleway|bridleway
and !trail_visibility
and (sac_scale and sac_scale != hiking)
mcliquid marked this conversation as resolved.
Show resolved Hide resolved
and (!lit or lit = no)
and surface ~ "ground|earth|dirt|soil|grass|sand|mud|ice|salt|snow|rock|stone"
"""
override val changesetComment = "Specify Trail Visibility"
override val wikiLink = "Key:trail_visibility"
override val icon = R.drawable.ic_quest_trail_visibility
override val defaultDisabledMessage = R.string.default_disabled_msg_trail_visibility

override fun getTitle(tags: Map<String, String>) = R.string.quest_trail_visibility_title

override fun getHighlightedElements(element: Element, getMapData: () -> MapDataWithGeometry) =
getMapData().filter("ways with highway and trail_visibility")

override fun createForm() = AddTrailVisibilityForm()

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

import android.os.Bundle
import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.quests.AImageListQuestForm
import de.westnordost.streetcomplete.view.image_select.DisplayItem

class AddTrailVisibilityForm : AImageListQuestForm<TrailVisibility, TrailVisibility>() {
Helium314 marked this conversation as resolved.
Show resolved Hide resolved

override val items: List<DisplayItem<TrailVisibility>> get() = listOf(
TrailVisibility.EXCELLENT,
TrailVisibility.GOOD,
TrailVisibility.INTERMEDIATE,
TrailVisibility.BAD,
TrailVisibility.HORRIBLE,
TrailVisibility.NO
).toItems()

override val itemsPerRow = 2
override val moveFavoritesToFront = false

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
imageSelector.cellLayoutId = R.layout.cell_labeled_icon_select_trail_visibility
}

override fun onClickOk(selectedItems: List<TrailVisibility>) {
applyAnswer(selectedItems.first())
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package de.westnordost.streetcomplete.quests.trail_visibility

import de.westnordost.streetcomplete.R
import de.westnordost.streetcomplete.quests.trail_visibility.TrailVisibility.*
import de.westnordost.streetcomplete.view.image_select.GroupableDisplayItem
import de.westnordost.streetcomplete.view.image_select.Item

enum class TrailVisibility(val osmValue: String) {
EXCELLENT("excellent"),
GOOD("good"),
INTERMEDIATE("intermediate"),
BAD("bad"),
HORRIBLE("horrible"),
NO("no")
}
fun Collection<TrailVisibility>.toItems() = map { it.asItem() }

fun TrailVisibility.asItem(): GroupableDisplayItem<TrailVisibility> {
return Item(this, titleId = titleResId, descriptionId = descriptionResId)
}

private val TrailVisibility.titleResId: Int get() = when (this) {
EXCELLENT -> R.string.quest_trail_visibility_excellent
GOOD -> R.string.quest_trail_visibility_good
INTERMEDIATE -> R.string.quest_trail_visibility_intermediate
BAD -> R.string.quest_trail_visibility_bad
HORRIBLE -> R.string.quest_trail_visibility_horrible
NO -> R.string.quest_trail_visibility_no
}

private val TrailVisibility.descriptionResId: Int? get() = when (this) {
EXCELLENT -> R.string.quest_trail_visibility_excellent_description
GOOD -> R.string.quest_trail_visibility_good_description
INTERMEDIATE -> R.string.quest_trail_visibility_intermediate_description
BAD -> R.string.quest_trail_visibility_bad_description
HORRIBLE -> R.string.quest_trail_visibility_horrible_description
NO -> R.string.quest_trail_visibility_no_description
else -> null
}