diff --git a/android/src/main/java/com/tailscale/ipn/ui/view/ExitNodePicker.kt b/android/src/main/java/com/tailscale/ipn/ui/view/ExitNodePicker.kt index b150580..c8ef29a 100644 --- a/android/src/main/java/com/tailscale/ipn/ui/view/ExitNodePicker.kt +++ b/android/src/main/java/com/tailscale/ipn/ui/view/ExitNodePicker.kt @@ -18,6 +18,9 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.lifecycle.viewmodel.compose.viewModel @@ -40,7 +43,7 @@ fun ExitNodePicker( nav: ExitNodePickerNav, model: ExitNodePickerViewModel = viewModel(factory = ExitNodePickerViewModelFactory(nav)) ) { - LoadingIndicator.Wrap { + LoadingIndicator.Wrap { Scaffold(topBar = { Header(R.string.choose_exit_node, onBack = nav.onNavigateBackHome) }) { innerPadding -> val tailnetExitNodes by model.tailnetExitNodes.collectAsState() @@ -99,21 +102,23 @@ fun ExitNodeItem( viewModel: ExitNodePickerViewModel, node: ExitNodePickerViewModel.ExitNode, ) { + val online by rememberUpdatedState(newValue = node.online) + Box { var modifier: Modifier = Modifier - if (node.online) { + if (online) { modifier = modifier.clickable { viewModel.setExitNode(node) } } ListItem( modifier = modifier, colors = - if (node.online) MaterialTheme.colorScheme.listItem + if (online) MaterialTheme.colorScheme.listItem else MaterialTheme.colorScheme.disabledListItem, headlineContent = { Text(node.city.ifEmpty { node.label }, style = MaterialTheme.typography.bodyMedium) }, supportingContent = { - if (!node.online) + if (!online) Text(stringResource(R.string.offline), style = MaterialTheme.typography.bodyMedium) }, trailingContent = {