fix: channel list display issues

- show modem preset name if channel name is empty for remote nodes
- fix channel list not showing last channel (index 7)
master
andrekir 2023-05-21 18:32:33 -03:00
rodzic d58e092333
commit 0a3a07f9ed
3 zmienionych plików z 18 dodań i 33 usunięć

Wyświetl plik

@ -509,7 +509,6 @@ class UIViewModel @Inject constructor(
private fun setRemoteChannel(destNum: Int, channel: ChannelProtos.Channel) { private fun setRemoteChannel(destNum: Int, channel: ChannelProtos.Channel) {
try { try {
debug("Sending channel ${channel.index} to $destNum")
meshService?.setRemoteChannel(destNum, channel.toByteArray()) meshService?.setRemoteChannel(destNum, channel.toByteArray())
} catch (ex: RemoteException) { } catch (ex: RemoteException) {
errormsg("Can't set channel on radio ${ex.message}") errormsg("Can't set channel on radio ${ex.message}")

Wyświetl plik

@ -69,6 +69,7 @@ import com.geeksville.mesh.R
import com.geeksville.mesh.android.Logging import com.geeksville.mesh.android.Logging
import com.geeksville.mesh.config import com.geeksville.mesh.config
import com.geeksville.mesh.deviceProfile import com.geeksville.mesh.deviceProfile
import com.geeksville.mesh.model.Channel
import com.geeksville.mesh.model.UIViewModel import com.geeksville.mesh.model.UIViewModel
import com.geeksville.mesh.moduleConfig import com.geeksville.mesh.moduleConfig
import com.geeksville.mesh.service.MeshService import com.geeksville.mesh.service.MeshService
@ -256,22 +257,20 @@ fun RadioConfigNavHost(node: NodeInfo, viewModel: UIViewModel = viewModel()) {
when (parsed.payloadVariantCase) { when (parsed.payloadVariantCase) {
AdminProtos.AdminMessage.PayloadVariantCase.GET_CHANNEL_RESPONSE -> { AdminProtos.AdminMessage.PayloadVariantCase.GET_CHANNEL_RESPONSE -> {
val response = parsed.getChannelResponse val response = parsed.getChannelResponse
channelList.add(response.index, response.settings)
(packetResponseState as PacketResponseState.Loading).completed++
if (response.index + 1 < maxChannels) { if (response.index + 1 < maxChannels) {
// Stop once we get to the first disabled entry // Stop once we get to the first disabled entry
if (response.role != ChannelProtos.Channel.Role.DISABLED) { if (response.role != ChannelProtos.Channel.Role.DISABLED) {
// Not done yet, request next channel // Not done yet, request next channel
(packetResponseState as PacketResponseState.Loading).completed++
channelList.add(response.index, response.settings)
viewModel.getChannel(destNum, response.index + 1) viewModel.getChannel(destNum, response.index + 1)
} else { } else {
// Received the last channel, start channel editor // Received last channel, get lora config (for default channel names)
packetResponseState = PacketResponseState.Empty viewModel.getConfig(destNum, ConfigType.LORA_CONFIG_VALUE)
navController.navigate("channels")
} }
} else { } else {
// Received max channels, start channel editor // Received max channels, get lora config (for default channel names)
packetResponseState = PacketResponseState.Empty viewModel.getConfig(destNum, ConfigType.LORA_CONFIG_VALUE)
navController.navigate("channels")
} }
} }
@ -282,10 +281,13 @@ fun RadioConfigNavHost(node: NodeInfo, viewModel: UIViewModel = viewModel()) {
} }
AdminProtos.AdminMessage.PayloadVariantCase.GET_CONFIG_RESPONSE -> { AdminProtos.AdminMessage.PayloadVariantCase.GET_CONFIG_RESPONSE -> {
// check destination: lora config or channel editor
val goChannels = (packetResponseState as PacketResponseState.Loading).total > 1
packetResponseState = PacketResponseState.Empty packetResponseState = PacketResponseState.Empty
val response = parsed.getConfigResponse val response = parsed.getConfigResponse
radioConfig = response radioConfig = response
enumValues<ConfigDest>().find { it.name == "${response.payloadVariantCase}" } if (goChannels) navController.navigate("channels")
else enumValues<ConfigDest>().find { it.name == "${response.payloadVariantCase}" }
?.let { navController.navigate(it.route) } ?.let { navController.navigate(it.route) }
} }
@ -329,7 +331,8 @@ fun RadioConfigNavHost(node: NodeInfo, viewModel: UIViewModel = viewModel()) {
when (configType) { when (configType) {
"USER" -> { viewModel.getOwner(destNum) } "USER" -> { viewModel.getOwner(destNum) }
"CHANNELS" -> { "CHANNELS" -> {
(packetResponseState as PacketResponseState.Loading).total = maxChannels val maxPackets = maxChannels + 1 // for lora config
(packetResponseState as PacketResponseState.Loading).total = maxPackets
channelList.clear() channelList.clear()
viewModel.getChannel(destNum, 0) viewModel.getChannel(destNum, 0)
} }
@ -384,15 +387,16 @@ fun RadioConfigNavHost(node: NodeInfo, viewModel: UIViewModel = viewModel()) {
composable("channels") { composable("channels") {
ChannelSettingsItemList( ChannelSettingsItemList(
settingsList = channelList, settingsList = channelList,
modemPresetName = Channel(Channel.default.settings, radioConfig.lora).name,
enabled = connected, enabled = connected,
maxChannels = maxChannels, maxChannels = maxChannels,
focusManager = focusManager, focusManager = focusManager,
onSaveClicked = { channelListInput -> onPositiveClicked = { channelListInput ->
focusManager.clearFocus() focusManager.clearFocus()
viewModel.updateChannels(destNum, channelList, channelListInput) viewModel.updateChannels(destNum, channelList, channelListInput)
channelList.clear() channelList.clear()
channelList.addAll(channelListInput) channelList.addAll(channelListInput)
} },
) )
} }
composable("user") { composable("user") {

Wyświetl plik

@ -86,24 +86,6 @@ fun ChannelCard(
} }
} }
@Composable
fun ChannelSettingsItemList(
settingsList: List<ChannelSettings>,
maxChannels: Int = 8,
enabled: Boolean,
focusManager: FocusManager,
onSaveClicked: (List<ChannelSettings>) -> Unit,
) {
ChannelSettingsItemList(
settingsList = settingsList,
maxChannels = maxChannels,
enabled = enabled,
focusManager = focusManager,
onPositiveClicked = onSaveClicked,
onNegativeClicked = { }
)
}
@Composable @Composable
fun ChannelSettingsItemList( fun ChannelSettingsItemList(
settingsList: List<ChannelSettings>, settingsList: List<ChannelSettings>,
@ -111,7 +93,7 @@ fun ChannelSettingsItemList(
maxChannels: Int = 8, maxChannels: Int = 8,
enabled: Boolean, enabled: Boolean,
focusManager: FocusManager, focusManager: FocusManager,
onNegativeClicked: () -> Unit, onNegativeClicked: () -> Unit = { },
@StringRes positiveText: Int = R.string.send, @StringRes positiveText: Int = R.string.send,
onPositiveClicked: (List<ChannelSettings>) -> Unit, onPositiveClicked: (List<ChannelSettings>) -> Unit,
) { ) {
@ -215,6 +197,6 @@ fun ChannelSettingsPreview() {
), ),
enabled = true, enabled = true,
focusManager = LocalFocusManager.current, focusManager = LocalFocusManager.current,
onSaveClicked = { }, onPositiveClicked = { },
) )
} }