From ffea797eba6f8555df06a90dbd26b461cc125a22 Mon Sep 17 00:00:00 2001 From: avi Date: Tue, 15 Sep 2026 11:34:48 -0500 Subject: [PATCH] Settings: remove search field - Settings list is small; search added noise - Drop OutlinedTextField + query filtering from ViewModel --- .../com/shonar/ui/settings/SettingsScreen.kt | 12 +----------- .../com/shonar/ui/settings/SettingsViewModel.kt | 17 ++--------------- 2 files changed, 3 insertions(+), 26 deletions(-) diff --git a/android/app/src/main/java/com/shonar/ui/settings/SettingsScreen.kt b/android/app/src/main/java/com/shonar/ui/settings/SettingsScreen.kt index 4c596bc..327385d 100644 --- a/android/app/src/main/java/com/shonar/ui/settings/SettingsScreen.kt +++ b/android/app/src/main/java/com/shonar/ui/settings/SettingsScreen.kt @@ -65,7 +65,7 @@ import kotlinx.serialization.json.jsonPrimitive /** * Generic settings screen: every control is rendered from the setting's * [SettingType] — no per-setting UI code. Users can add/edit/delete custom - * settings, reset to defaults, search, and export/import JSON. + * settings, reset to defaults, and export/import JSON. */ @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -109,16 +109,6 @@ fun SettingsScreen(onBack: () -> Unit) { ) } - OutlinedTextField( - value = state.search, - onValueChange = vm::setSearch, - placeholder = { Text("Search settings") }, - singleLine = true, - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = 16.dp, vertical = 8.dp), - ) - LazyColumn(Modifier.fillMaxWidth()) { state.categories.forEach { section -> item { diff --git a/android/app/src/main/java/com/shonar/ui/settings/SettingsViewModel.kt b/android/app/src/main/java/com/shonar/ui/settings/SettingsViewModel.kt index 0de53b7..c6c2dae 100644 --- a/android/app/src/main/java/com/shonar/ui/settings/SettingsViewModel.kt +++ b/android/app/src/main/java/com/shonar/ui/settings/SettingsViewModel.kt @@ -16,7 +16,6 @@ import kotlinx.coroutines.launch data class SettingsUiState( val categories: List = emptyList(), - val search: String = "", val busy: Boolean = false, val message: String? = null, ) { @@ -34,7 +33,6 @@ data class SettingsUiState( class SettingsViewModel(private val app: ShonarApplication) : ViewModel() { val settings: SettingsManager = app.settingsManager - private val searchFlow = MutableStateFlow("") private val messageFlow = MutableStateFlow(null) // combine's transform is suspend, so value reads stay coroutine-native @@ -42,9 +40,8 @@ class SettingsViewModel(private val app: ShonarApplication) : ViewModel() { val state: StateFlow = combine( settings.definitions, settings.valuesChanged, - searchFlow, messageFlow, - ) { defs, _, query, message -> + ) { defs, _, message -> val gateValue = mutableMapOf() suspend fun gate(id: String): Boolean = gateValue.getOrPut(id) { settings.bool(id) } @@ -54,12 +51,7 @@ class SettingsViewModel(private val app: ShonarApplication) : ViewModel() { val g = def.visibleIfSettingId ?: return@filter true gate(g) } - val filtered = if (query.isBlank()) visible else visible.filter { - it.name.contains(query, ignoreCase = true) || - it.id.contains(query, ignoreCase = true) || - it.description.contains(query, ignoreCase = true) - } - val byCat = filtered.groupBy { it.category } + val byCat = visible.groupBy { it.category } SettingsUiState( categories = byCat.entries .sortedBy { it.key } @@ -89,15 +81,10 @@ class SettingsViewModel(private val app: ShonarApplication) : ViewModel() { }, ) }, - search = query, message = message, ) }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5_000), SettingsUiState()) - fun setSearch(q: String) { - searchFlow.value = q - } - /** Build-stamped version (versionName), not a stored setting. */ private fun appVersionName(): String? { val pm = app.packageManager