feat: improve amnezia label names

closes #1089
This commit is contained in:
Zane Schepke
2025-12-15 12:36:50 -05:00
parent f0c885708b
commit 6b24cca551
16 changed files with 172 additions and 54 deletions
@@ -26,6 +26,7 @@ import androidx.compose.ui.text.LinkAnnotation
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.TextLinkStyles
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.withLink
import androidx.compose.ui.unit.dp
@@ -100,7 +101,6 @@ import com.zaneschepke.wireguardautotunnel.viewmodel.SplitTunnelViewModel
import com.zaneschepke.wireguardautotunnel.viewmodel.TunnelViewModel
import dagger.hilt.android.AndroidEntryPoint
import de.raphaelebner.roomdatabasebackup.core.RoomBackup
import java.util.*
import javax.inject.Inject
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@@ -316,7 +316,7 @@ class MainActivity : AppCompatActivity() {
if (uiState.settings.appMode == AppMode.LOCK_DOWN) {
AppAlertBanner(
stringResource(R.string.locked_down)
.uppercase(Locale.getDefault()),
.uppercase(Locale.current.platformLocale),
OffWhite,
AlertRed,
modifier = Modifier.fillMaxWidth().zIndex(2f),
@@ -1,11 +1,10 @@
package com.zaneschepke.wireguardautotunnel.ui.common.label
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import java.util.*
import androidx.compose.ui.text.intl.Locale
@Composable
fun lowercaseLabel(text: String): String {
val locale = remember { Locale.getDefault() }
val locale = Locale.current.platformLocale
return text.lowercase(locale)
}
@@ -12,6 +12,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
@Composable
@@ -50,6 +51,8 @@ fun ConfigurationTextBox(
label,
color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.labelMedium,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
)
},
containerColor = MaterialTheme.colorScheme.surface,
@@ -58,6 +61,8 @@ fun ConfigurationTextBox(
hint,
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.outline,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
)
},
keyboardOptions = keyboardOptions,
@@ -21,6 +21,7 @@ import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.unit.dp
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -45,7 +46,6 @@ import com.zaneschepke.wireguardautotunnel.util.extensions.asTitleString
import com.zaneschepke.wireguardautotunnel.util.extensions.capitalize
import com.zaneschepke.wireguardautotunnel.util.extensions.showToast
import com.zaneschepke.wireguardautotunnel.viewmodel.SettingsViewModel
import java.util.*
@Composable
fun SettingsScreen(viewModel: SettingsViewModel = hiltViewModel()) {
@@ -53,7 +53,7 @@ fun SettingsScreen(viewModel: SettingsViewModel = hiltViewModel()) {
val navController = LocalNavController.current
val sharedViewModel = LocalSharedVm.current
val locale = remember { Locale.getDefault() }
val locale = Locale.current.platformLocale
val sharedUiState by sharedViewModel.container.stateFlow.collectAsStateWithLifecycle()
val uiState by viewModel.container.stateFlow.collectAsStateWithLifecycle()
@@ -14,13 +14,13 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.intl.Locale
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.zaneschepke.wireguardautotunnel.R
import com.zaneschepke.wireguardautotunnel.ui.LocalSharedVm
import com.zaneschepke.wireguardautotunnel.ui.common.button.SurfaceRow
import com.zaneschepke.wireguardautotunnel.util.LocaleUtil
import java.text.Collator
import java.util.*
@Composable
fun LanguageScreen() {
@@ -28,11 +28,11 @@ fun LanguageScreen() {
val sharedViewModel = LocalSharedVm.current
val appState by sharedViewModel.container.stateFlow.collectAsStateWithLifecycle()
val collator = Collator.getInstance(Locale.getDefault())
val collator = Collator.getInstance(Locale.current.platformLocale)
val locales =
LocaleUtil.supportedLocales.map {
val tag = it.replace("_", "-")
Locale.forLanguageTag(tag)
java.util.Locale.forLanguageTag(tag)
}
val sortedLocales =
@@ -13,13 +13,13 @@ import androidx.compose.material.icons.outlined.Dns
import androidx.compose.material3.Icon
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.unit.dp
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -34,7 +34,6 @@ import com.zaneschepke.wireguardautotunnel.ui.common.label.GroupLabel
import com.zaneschepke.wireguardautotunnel.ui.navigation.Route
import com.zaneschepke.wireguardautotunnel.util.extensions.capitalize
import com.zaneschepke.wireguardautotunnel.viewmodel.DnsViewModel
import java.util.*
@Composable
fun DnsSettingsScreen(viewModel: DnsViewModel = hiltViewModel()) {
@@ -43,7 +42,7 @@ fun DnsSettingsScreen(viewModel: DnsViewModel = hiltViewModel()) {
val dnsUiState by viewModel.container.stateFlow.collectAsStateWithLifecycle()
if (dnsUiState.isLoading) return
val locale = remember { Locale.getDefault() }
val locale = Locale.current.platformLocale
Column(
horizontalAlignment = Alignment.Start,
@@ -19,6 +19,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.unit.dp
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -33,7 +34,6 @@ import com.zaneschepke.wireguardautotunnel.ui.common.security.SecureScreenFromRe
import com.zaneschepke.wireguardautotunnel.ui.common.textbox.ConfigurationTextBox
import com.zaneschepke.wireguardautotunnel.ui.sideeffect.LocalSideEffect
import com.zaneschepke.wireguardautotunnel.viewmodel.ProxySettingsViewModel
import java.util.Locale
import org.orbitmvi.orbit.compose.collectSideEffect
@Composable
@@ -44,7 +44,7 @@ fun ProxySettingsScreen(viewModel: ProxySettingsViewModel = hiltViewModel()) {
if (uiState.isLoading) return
val locale = remember { Locale.getDefault() }
val locale = Locale.current.platformLocale
val proxySettings by remember(uiState) { mutableStateOf(uiState.proxySettings) }
@@ -14,6 +14,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.unit.dp
import com.zaneschepke.wireguardautotunnel.R
import com.zaneschepke.wireguardautotunnel.domain.model.TunnelConfig
@@ -22,7 +23,6 @@ import com.zaneschepke.wireguardautotunnel.ui.common.label.lowercaseLabel
import com.zaneschepke.wireguardautotunnel.util.extensions.abbreviateKey
import com.zaneschepke.wireguardautotunnel.util.extensions.localizedDuration
import com.zaneschepke.wireguardautotunnel.util.extensions.millisAgo
import java.util.Locale
import kotlinx.coroutines.delay
@Composable
@@ -35,7 +35,7 @@ fun TunnelStatisticsRow(
val context = LocalContext.current
val textStyle = MaterialTheme.typography.bodySmall
val textColor = MaterialTheme.colorScheme.outline
val locale = remember { Locale.getDefault() }
val locale = Locale.current.platformLocale
// needs to be set as peer stats for duplicates return as a single set of stats
val peers by
@@ -11,6 +11,7 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.zaneschepke.wireguardautotunnel.R
@@ -25,7 +26,6 @@ import com.zaneschepke.wireguardautotunnel.ui.sideeffect.LocalSideEffect
import com.zaneschepke.wireguardautotunnel.ui.state.ConfigProxy
import com.zaneschepke.wireguardautotunnel.ui.state.PeerProxy
import com.zaneschepke.wireguardautotunnel.viewmodel.ConfigViewModel
import java.util.Locale
import org.orbitmvi.orbit.compose.collectSideEffect
@Composable
@@ -36,7 +36,7 @@ fun ConfigScreen(viewModel: ConfigViewModel) {
if (uiState.isLoading) return
val locale = remember { Locale.getDefault() }
val locale = Locale.current.platformLocale
var configProxy by remember {
mutableStateOf(uiState.tunnel?.let { ConfigProxy.from(it.toAmConfig()) } ?: ConfigProxy())
@@ -17,6 +17,7 @@ import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.unit.dp
import com.wireguard.crypto.KeyPair
import com.zaneschepke.wireguardautotunnel.R
@@ -24,7 +25,6 @@ import com.zaneschepke.wireguardautotunnel.ui.LocalIsAndroidTV
import com.zaneschepke.wireguardautotunnel.ui.common.functions.rememberClipboardHelper
import com.zaneschepke.wireguardautotunnel.ui.common.textbox.ConfigurationTextBox
import com.zaneschepke.wireguardautotunnel.ui.state.InterfaceProxy
import java.util.*
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -36,12 +36,12 @@ fun InterfaceFields(
onInterfaceChange: (InterfaceProxy) -> Unit,
showKey: Boolean,
) {
val locale = Locale.current.platformLocale
val keyboardController = LocalSoftwareKeyboardController.current
val isTv = LocalIsAndroidTV.current
val clipboardManager = rememberClipboardHelper()
val keyboardActions = KeyboardActions(onDone = { keyboardController?.hide() })
val keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done)
val locale = Locale.getDefault()
var showPrivateKey by rememberSaveable { mutableStateOf(false) }
LaunchedEffect(showKey) { showPrivateKey = showKey }
@@ -52,7 +52,7 @@ fun InterfaceFields(
value = interfaceState.privateKey,
hint =
stringResource(R.string.hint_template, stringResource(R.string.base64_key))
.lowercase(Locale.getDefault()),
.lowercase(locale),
onValueChange = { onInterfaceChange(interfaceState.copy(privateKey = it)) },
label = stringResource(R.string.private_key),
modifier = Modifier.fillMaxWidth(),
@@ -107,7 +107,7 @@ fun InterfaceFields(
value = interfaceState.publicKey,
hint =
stringResource(R.string.hint_template, stringResource(R.string.base64_key))
.lowercase(Locale.getDefault()),
.lowercase(locale),
onValueChange = { onInterfaceChange(interfaceState.copy(publicKey = it)) },
label = stringResource(R.string.public_key),
enabled = false,
@@ -115,7 +115,7 @@ fun InterfaceFields(
singleLine = true,
trailing =
if (!isTv) {
{ modifier ->
{ _ ->
IconButton(
onClick = { clipboardManager.copy(interfaceState.publicKey) }
) {
@@ -138,9 +138,9 @@ fun InterfaceFields(
hint =
stringResource(
R.string.hint_template,
stringResource(R.string.comma_separated).lowercase(locale),
stringResource(R.string.comma_separated).lowercase(),
)
.lowercase(Locale.getDefault()),
.lowercase(locale),
modifier = Modifier.fillMaxWidth(),
)
if (!isGlobalConfig)
@@ -225,7 +225,13 @@ fun InterfaceFields(
ConfigurationTextBox(
value = interfaceState.junkPacketCount,
onValueChange = { onInterfaceChange(interfaceState.copy(junkPacketCount = it)) },
label = stringResource(R.string.junk_packet_count),
label =
stringResource(R.string.jc) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.junk_packet_count).lowercase(locale),
),
hint = stringResource(R.string.range_hint, 1, 128),
modifier = Modifier.fillMaxWidth(),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
@@ -233,7 +239,13 @@ fun InterfaceFields(
ConfigurationTextBox(
value = interfaceState.junkPacketMinSize,
onValueChange = { onInterfaceChange(interfaceState.copy(junkPacketMinSize = it)) },
label = stringResource(R.string.junk_packet_minimum_size),
label =
stringResource(R.string.jmin) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.junk_packet_minimum_size).lowercase(locale),
),
hint = stringResource(R.string.range_hint, 1, 1279),
modifier = Modifier.fillMaxWidth(),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
@@ -241,7 +253,13 @@ fun InterfaceFields(
ConfigurationTextBox(
value = interfaceState.junkPacketMaxSize,
onValueChange = { onInterfaceChange(interfaceState.copy(junkPacketMaxSize = it)) },
label = stringResource(R.string.junk_packet_maximum_size),
label =
stringResource(R.string.jmax) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.junk_packet_maximum_size).lowercase(locale),
),
hint = stringResource(R.string.range_hint, 2, 1280),
modifier = Modifier.fillMaxWidth(),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
@@ -249,7 +267,13 @@ fun InterfaceFields(
ConfigurationTextBox(
value = interfaceState.initPacketJunkSize,
onValueChange = { onInterfaceChange(interfaceState.copy(initPacketJunkSize = it)) },
label = stringResource(R.string.init_packet_junk_size),
label =
stringResource(R.string.s1) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.init_packet_junk_size).lowercase(locale),
),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
hint = stringResource(R.string.range_hint, 0, 64),
modifier = Modifier.fillMaxWidth(),
@@ -259,7 +283,13 @@ fun InterfaceFields(
onValueChange = {
onInterfaceChange(interfaceState.copy(responsePacketJunkSize = it))
},
label = stringResource(R.string.response_packet_junk_size),
label =
stringResource(R.string.s2) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.response_packet_junk_size).lowercase(locale),
),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
hint = stringResource(R.string.range_hint, 0, 64),
modifier = Modifier.fillMaxWidth(),
@@ -269,7 +299,13 @@ fun InterfaceFields(
onValueChange = {
onInterfaceChange(interfaceState.copy(cookiePacketJunkSize = it))
},
label = stringResource(R.string.cookie_packet_junk_size),
label =
stringResource(R.string.s3) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.cookie_packet_junk_size).lowercase(locale),
),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
hint = stringResource(R.string.range_hint, 0, 928),
modifier = Modifier.fillMaxWidth(),
@@ -279,7 +315,13 @@ fun InterfaceFields(
onValueChange = {
onInterfaceChange(interfaceState.copy(transportPacketJunkSize = it))
},
label = stringResource(R.string.transport_packet_junk_size),
label =
stringResource(R.string.s4) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.transport_packet_junk_size).lowercase(locale),
),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
hint = stringResource(R.string.range_hint, 0, 928),
modifier = Modifier.fillMaxWidth(),
@@ -289,7 +331,13 @@ fun InterfaceFields(
onValueChange = {
onInterfaceChange(interfaceState.copy(initPacketMagicHeader = it))
},
label = stringResource(R.string.init_packet_magic_header),
label =
stringResource(R.string.h1) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.init_packet_magic_header).lowercase(locale),
),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
hint = stringResource(R.string.range_hint, 1, 4),
modifier = Modifier.fillMaxWidth(),
@@ -299,7 +347,13 @@ fun InterfaceFields(
onValueChange = {
onInterfaceChange(interfaceState.copy(responsePacketMagicHeader = it))
},
label = stringResource(R.string.response_packet_magic_header),
label =
stringResource(R.string.h2) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.response_packet_magic_header).lowercase(locale),
),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
hint = stringResource(R.string.range_hint, 1, 4),
modifier = Modifier.fillMaxWidth(),
@@ -309,7 +363,13 @@ fun InterfaceFields(
onValueChange = {
onInterfaceChange(interfaceState.copy(underloadPacketMagicHeader = it))
},
label = stringResource(R.string.underload_packet_magic_header),
label =
stringResource(R.string.h3) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.underload_packet_magic_header).lowercase(locale),
),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
hint = stringResource(R.string.range_hint, 1, 4),
modifier = Modifier.fillMaxWidth(),
@@ -319,7 +379,13 @@ fun InterfaceFields(
onValueChange = {
onInterfaceChange(interfaceState.copy(transportPacketMagicHeader = it))
},
label = stringResource(R.string.transport_packet_magic_header),
label =
stringResource(R.string.h4) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.transport_packet_magic_header).lowercase(locale),
),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
hint = stringResource(R.string.range_hint, 1, 4),
modifier = Modifier.fillMaxWidth(),
@@ -327,35 +393,65 @@ fun InterfaceFields(
ConfigurationTextBox(
value = interfaceState.i1,
onValueChange = { onInterfaceChange(interfaceState.copy(i1 = it)) },
label = "I1",
label =
stringResource(R.string.i1) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.special_junk_packet).lowercase(locale),
),
hint = stringResource(R.string.hint_template, "<b 0x1A2B3C>"),
modifier = Modifier.fillMaxWidth(),
)
ConfigurationTextBox(
value = interfaceState.i2,
onValueChange = { onInterfaceChange(interfaceState.copy(i2 = it)) },
label = "I2",
label =
stringResource(R.string.i2) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.special_junk_packet).lowercase(locale),
),
hint = stringResource(R.string.hint_template, "<b 0x1A2B3C>"),
modifier = Modifier.fillMaxWidth(),
)
ConfigurationTextBox(
value = interfaceState.i3,
onValueChange = { onInterfaceChange(interfaceState.copy(i3 = it)) },
label = "I3",
label =
stringResource(R.string.i3) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.special_junk_packet).lowercase(locale),
),
hint = stringResource(R.string.hint_template, "<b 0x1A2B3C>"),
modifier = Modifier.fillMaxWidth(),
)
ConfigurationTextBox(
value = interfaceState.i4,
onValueChange = { onInterfaceChange(interfaceState.copy(i4 = it)) },
label = "I4",
label =
stringResource(R.string.i4) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.special_junk_packet).lowercase(locale),
),
hint = stringResource(R.string.hint_template, "<b 0x1A2B3C>"),
modifier = Modifier.fillMaxWidth(),
)
ConfigurationTextBox(
value = interfaceState.i5,
onValueChange = { onInterfaceChange(interfaceState.copy(i5 = it)) },
label = "I5",
label =
stringResource(R.string.i5) +
" " +
stringResource(
R.string.hint_template,
stringResource(R.string.special_junk_packet).lowercase(locale),
),
hint = stringResource(R.string.hint_template, "<b 0x1A2B3C>"),
modifier = Modifier.fillMaxWidth(),
)
@@ -13,6 +13,7 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.unit.dp
import com.wireguard.crypto.KeyPair
import com.zaneschepke.wireguardautotunnel.R
@@ -22,7 +23,6 @@ import com.zaneschepke.wireguardautotunnel.ui.common.text.DescriptionText
import com.zaneschepke.wireguardautotunnel.ui.common.textbox.ConfigurationTextBox
import com.zaneschepke.wireguardautotunnel.ui.state.ConfigProxy
import com.zaneschepke.wireguardautotunnel.ui.state.InterfaceProxy
import java.util.*
@Composable
fun InterfaceSection(
@@ -147,7 +147,7 @@ fun InterfaceSection(
R.string.hint_template,
stringResource(R.string.tunnel_name),
)
.lowercase(Locale.getDefault()),
.lowercase(locale = Locale.current.platformLocale),
modifier = Modifier.fillMaxWidth(),
)
InterfaceFields(
@@ -20,16 +20,17 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.unit.dp
import com.zaneschepke.wireguardautotunnel.R
import com.zaneschepke.wireguardautotunnel.ui.LocalIsAndroidTV
import com.zaneschepke.wireguardautotunnel.ui.common.textbox.ConfigurationTextBox
import com.zaneschepke.wireguardautotunnel.ui.state.PeerProxy
import java.util.*
@Composable
fun PeerFields(peer: PeerProxy, onPeerChange: (PeerProxy) -> Unit, showKey: Boolean) {
val isTv = LocalIsAndroidTV.current
val locale = Locale.current.platformLocale
val keyboardController = LocalSoftwareKeyboardController.current
val keyboardActions = KeyboardActions(onDone = { keyboardController?.hide() })
val keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done)
@@ -47,7 +48,7 @@ fun PeerFields(peer: PeerProxy, onPeerChange: (PeerProxy) -> Unit, showKey: Bool
label = stringResource(R.string.public_key),
hint =
stringResource(R.string.hint_template, stringResource(R.string.base64_key))
.lowercase(Locale.getDefault()),
.lowercase(locale),
modifier = Modifier.fillMaxWidth(),
)
ConfigurationTextBox(
@@ -81,7 +82,7 @@ fun PeerFields(peer: PeerProxy, onPeerChange: (PeerProxy) -> Unit, showKey: Bool
hint = stringResource(R.string.optional),
trailing = {
Text(
stringResource(R.string.seconds).lowercase(Locale.getDefault()),
stringResource(R.string.seconds).lowercase(locale),
style = MaterialTheme.typography.bodyMedium,
modifier = Modifier.padding(end = 10.dp),
)
@@ -96,7 +97,7 @@ fun PeerFields(peer: PeerProxy, onPeerChange: (PeerProxy) -> Unit, showKey: Bool
label = stringResource(R.string.endpoint),
hint =
stringResource(R.string.hint_template, stringResource(R.string.server_port))
.lowercase(Locale.getDefault()),
.lowercase(locale),
modifier = Modifier.fillMaxWidth(),
)
ConfigurationTextBox(
@@ -105,7 +106,7 @@ fun PeerFields(peer: PeerProxy, onPeerChange: (PeerProxy) -> Unit, showKey: Bool
label = stringResource(R.string.allowed_ips),
hint =
stringResource(R.string.hint_template, stringResource(R.string.comma_separated))
.lowercase(Locale.getDefault()),
.lowercase(locale),
modifier = Modifier.fillMaxWidth(),
keyboardOptions = keyboardOptions,
keyboardActions = keyboardActions,
@@ -16,12 +16,12 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.unit.dp
import com.zaneschepke.wireguardautotunnel.R
import com.zaneschepke.wireguardautotunnel.domain.model.InstalledPackage
import com.zaneschepke.wireguardautotunnel.ui.common.textbox.CustomTextField
import com.zaneschepke.wireguardautotunnel.ui.screens.tunnels.splittunnel.state.SplitOption
import java.util.*
@Composable
fun AppListSection(
@@ -31,7 +31,7 @@ fun AppListSection(
) {
var query by remember { mutableStateOf("") }
val locale = remember { Locale.getDefault() }
val locale = Locale.current.platformLocale
val filteredAndSortedPackages by remember {
derivedStateOf {
@@ -13,14 +13,15 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.unit.dp
import com.zaneschepke.wireguardautotunnel.R
import com.zaneschepke.wireguardautotunnel.ui.screens.tunnels.splittunnel.state.SplitOption
import java.util.*
@Composable
fun SplitOptionSelector(selectedOption: SplitOption, onOptionChange: (SplitOption) -> Unit) {
val context = LocalContext.current
val locale = Locale.current.platformLocale
val inputHeight = 45.dp
MultiChoiceSegmentedButtonRow(
@@ -69,7 +70,7 @@ fun SplitOptionSelector(selectedOption: SplitOption, onOptionChange: (SplitOptio
) {
Text(
entry.text().asString(context).replaceFirstChar {
if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString()
if (it.isLowerCase()) it.titlecase(locale) else it.toString()
},
color = MaterialTheme.colorScheme.onBackground,
style = MaterialTheme.typography.labelMedium,
@@ -309,7 +309,7 @@ fun PackageManager.getFriendlyAppName(packageName: String, appInfo: ApplicationI
val label =
try {
getApplicationLabel(appInfo).toString()
} catch (e: PackageManager.NameNotFoundException) {
} catch (_: PackageManager.NameNotFoundException) {
packageName
}
+17
View File
@@ -438,4 +438,21 @@
<string name="donation_prompt_suffix">to keep it free and improving.</string>
<string name="cookie_packet_junk_size">Cookie packet junk size</string>
<string name="transport_packet_junk_size">Transport packet junk size</string>
<string name="special_junk_packet">Special junk packet</string>
<string name="jc" translatable="false">Jc</string>
<string name="jmin" translatable="false">Jmin</string>
<string name="jmax" translatable="false">Jmax</string>
<string name="s1" translatable="false">S1</string>
<string name="s2" translatable="false">S2</string>
<string name="s3" translatable="false">S3</string>
<string name="s4" translatable="false">S4</string>
<string name="h1" translatable="false">H1</string>
<string name="h2" translatable="false">H2</string>
<string name="h3" translatable="false">H3</string>
<string name="h4" translatable="false">H4</string>
<string name="i1" translatable="false">I1</string>
<string name="i2" translatable="false">I2</string>
<string name="i3" translatable="false">I3</string>
<string name="i4" translatable="false">I4</string>
<string name="i5" translatable="false">I5</string>
</resources>