refactor: move ignoreIncoming logic to ViewModel

This commit is contained in:
andrekir 2024-11-12 08:46:47 -03:00
parent 417523967e
commit a980441fd1
2 changed files with 22 additions and 47 deletions

View file

@ -505,14 +505,21 @@ class UIViewModel @Inject constructor(
updateLoraConfig { it.copy { region = value } }
}
var ignoreIncomingList: MutableList<Int>
get() = config.lora.ignoreIncomingList
set(value) = updateLoraConfig {
it.copy {
ignoreIncoming.clear()
ignoreIncoming.addAll(value)
fun ignoreNode(nodeNum: Int) = updateLoraConfig {
it.copy {
val list = ignoreIncoming.toMutableList().apply {
if (contains(nodeNum)) {
debug("removing node $nodeNum from ignore list")
remove(nodeNum)
} else {
debug("adding node $nodeNum to ignore list")
add(nodeNum)
}
}
ignoreIncoming.clear()
ignoreIncoming.addAll(list)
}
}
// managed mode disables all access to configuration
val isManaged: Boolean get() = config.device.isManaged || config.security.isManaged

View file

@ -22,7 +22,6 @@ import androidx.compose.ui.unit.dp
import androidx.fragment.app.activityViewModels
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import ar.com.hjg.pngj.PngHelperInternal.debug
import com.geeksville.mesh.DataPacket
import com.geeksville.mesh.android.Logging
import com.geeksville.mesh.database.entity.NodeEntity
@ -73,7 +72,7 @@ class UsersFragment : ScreenFragment("Users"), Logging {
@OptIn(ExperimentalFoundationApi::class)
@Composable
@Suppress("LongMethod", "CyclomaticComplexMethod")
@Suppress("LongMethod")
fun NodesScreen(
model: UIViewModel = hiltViewModel(),
navigateToMessages: (NodeEntity) -> Unit,
@ -97,6 +96,7 @@ fun NodesScreen(
}
val currentTimeMillis = rememberTimeTickWithLifecycle()
val connectionState by model.connectionState.observeAsState()
LazyColumn(
state = listState,
@ -119,8 +119,6 @@ fun NodesScreen(
}
items(nodes, key = { it.num }) { node ->
val isIgnored = state.ignoreIncomingList.contains(node.num)
val connectionState by model.connectionState.observeAsState()
NodeItem(
thisNode = ourNode,
thatNode = node,
@ -130,43 +128,13 @@ fun NodesScreen(
ignoreIncomingList = state.ignoreIncomingList,
menuItemActionClicked = { menuItem ->
when (menuItem) {
MenuItemAction.Remove -> {
model.removeNode(node.num)
debug("removing node ${node.num}")
}
MenuItemAction.Ignore -> {
model.ignoreIncomingList =
state.ignoreIncomingList.toMutableList().apply {
if (isIgnored) {
remove(node.num)
debug("removing node ${node.num} from ignore list")
} else {
add(node.num)
debug("adding node ${node.num} to ignore list")
}
}
}
MenuItemAction.DirectMessage -> {
navigateToMessages(node)
}
MenuItemAction.RequestUserInfo -> {
model.requestUserInfo(node.num)
}
MenuItemAction.RequestPosition -> {
model.requestPosition(node.num)
}
MenuItemAction.TraceRoute -> {
model.requestTraceroute(node.num)
}
MenuItemAction.MoreDetails -> {
navigateToNodeDetails(node.num)
}
MenuItemAction.Remove -> model.removeNode(node.num)
MenuItemAction.Ignore -> model.ignoreNode(node.num)
MenuItemAction.DirectMessage -> navigateToMessages(node)
MenuItemAction.RequestUserInfo -> model.requestUserInfo(node.num)
MenuItemAction.RequestPosition -> model.requestPosition(node.num)
MenuItemAction.TraceRoute -> model.requestTraceroute(node.num)
MenuItemAction.MoreDetails -> navigateToNodeDetails(node.num)
}
},
blinking = node == focusedNode,