Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ abstract class AItemsSelectQuestForm<I, T> : AbstractOsmQuestForm<T>() {

private val prefs: Preferences by inject()

private var isDisplayingPrevious = false

protected open var preselectedItems: Set<I> = emptySet()

protected open val itemsPerRow = 4

/** return true to move last picked items to the front. On by default. Only respected if the
Expand All @@ -58,16 +62,22 @@ abstract class AItemsSelectQuestForm<I, T> : AbstractOsmQuestForm<T>() {
super.onCreate(savedInstanceState)
reorderedItems = if (items.size > itemsPerRow && moveFavoritesToFront) {
moveFavouritesToFront(items)
} else items
} else {
items
}
}

@Composable protected abstract fun ItemContent(item: I)

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

if (preselectedItems.isNotEmpty()) {
isDisplayingPrevious = true
}

binding.composeViewBase.content { Surface {
selectedItems = remember { mutableStateOf(emptySet()) }
selectedItems = remember { mutableStateOf(preselectedItems) }
Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
CompositionLocalProvider(
LocalContentAlpha provides ContentAlpha.medium,
Expand All @@ -83,13 +93,14 @@ abstract class AItemsSelectQuestForm<I, T> : AbstractOsmQuestForm<T>() {
modifier = Modifier.fillMaxWidth()
) { ItemContent(it) }
}
} }
}
checkIsFormComplete()
}
}

open fun onSelect(item: I, selected: Boolean) {
selectedItems.value =
if (selected) { selectedItems.value + item }
else { selectedItems.value - item }
if (selected) { selectedItems.value + item } else { selectedItems.value - item }
checkIsFormComplete()
}

Expand All @@ -103,11 +114,26 @@ abstract class AItemsSelectQuestForm<I, T> : AbstractOsmQuestForm<T>() {

protected abstract fun onClickOk(selectedItems: Set<I>)

override fun isFormComplete() = selectedItems.value.isNotEmpty()
override fun isFormComplete() = !isDisplayingPrevious && selectedItems.value.isNotEmpty()

private fun moveFavouritesToFront(originalList: List<I>): List<I> {
val favourites = prefs.getLastPicked(ListSerializer(serializer), this::class.simpleName!!)
.takeFavorites(n = itemsPerRow)
return (favourites + originalList).distinct()
}

override val buttonPanelAnswers get() =
if (isDisplayingPrevious) {
listOf(
AnswerItem(R.string.quest_generic_hasFeature_no) {
isDisplayingPrevious = false
updateButtonPanel()
},
AnswerItem(R.string.quest_generic_hasFeature_yes) {
applyAnswer(preselectedItems as T)
}
)
} else {
emptyList()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,12 @@ class AddBicycleRepairStationServices : OsmFilterQuestType<Set<BicycleRepairStat
override val isDeleteElementEnabled = true
override val achievements = listOf(BICYCLIST)

override fun getTitle(tags: Map<String, String>) = R.string.quest_bicycle_repair_station_services_title
override fun getTitle(tags: Map<String, String>): Int {
if (tags.keys.none { it.startsWith("service:bicycle:") }) {
return R.string.quest_bicycle_repair_station_services_title
}
return R.string.quest_bicycle_repair_station_services_resurvey_title
}

override fun createForm() = AddBicycleRepairStationServicesForm()

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

import android.os.Bundle
import android.view.View
import androidx.compose.runtime.Composable
import de.westnordost.streetcomplete.quests.AItemsSelectQuestForm
import de.westnordost.streetcomplete.ui.common.item_select.ImageWithLabel
Expand All @@ -20,4 +22,11 @@ class AddBicycleRepairStationServicesForm : AItemsSelectQuestForm<BicycleRepairS
override fun onClickOk(selectedItems: Set<BicycleRepairStationService>) {
applyAnswer(selectedItems)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
preselectedItems = items.filter {
element.tags["service:bicycle:" + it.value] == "yes"
}.toSet()
super.onViewCreated(view, savedInstanceState)
}
}
1 change: 1 addition & 0 deletions app/src/androidMain/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -810,6 +810,7 @@ Before uploading your changes, the app checks with a &lt;a href="https://www.wes
<string name="quest_bicycle_rental_type_shop_with_rental">Bicycle store that also rents bicycles</string>

<string name="quest_bicycle_repair_station_services_title">What bicycle equipment is available here?</string>
<string name="quest_bicycle_repair_station_services_resurvey_title">Are these bicycle tools still correct?</string>
<string name="quest_bicycle_repair_station_pump">Pump</string>
<string name="quest_bicycle_repair_station_tools">Various tools</string>
<string name="quest_bicycle_repair_station_stand">Work stand</string>
Expand Down