feat(settings): Allow clearing the node status message (#4577)

Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
This commit is contained in:
James Rich
2026-02-17 07:32:48 -06:00
committed by GitHub
parent eb2f04117a
commit 558cf77768
4 changed files with 21 additions and 6 deletions

View File

@@ -239,7 +239,7 @@ constructor(
fun handleSetModuleConfig(id: Int, destNum: Int, payload: ByteArray) {
val c = ModuleConfig.ADAPTER.decode(payload)
commandSender.sendAdmin(destNum, id) { AdminMessage(set_module_config = c) }
c.statusmessage?.node_status?.let { status -> nodeManager.updateNodeStatus(destNum, status) }
c.statusmessage?.let { sm -> nodeManager.updateNodeStatus(destNum, sm.node_status) }
}
fun handleGetModuleConfig(id: Int, destNum: Int, config: Int) {

View File

@@ -66,8 +66,8 @@ constructor(
scope.handledLaunch { radioConfigRepository.setLocalModuleConfig(config) }
serviceRepository.setConnectionProgress("Module config received")
config.statusmessage?.node_status?.let { status ->
nodeManager.myNodeNum?.let { num -> nodeManager.updateNodeStatus(num, status) }
config.statusmessage?.let { sm ->
nodeManager.myNodeNum?.let { num -> nodeManager.updateNodeStatus(num, sm.node_status) }
}
}

View File

@@ -213,8 +213,8 @@ constructor(
updateNodeStatus(fromNum, s.status)
}
fun updateNodeStatus(nodeNum: Int, status: String) {
updateNodeInfo(nodeNum) { it.nodeStatus = status }
fun updateNodeStatus(nodeNum: Int, status: String?) {
updateNodeInfo(nodeNum) { it.nodeStatus = status?.takeIf { s -> s.isNotEmpty() } }
}
fun installNodeInfo(info: ProtoNodeInfo, withBroadcast: Boolean = true) {

View File

@@ -18,6 +18,10 @@ package org.meshtastic.feature.settings.radio.component
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Clear
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.platform.LocalFocusManager
@@ -27,6 +31,7 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.clear
import org.meshtastic.core.strings.node_status_summary
import org.meshtastic.core.strings.status_message
import org.meshtastic.core.strings.status_message_config
@@ -58,7 +63,7 @@ fun StatusMessageConfigScreen(viewModel: RadioConfigViewModel = hiltViewModel(),
TitledCard(title = stringResource(Res.string.status_message_config)) {
EditTextPreference(
title = stringResource(Res.string.node_status_summary),
value = formState.value.node_status ?: "",
value = formState.value.node_status,
maxSize = 80, // status_message max_size:80
enabled = state.connected,
isError = false,
@@ -66,6 +71,16 @@ fun StatusMessageConfigScreen(viewModel: RadioConfigViewModel = hiltViewModel(),
KeyboardOptions.Default.copy(keyboardType = KeyboardType.Text, imeAction = ImeAction.Done),
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
onValueChanged = { formState.value = formState.value.copy(node_status = it) },
trailingIcon = {
if (formState.value.node_status.isNotEmpty()) {
IconButton(onClick = { formState.value = formState.value.copy(node_status = "") }) {
Icon(
imageVector = Icons.Default.Clear,
contentDescription = stringResource(Res.string.clear),
)
}
}
},
)
}
}