More tweaks

Signed-off-by: Percy Wegmann <percy@tailscale.com>
ox/styling_bak
Percy Wegmann 2 years ago
parent 8a574ad322
commit 426e2ca749
No known key found for this signature in database
GPG Key ID: 29D8CDEB4C13D48B

@ -79,11 +79,14 @@ class Tailcfg {
var LastSeen: Time? = null, var LastSeen: Time? = null,
var Online: Boolean? = null, var Online: Boolean? = null,
var Capabilities: List<String>? = null, var Capabilities: List<String>? = null,
var CapMap: Map<String, List<String>?>? = null,
var ComputedName: String, var ComputedName: String,
var ComputedNameWithHost: String var ComputedNameWithHost: String
) { ) {
val isAdmin: Boolean val isAdmin: Boolean
get() = (Capabilities ?: emptyList()).contains("https://tailscale.com/cap/is-admin") get() =
Capabilities?.contains("https://tailscale.com/cap/is-admin") == true ||
CapMap?.contains("https://tailscale.com/cap/is-admin") == true
// isExitNode reproduces the Go logic in local.go peerStatusFromNode // isExitNode reproduces the Go logic in local.go peerStatusFromNode
val isExitNode: Boolean = val isExitNode: Boolean =
@ -110,7 +113,7 @@ class Tailcfg {
val displayAddresses: List<DisplayAddress> val displayAddresses: List<DisplayAddress>
get() { get() {
var addresses = mutableListOf<DisplayAddress>() var addresses = mutableListOf<DisplayAddress>()
addresses.add(DisplayAddress(NameWithoutTrailingDot)) addresses.add(DisplayAddress(nameWithoutTrailingDot))
Addresses?.let { addresses.addAll(it.map { addr -> DisplayAddress(addr) }) } Addresses?.let { addresses.addAll(it.map { addr -> DisplayAddress(addr) }) }
return addresses return addresses
} }

@ -17,6 +17,7 @@ import kotlinx.coroutines.launch
import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream import kotlinx.serialization.json.decodeFromStream
import java.nio.charset.Charset
// Notifier is a wrapper around the IPN Bus notifier. It provides a way to watch // Notifier is a wrapper around the IPN Bus notifier. It provides a way to watch
// for changes in various parts of the Tailscale engine. You will typically only use // for changes in various parts of the Tailscale engine. You will typically only use
@ -67,6 +68,7 @@ object Notifier {
NotifyWatchOpt.InitialState.value NotifyWatchOpt.InitialState.value
manager = manager =
app.watchNotifications(mask.toLong()) { notification -> app.watchNotifications(mask.toLong()) { notification ->
Log.d("ZZZZ", notification.toString(Charset.defaultCharset()))
val notify = decoder.decodeFromStream<Notify>(notification.inputStream()) val notify = decoder.decodeFromStream<Notify>(notification.inputStream())
notify.State?.let { state.set(Ipn.State.fromInt(it)) } notify.State?.let { state.set(Ipn.State.fromInt(it)) }
notify.NetMap?.let(netmap::set) notify.NetMap?.let(netmap::set)

@ -6,8 +6,6 @@ package com.tailscale.ipn.ui.view
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.ClickableText import androidx.compose.foundation.text.ClickableText
import androidx.compose.material3.ListItem import androidx.compose.material3.ListItem
@ -22,8 +20,8 @@ import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.withStyle import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import com.tailscale.ipn.BuildConfig import com.tailscale.ipn.BuildConfig
import com.tailscale.ipn.R import com.tailscale.ipn.R
@ -56,10 +54,10 @@ fun SettingsView(
onClick = viewModel.navigation.onNavigateToUserSwitcher) onClick = viewModel.navigation.onNavigateToUserSwitcher)
if (isAdmin) { if (isAdmin) {
Spacer(modifier = Modifier.height(4.dp))
AdminTextView { handler.openUri(Links.ADMIN_URL) } AdminTextView { handler.openUri(Links.ADMIN_URL) }
} }
Lists.SectionDivider()
SettingRow(viewModel.dns) SettingRow(viewModel.dns)
Lists.ItemDivider() Lists.ItemDivider()
@ -68,21 +66,22 @@ fun SettingsView(
Lists.ItemDivider() Lists.ItemDivider()
SettingRow(viewModel.permissions) SettingRow(viewModel.permissions)
Lists.ItemDivider() managedBy?.let {
SettingRow(viewModel.about) Lists.ItemDivider()
SettingRow(it)
}
Lists.ItemDivider() Lists.SectionDivider()
SettingRow(viewModel.bugReport) SettingRow(viewModel.bugReport)
Lists.ItemDivider()
SettingRow(viewModel.about)
// TODO: put a heading for the debug section
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
Lists.ItemDivider() Lists.SectionDivider()
SettingRow(viewModel.mdmDebug) SettingRow(viewModel.mdmDebug)
} }
managedBy?.let {
Lists.ItemDivider()
SettingRow(it)
}
} }
} }
} }
@ -148,21 +147,26 @@ private fun NavRow(setting: Setting) {
@Composable @Composable
fun AdminTextView(onNavigateToAdminConsole: () -> Unit) { fun AdminTextView(onNavigateToAdminConsole: () -> Unit) {
val adminStr = buildAnnotatedString { val adminStr = buildAnnotatedString {
withStyle(style = SpanStyle(color = MaterialTheme.colorScheme.primary)) { withStyle(style = SpanStyle(color = MaterialTheme.colorScheme.onSurfaceVariant)) {
append(stringResource(id = R.string.settings_admin_prefix)) append(stringResource(id = R.string.settings_admin_prefix))
} }
pushStringAnnotation(tag = "link", annotation = Links.ADMIN_URL) pushStringAnnotation(tag = "link", annotation = Links.ADMIN_URL)
withStyle(style = SpanStyle(color = Color.Blue)) { withStyle(
append(stringResource(id = R.string.settings_admin_link)) style =
} SpanStyle(
color = MaterialTheme.colorScheme.onPrimaryContainer,
textDecoration = TextDecoration.Underline)) {
append(stringResource(id = R.string.settings_admin_link))
}
pop() pop()
} }
Column(modifier = Modifier.padding(horizontal = 12.dp)) { ListItem(
ClickableText( headlineContent = {
text = adminStr, ClickableText(
style = MaterialTheme.typography.bodySmall, text = adminStr,
onClick = { onNavigateToAdminConsole() }) style = MaterialTheme.typography.bodyMedium,
} onClick = { onNavigateToAdminConsole() })
})
} }

@ -88,7 +88,7 @@ class SettingsViewModel(val navigation: SettingsNav) : IpnViewModel() {
val about = val about =
Setting( Setting(
titleRes = R.string.about, titleRes = R.string.about_tailscale,
type = SettingType.NAV, type = SettingType.NAV,
onClick = { navigation.onNavigateToAbout() }, onClick = { navigation.onNavigateToAbout() },
enabled = MutableStateFlow(true)) enabled = MutableStateFlow(true))

@ -38,9 +38,9 @@
<!-- Strings for the settings screen --> <!-- Strings for the settings screen -->
<string name="settings_title">Settings</string> <string name="settings_title">Settings</string>
<string name="settings_admin_prefix">You can manage your account from the admin console.&#160;</string> <string name="settings_admin_prefix">You can manage your account from the admin console.&#160;</string>
<string name="settings_admin_link">View admin console</string> <string name="settings_admin_link">View admin console</string>
<string name="about">About</string> <string name="about_tailscale">About Tailscale</string>
<string name="bug_report">Bug Report</string> <string name="bug_report">Bug report</string>
<string name="use_ts_dns">Use Tailscale DNS</string> <string name="use_ts_dns">Use Tailscale DNS</string>
<!-- Strings for the main screen --> <!-- Strings for the main screen -->

Loading…
Cancel
Save