@ -3,10 +3,13 @@
package com.tailscale.ipn.ui.view
package com.tailscale.ipn.ui.view
import androidx.compose.foundation.focusable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.text.ClickableText
import androidx.compose.foundation.text.ClickableText
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Icon
import androidx.compose.material3.Icon
import androidx.compose.material3.ListItem
import androidx.compose.material3.ListItem
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.MaterialTheme
@ -42,53 +45,47 @@ fun TailnetLockSetupView(
backToSettings : BackNavigation ,
backToSettings : BackNavigation ,
model : TailnetLockSetupViewModel = viewModel ( factory = TailnetLockSetupViewModelFactory ( ) )
model : TailnetLockSetupViewModel = viewModel ( factory = TailnetLockSetupViewModelFactory ( ) )
) {
) {
val statusItems by model . statusItems . collectAsState ( )
val statusItems by model . statusItems . collectAsState ( )
val nodeKey by model . nodeKey . collectAsState ( )
val nodeKey by model . nodeKey . collectAsState ( )
val tailnetLockKey by model . tailnetLockKey . collectAsState ( )
val tailnetLockKey by model . tailnetLockKey . collectAsState ( )
val tailnetLockTlPubKey = tailnetLockKey . replace ( " nlpub " , " tlpub " )
val tailnetLockTlPubKey = tailnetLockKey . replace ( " nlpub " , " tlpub " )
Scaffold ( topBar = { Header ( R . string . tailnet _lock , onBack = backToSettings ) } ) { innerPadding ->
Scaffold ( topBar = { Header ( R . string . tailnet _lock , onBack = backToSettings ) } ) { innerPadding ->
LoadingIndicator . Wrap {
LoadingIndicator . Wrap {
Column (
Column (
modifier = Modifier
modifier =
. padding ( innerPadding )
Modifier . padding ( innerPadding )
. focusable ( )
. focusable ( )
. verticalScroll ( rememberScrollState ( ) )
. verticalScroll ( rememberScrollState ( ) )
. fillMaxSize ( )
. fillMaxSize ( ) ) {
) {
ExplainerView ( )
ExplainerView ( )
statusItems . forEach { statusItem ->
statusItems . forEach { statusItem ->
Lists . ItemDivider ( )
Lists . ItemDivider ( )
ListItem (
ListItem (
leadingContent = {
leadingContent = {
Icon (
Icon (
painter = painterResource ( id = statusItem . icon ) ,
painter = painterResource ( id = statusItem . icon ) ,
contentDescription = null ,
contentDescription = null ,
tint = MaterialTheme . colorScheme . onSurfaceVariant
tint = MaterialTheme . colorScheme . onSurfaceVariant )
)
} ,
} ,
headlineContent = { Text ( stringResource ( statusItem . title ) ) } )
headlineContent = { Text ( stringResource ( statusItem . title ) ) }
)
}
//Node key
Lists . SectionDivider ( )
ClipboardValueView (
value = nodeKey ,
title = stringResource ( R . string . node _key ) ,
subtitle = stringResource ( R . string . node _key _explainer )
)
// Tailnet lock key
Lists . SectionDivider ( )
ClipboardValueView (
value = tailnetLockTlPubKey ,
title = stringResource ( R . string . tailnet _lock _key ) ,
subtitle = stringResource ( R . string . tailnet _lock _key _explainer )
)
}
}
}
// Node key
Lists . SectionDivider ( )
ClipboardValueView (
value = nodeKey ,
title = stringResource ( R . string . node _key ) ,
subtitle = stringResource ( R . string . node _key _explainer ) )
// Tailnet lock key
Lists . SectionDivider ( )
ClipboardValueView (
value = tailnetLockTlPubKey ,
title = stringResource ( R . string . tailnet _lock _key ) ,
subtitle = stringResource ( R . string . tailnet _lock _key _explainer ) )
}
}
}
}
}