Skip to content

Commit

Permalink
android/ui: show count of Mullvad countries, also fix navigation-rela…
Browse files Browse the repository at this point in the history
…ted crash when adding new account

Updates tailscale/corp#18202

Signed-off-by: Percy Wegmann <percy@tailscale.com>
  • Loading branch information
oxtoacart committed Apr 9, 2024
1 parent d676dca commit 8d949c2
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 21 deletions.
36 changes: 20 additions & 16 deletions android/src/main/java/com/tailscale/ipn/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -75,6 +74,7 @@ import kotlinx.coroutines.launch
class MainActivity : ComponentActivity() {
private lateinit var requestVpnPermission: ActivityResultLauncher<Unit>
private lateinit var navController: NavHostController
private val newIntent: StateFlow<Intent?> = MutableStateFlow(null)

companion object {
private const val TAG = "Main Activity"
Expand Down Expand Up @@ -163,18 +163,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 })) {
Expand All @@ -195,6 +193,14 @@ class MainActivity : ComponentActivity() {
composable("intro") { IntroView(backTo("main")) }
}

val intent = newIntent.collectAsState().value
intent?.let {
if (it.getBooleanExtra(START_AT_ROOT, false)) {
// We just logged in with a new account, navigate back to the main view
navController.popBackStack(route = "main", inclusive = false)
}
}

// Show the intro screen one time
if (!introScreenViewed()) {
navController.navigate("intro")
Expand Down Expand Up @@ -244,9 +250,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)
}
newIntent.set(intent)
}

private fun login(urlString: String) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}

Expand Down Expand Up @@ -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 = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down
2 changes: 1 addition & 1 deletion android/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@
<string name="this_device_is_using_the_system_dns_resolver">This device is using the system DNS resolver.</string>
<string name="not_using_tailscale_dns">Not using Tailscale DNS</string>
<string name="allow_lan_access">Allow LAN access</string>
<string name="exit_nodes_available">exit nodes available</string>
<string name="countries">countries</string>
<string name="cities_available">cities available</string>

<!-- Strings for MDM Settings Manifest (app_restrictions.xml) -->
Expand Down

0 comments on commit 8d949c2

Please sign in to comment.