From c59c8537cf407e66292d1183f6a3771a205141cc Mon Sep 17 00:00:00 2001 From: Percy Wegmann Date: Tue, 9 Apr 2024 13:58:58 -0500 Subject: [PATCH] android/ui: show count of Mullvad countries, also fix navigation-related crash when adding new account Updates tailscale/corp#18202 Signed-off-by: Percy Wegmann --- .../java/com/tailscale/ipn/MainActivity.kt | 29 +++++++++---------- .../tailscale/ipn/ui/view/ExitNodePicker.kt | 5 ++-- .../ipn/ui/view/MullvadExitNodePicker.kt | 2 +- .../ipn/ui/view/MullvadExitNodePickerList.kt | 2 +- android/src/main/res/values/strings.xml | 2 +- 5 files changed, 19 insertions(+), 21 deletions(-) diff --git a/android/src/main/java/com/tailscale/ipn/MainActivity.kt b/android/src/main/java/com/tailscale/ipn/MainActivity.kt index f5900bc..0b8d22e 100644 --- a/android/src/main/java/com/tailscale/ipn/MainActivity.kt +++ b/android/src/main/java/com/tailscale/ipn/MainActivity.kt @@ -37,7 +37,6 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument -import androidx.navigation.navigation import com.tailscale.ipn.Peer.RequestCodes import com.tailscale.ipn.mdm.MDMSettings import com.tailscale.ipn.ui.model.Ipn @@ -74,7 +73,7 @@ import kotlinx.coroutines.launch class MainActivity : ComponentActivity() { private lateinit var requestVpnPermission: ActivityResultLauncher - private var navController: NavHostController? = null + private lateinit var navController: NavHostController companion object { private const val TAG = "Main Activity" @@ -105,7 +104,7 @@ class MainActivity : ComponentActivity() { setContent { AppTheme { - val navController = rememberNavController() + navController = rememberNavController() Surface(color = MaterialTheme.colorScheme.inverseSurface) { // Background for the letterbox Surface(modifier = Modifier.universalFit()) { // Letterbox for AndroidTV NavHost( @@ -162,18 +161,16 @@ class MainActivity : ComponentActivity() { composable("main") { MainView(navigation = mainViewNav) } composable("settings") { SettingsView(settingsNav) } - navigation(startDestination = "list", route = "exitNodes") { - composable("list") { ExitNodePicker(exitNodePickerNav) } - composable("mullvad") { MullvadExitNodePickerList(exitNodePickerNav) } - composable( - "mullvad/{countryCode}", - arguments = - listOf(navArgument("countryCode") { type = NavType.StringType })) { - MullvadExitNodePicker( - it.arguments!!.getString("countryCode")!!, exitNodePickerNav) - } - composable("runExitNode") { RunExitNodeView(exitNodePickerNav) } - } + composable("exitNodes") { ExitNodePicker(exitNodePickerNav) } + composable("mullvad") { MullvadExitNodePickerList(exitNodePickerNav) } + composable( + "mullvad/{countryCode}", + arguments = + listOf(navArgument("countryCode") { type = NavType.StringType })) { + MullvadExitNodePicker( + it.arguments!!.getString("countryCode")!!, exitNodePickerNav) + } + composable("runExitNode") { RunExitNodeView(exitNodePickerNav) } composable( "peerDetails/{nodeId}", arguments = listOf(navArgument("nodeId") { type = NavType.StringType })) { @@ -244,7 +241,7 @@ class MainActivity : ComponentActivity() { override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) if (intent?.getBooleanExtra(START_AT_ROOT, false) == true) { - navController?.popBackStack(route = "main", inclusive = false) + navController.popBackStack(route = "main", inclusive = false) } } 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 034f5e9..4f77693 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 @@ -66,7 +66,8 @@ fun ExitNodePicker( if (mullvadExitNodeCount > 0) { item(key = "mullvad") { Lists.SectionDivider() - MullvadItem(nav, mullvadExitNodeCount, mullvadExitNodesByCountryCode.selected) + MullvadItem( + nav, mullvadExitNodesByCountryCode.size, mullvadExitNodesByCountryCode.selected) } } @@ -128,7 +129,7 @@ fun MullvadItem(nav: ExitNodePickerNav, count: Int, selected: Boolean) { }, supportingContent = { Text( - "$count ${stringResource(R.string.exit_nodes_available)}", + "$count ${stringResource(R.string.countries)}", style = MaterialTheme.typography.bodyMedium) }, trailingContent = { diff --git a/android/src/main/java/com/tailscale/ipn/ui/view/MullvadExitNodePicker.kt b/android/src/main/java/com/tailscale/ipn/ui/view/MullvadExitNodePicker.kt index 75458ab..50ec848 100644 --- a/android/src/main/java/com/tailscale/ipn/ui/view/MullvadExitNodePicker.kt +++ b/android/src/main/java/com/tailscale/ipn/ui/view/MullvadExitNodePicker.kt @@ -40,7 +40,7 @@ fun MullvadExitNodePicker( topBar = { Header( title = { Text("${countryCode.flag()} ${any.country}") }, - onBack = nav.onNavigateBackToExitNodes) + onBack = nav.onNavigateBackToMullvad) }) { innerPadding -> LazyColumn(modifier = Modifier.padding(innerPadding)) { if (nodes.size > 1) { diff --git a/android/src/main/java/com/tailscale/ipn/ui/view/MullvadExitNodePickerList.kt b/android/src/main/java/com/tailscale/ipn/ui/view/MullvadExitNodePickerList.kt index 6bc8404..ad9abfe 100644 --- a/android/src/main/java/com/tailscale/ipn/ui/view/MullvadExitNodePickerList.kt +++ b/android/src/main/java/com/tailscale/ipn/ui/view/MullvadExitNodePickerList.kt @@ -38,7 +38,7 @@ fun MullvadExitNodePickerList( LoadingIndicator.Wrap { Scaffold( topBar = { - Header(R.string.choose_mullvad_exit_node, onBack = nav.onNavigateBackToMullvad) + Header(R.string.choose_mullvad_exit_node, onBack = nav.onNavigateBackToExitNodes) }) { innerPadding -> val mullvadExitNodes = model.mullvadExitNodesByCountryCode.collectAsState() diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml index a78dcc7..b1c3147 100644 --- a/android/src/main/res/values/strings.xml +++ b/android/src/main/res/values/strings.xml @@ -159,7 +159,7 @@ This device is using the system DNS resolver. Not using Tailscale DNS Allow LAN access - exit nodes available + countries cities available