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 4ed98c6..e374da4 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 @@ -3,6 +3,7 @@ package com.tailscale.ipn.ui.view +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row @@ -31,7 +32,7 @@ import com.tailscale.ipn.ui.viewModel.ExitNodePickerViewModel import com.tailscale.ipn.ui.viewModel.ExitNodePickerViewModelFactory import com.tailscale.ipn.ui.viewModel.selected -@OptIn(ExperimentalMaterial3Api::class) +@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) @Composable fun ExitNodePicker( nav: ExitNodePickerNav, @@ -46,7 +47,11 @@ fun ExitNodePicker( val anyActive = model.anyActive.collectAsState() LazyColumn(modifier = Modifier.padding(innerPadding)) { - item("allowLANAccessToggle") { SettingRow(model.allowLANAccessSetting) } + stickyHeader { + RunAsExitNodeItem(nav = nav, viewModel = model) + Lists.ItemDivider() + SettingRow(model.allowLANAccessSetting) + } item(key = "none") { Lists.SectionDivider() @@ -60,7 +65,7 @@ fun ExitNodePicker( )) } - item { Lists.SectionDivider() } + item { Lists.ItemDivider() } itemsWithDividers(tailnetExitNodes, key = { it.id!! }) { node -> ExitNodeItem(model, node) } @@ -71,11 +76,6 @@ fun ExitNodePicker( MullvadItem(nav, mullvadExitNodeCount, mullvadExitNodesByCountryCode.selected) } } - - item(key = "runExitNode") { - Lists.SectionDivider() - RunAsExitNodeItem(nav = nav, viewModel = model) - } } } } @@ -124,7 +124,7 @@ fun MullvadItem(nav: ExitNodePickerNav, count: Int, selected: Boolean) { }, supportingContent = { Text( - "$count ${stringResource(R.string.nodes_available)}", + "$count ${stringResource(R.string.exit_nodes_available)}", style = MaterialTheme.typography.bodyMedium) }, trailingContent = { @@ -145,7 +145,7 @@ fun RunAsExitNodeItem(nav: ExitNodePickerNav, viewModel: ExitNodePickerViewModel headlineContent = { Text( stringResource(id = R.string.run_as_exit_node), - style = MaterialTheme.typography.titleMedium) + style = MaterialTheme.typography.bodyMedium) }, trailingContent = { if (isRunningExitNode) { diff --git a/android/src/main/java/com/tailscale/ipn/ui/view/SettingsView.kt b/android/src/main/java/com/tailscale/ipn/ui/view/SettingsView.kt index 1415ac6..a97f05c 100644 --- a/android/src/main/java/com/tailscale/ipn/ui/view/SettingsView.kt +++ b/android/src/main/java/com/tailscale/ipn/ui/view/SettingsView.kt @@ -122,7 +122,12 @@ private fun SwitchRow(setting: Setting) { val swVal = setting.isOn?.collectAsState()?.value ?: false ListItem( modifier = Modifier.clickable { if (enabled) setting.onClick() }, - headlineContent = { Text(setting.title ?: stringResource(setting.titleRes)) }, + headlineContent = { + Text( + setting.title ?: stringResource(setting.titleRes), + style = MaterialTheme.typography.bodyMedium, + ) + }, trailingContent = { TintedSwitch(checked = swVal, onCheckedChange = setting.onToggle, enabled = enabled) }) diff --git a/android/src/main/java/com/tailscale/ipn/ui/viewModel/ExitNodePickerViewModel.kt b/android/src/main/java/com/tailscale/ipn/ui/viewModel/ExitNodePickerViewModel.kt index f38e890..91c0ced 100644 --- a/android/src/main/java/com/tailscale/ipn/ui/viewModel/ExitNodePickerViewModel.kt +++ b/android/src/main/java/com/tailscale/ipn/ui/viewModel/ExitNodePickerViewModel.kt @@ -83,7 +83,7 @@ class ExitNodePickerViewModel(private val nav: ExitNodePickerNav) : IpnViewModel .map { ExitNode( id = it.StableID, - label = it.Name, + label = it.ComputedName, online = it.Online ?: false, selected = it.StableID == exitNodeId, mullvad = it.Name.endsWith(".mullvad.ts.net."), @@ -131,7 +131,7 @@ class ExitNodePickerViewModel(private val nav: ExitNodePickerNav) : IpnViewModel .sortedBy { it.city.lowercase() } } mullvadExitNodesByCountryCode.set(mullvadExitNodes) - mullvadExitNodeCount.set(mullvadExitNodes.size) + mullvadExitNodeCount.set(allMullvadExitNodes.size) val bestAvailableByCountry = mullvadExitNodes.mapValues { (_, nodes) -> diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml index e8228ae..3a1ecf7 100644 --- a/android/src/main/res/values/strings.xml +++ b/android/src/main/res/values/strings.xml @@ -137,7 +137,7 @@ This device is using the system DNS resolver. Not Using Tailscale DNS Allow LAN Access - nodes available + exit nodes available cities available