From 902763dba772f19022c1bcf5c774ddb5066b2cc1 Mon Sep 17 00:00:00 2001 From: andrekir Date: Sat, 1 Apr 2023 06:46:18 -0300 Subject: [PATCH] feat: add EditListPreference component for lora.ignore_incoming --- .../mesh/ui/DeviceSettingsItemList.kt | 12 ++++--- .../mesh/ui/components/EditTextPreference.kt | 31 +++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/ui/DeviceSettingsItemList.kt b/app/src/main/java/com/geeksville/mesh/ui/DeviceSettingsItemList.kt index 70d5bcce0..20b33dfef 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/DeviceSettingsItemList.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/DeviceSettingsItemList.kt @@ -28,6 +28,7 @@ import com.geeksville.mesh.service.MeshService import com.geeksville.mesh.ui.components.BitwisePreference import com.geeksville.mesh.ui.components.DropDownPreference import com.geeksville.mesh.ui.components.EditIPv4Preference +import com.geeksville.mesh.ui.components.EditListPreference import com.geeksville.mesh.ui.components.EditTextPreference import com.geeksville.mesh.ui.components.PreferenceCategory import com.geeksville.mesh.ui.components.PreferenceFooter @@ -809,14 +810,15 @@ fun DeviceSettingsItemList(viewModel: UIViewModel = viewModel()) { item { Divider() } item { - EditTextPreference(title = "Ignore incoming", // FIXME use proper Composable component - value = loraInput.ignoreIncomingList.getOrNull(0) ?: 0, + EditListPreference(title = "Ignore incoming", + list = loraInput.ignoreIncomingList, + maxCount = 3, // ignore_incoming max_count:3 enabled = connected, keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }), - onValueChanged = { + onValuesChanged = { list -> loraInput = loraInput.copy { - if (loraInput.ignoreIncomingCount == 0) ignoreIncoming.add(it) - else if (it == 0) ignoreIncoming.clear() else ignoreIncoming[0] = it + ignoreIncoming.clear() + ignoreIncoming.addAll(list.filter { it != 0 }) } }) } diff --git a/app/src/main/java/com/geeksville/mesh/ui/components/EditTextPreference.kt b/app/src/main/java/com/geeksville/mesh/ui/components/EditTextPreference.kt index 5f7d3e020..d08cebede 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/components/EditTextPreference.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/components/EditTextPreference.kt @@ -14,6 +14,7 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.twotone.Info import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue @@ -161,6 +162,36 @@ fun EditIPv4Preference( ) } +@Composable +fun EditListPreference( + title: String, + list: List, + maxCount: Int, + enabled: Boolean, + keyboardActions: KeyboardActions, + onValuesChanged: (List) -> Unit, + modifier: Modifier = Modifier, +) { + val listState = remember(list) { mutableStateListOf().apply { addAll(list) } } + + Column(modifier = modifier) { + for (i in 0..list.size.coerceAtMost(maxCount - 1)) { + val value = listState.getOrNull(i) + EditTextPreference( + title = "$title ${i + 1}/$maxCount", + value = value ?: 0, + enabled = enabled, + keyboardActions = keyboardActions, + onValueChanged = { + if (value == null) listState.add(it) else listState[i] = it + onValuesChanged(listState) + }, + modifier = modifier.fillMaxWidth() + ) + } + } +} + @Composable fun EditTextPreference( title: String,