diff options
| author | David Göransson <david.goransson@mullvad.net> | 2025-11-04 10:14:40 +0100 |
|---|---|---|
| committer | David Göransson <david.goransson@mullvad.net> | 2025-11-04 10:14:40 +0100 |
| commit | d7b8059e7ffee1826b8a4d7647b892442cbc8b2c (patch) | |
| tree | d59130e5403cab95a9060498c47261743e49554b /android | |
| parent | 0fa8b56af36f292b01e8c161d8453987d878b9c2 (diff) | |
| parent | 58770773cc8874f566b1be34c9d3b4ee52be4352 (diff) | |
| download | mullvadvpn-d7b8059e7ffee1826b8a4d7647b892442cbc8b2c.tar.xz mullvadvpn-d7b8059e7ffee1826b8a4d7647b892442cbc8b2c.zip | |
Merge branch 'show-feature-indicators-also-when-connecting-droid-2243'
Diffstat (limited to 'android')
27 files changed, 110 insertions, 105 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/ObfuscationModeCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/ObfuscationModeCell.kt index 8a5f94d730..8217da8dbe 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/ObfuscationModeCell.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/ObfuscationModeCell.kt @@ -120,7 +120,7 @@ private fun ObfuscationMode.toTitle() = when (this) { ObfuscationMode.Auto -> stringResource(id = R.string.automatic) ObfuscationMode.Off -> stringResource(id = R.string.off) - ObfuscationMode.Udp2Tcp -> stringResource(id = R.string.upd_over_tcp) + ObfuscationMode.Udp2Tcp -> stringResource(id = R.string.udp_over_tcp) ObfuscationMode.Shadowsocks -> stringResource(id = R.string.shadowsocks) ObfuscationMode.Quic -> stringResource(id = R.string.quic) ObfuscationMode.Lwo -> stringResource(id = R.string.lwo) diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/connectioninfo/ConnectionDetailPanel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/connectioninfo/ConnectionDetailPanel.kt index 92b782895b..cef0ab2cf9 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/connectioninfo/ConnectionDetailPanel.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/connectioninfo/ConnectionDetailPanel.kt @@ -2,6 +2,7 @@ package net.mullvad.mullvadvpn.compose.component.connectioninfo import androidx.compose.animation.AnimatedContent import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.text.selection.SelectionContainer @@ -25,23 +26,25 @@ import net.mullvad.mullvadvpn.lib.ui.tag.LOCATION_INFO_CONNECTION_OUT_TEST_TAG @Composable fun ConnectionDetailPanel( - connectionDetails: ConnectionDetails, + connectionDetails: ConnectionDetails?, enableSelectableText: Boolean = true, ) { - ConnectionInfoHeader( - stringResource(R.string.connect_panel_connection_details), - Modifier.fillMaxWidth().padding(bottom = Dimens.smallPadding), - ) - - AnimatedContent(connectionDetails, label = "ConnectionDetails") { - ConnectionDetails( - it.inAddress, - it.outIpv4Address, - it.outIpv6Address, - modifier = Modifier.padding(bottom = Dimens.smallPadding), - enableSelectableText = enableSelectableText, + Column { + ConnectionInfoHeader( + stringResource(R.string.connect_panel_connection_details), + Modifier.fillMaxWidth().padding(bottom = Dimens.smallPadding), ) + + AnimatedContent(connectionDetails, label = "ConnectionDetails") { + ConnectionDetails( + it?.inAddress.orEmpty(), + it?.outIpv4Address, + it?.outIpv6Address, + modifier = Modifier.padding(bottom = Dimens.smallPadding), + enableSelectableText = enableSelectableText, + ) + } } } diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/connectioninfo/FeatureIndicatorsPanel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/connectioninfo/FeatureIndicatorsPanel.kt index 6c404a5bc9..c5051b1f8d 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/connectioninfo/FeatureIndicatorsPanel.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/connectioninfo/FeatureIndicatorsPanel.kt @@ -90,26 +90,24 @@ fun FeatureIndicators( text = featureIndicator.text(), onClick = { onNavigateToFeature(featureIndicator) }, modifier = - Modifier.let { - if (this@with != null && animatedVisibilityScope != null) { - it.sharedBounds( - rememberSharedContentState( - key = - if (featureIndicator == FeatureIndicator.DAITA_MULTIHOP) - FeatureIndicator.DAITA - else featureIndicator - ), - animatedVisibilityScope = animatedVisibilityScope, - // This flag should be set to `true` (default), this would allow the - // element to animate above all other views. However, it causes the - // expand/collapse animation to become janky. - renderInOverlayDuringTransition = false, - enter = fadeIn(tween(easing = EaseInQuart)), - exit = fadeOut(tween(easing = EaseOutQuad)), - ) - } else { - it - } + if (this@with != null && animatedVisibilityScope != null) { + Modifier.sharedBounds( + rememberSharedContentState( + key = + if (featureIndicator == FeatureIndicator.DAITA_MULTIHOP) + FeatureIndicator.DAITA + else featureIndicator + ), + animatedVisibilityScope = animatedVisibilityScope, + // This flag should be set to `true` (default), this would allow the + // element to animate above all other views. However, it causes the + // expand/collapse animation to become janky. + renderInOverlayDuringTransition = false, + enter = fadeIn(tween(easing = EaseInQuart)), + exit = fadeOut(tween(easing = EaseOutQuad)), + ) + } else { + Modifier }, ) } @@ -123,16 +121,17 @@ fun FeatureIndicators( } } +@Suppress("CyclomaticComplexMethod") @Composable private fun FeatureIndicator.text(): String { val resource = when (this) { FeatureIndicator.QUANTUM_RESISTANCE -> R.string.feature_quantum_resistant FeatureIndicator.SPLIT_TUNNELING -> R.string.split_tunneling - FeatureIndicator.SHADOWSOCKS, - FeatureIndicator.UDP_2_TCP, - FeatureIndicator.QUIC, - FeatureIndicator.LWO -> R.string.feature_obfuscation + FeatureIndicator.SHADOWSOCKS -> R.string.shadowsocks + FeatureIndicator.UDP_2_TCP -> R.string.udp_over_tcp + FeatureIndicator.QUIC -> R.string.quic + FeatureIndicator.LWO -> R.string.lwo FeatureIndicator.LAN_SHARING -> R.string.local_network_sharing FeatureIndicator.DNS_CONTENT_BLOCKERS -> R.string.dns_content_blockers FeatureIndicator.CUSTOM_DNS -> R.string.feature_custom_dns diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt index c7074b10a6..d680da7cf4 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt @@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.compose.screen import android.content.Context import androidx.activity.compose.rememberLauncherForActivityResult import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibilityScope import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.animateFloatAsState @@ -528,7 +529,8 @@ private fun ConnectionCard( onConnectClick: () -> Unit, onNavigateToFeature: (FeatureIndicator) -> Unit, ) { - var expanded by rememberSaveable(state.tunnelState::class) { mutableStateOf(false) } + var expanded by + rememberSaveable(state.tunnelState is TunnelState.Disconnected) { mutableStateOf(false) } val containerColor = animateColorAsState( if (expanded) MaterialTheme.colorScheme.surfaceContainer @@ -546,14 +548,14 @@ private fun ConnectionCard( ConnectionCardHeader(state, state.location, expanded) { expanded = !expanded } AnimatedContent( - (state.tunnelState as? TunnelState.Connected)?.featureIndicators to expanded, + state.tunnelState.featureIndicators() to expanded, modifier = Modifier.weight(1f, fill = false), label = "connection_card_connection_details", ) { (featureIndicators, exp) -> if (featureIndicators != null) { ConnectionInfo( featureIndicators, - (state.tunnelState as? TunnelState.Connected)?.toConnectionsDetails(), + state.tunnelState.toConnectionsDetails(), exp, onToggleExpand = { expanded = !exp }, onNavigateToFeature = onNavigateToFeature, @@ -589,14 +591,14 @@ private fun ConnectionCardHeader( modifier = Modifier.fillMaxWidth() .clickable( - enabled = state.tunnelState is TunnelState.Connected, + enabled = state.tunnelState.isConnectingOrConnected(), onClick = onToggleExpand, ) .testTag(CONNECT_CARD_HEADER_TEST_TAG) ) { Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween) { ConnectionStatusText(state = state.tunnelState) - if (state.tunnelState is TunnelState.Connected) { + if (state.tunnelState.isConnectingOrConnected()) { ExpandChevron(isExpanded = !expanded) } } @@ -676,7 +678,7 @@ private fun ConnectionInfo( ) { FeatureIndicatorsPanel(featureIndicators, expanded, onToggleExpand, onNavigateToFeature) - if (expanded && connectionDetails != null) { + AnimatedVisibility(expanded && connectionDetails != null) { ConnectionDetailPanel(connectionDetails, enableSelectableText = !isTv()) } } @@ -690,12 +692,22 @@ data class ConnectionDetails( ) @Composable -fun TunnelState.Connected.toConnectionsDetails(): ConnectionDetails = - ConnectionDetails( +fun TunnelState.toConnectionsDetails(): ConnectionDetails? { + val endpoint = + when (this) { + is TunnelState.Connected -> endpoint + is TunnelState.Connecting -> endpoint + else -> null + } + + if (endpoint == null) return null + + return ConnectionDetails( endpoint.toInAddress(), location()?.ipv4?.hostAddress, location()?.ipv6?.hostAddress, ) +} @Composable private fun ButtonPanel( diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/Udp2TcpSettingsScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/Udp2TcpSettingsScreen.kt index 00a8151254..829acb979b 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/Udp2TcpSettingsScreen.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/Udp2TcpSettingsScreen.kt @@ -72,7 +72,7 @@ fun Udp2TcpSettingsScreen( onBackClick: () -> Unit, ) { ScaffoldWithMediumTopBar( - appBarTitle = stringResource(id = R.string.upd_over_tcp), + appBarTitle = stringResource(id = R.string.udp_over_tcp), navigationIcon = { NavigateBackIconButton(onNavigateBack = onBackClick) }, ) { modifier, lazyListState -> LazyColumn( diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt index 1cba4093f1..80e2f2688d 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt @@ -796,15 +796,15 @@ fun VpnSettingsContent( onInfoClicked = navigateToObfuscationInfo, onCellClicked = navigateToObfuscationInfo, background = - if ( - initialScrollToFeature == FeatureIndicator.UDP_2_TCP || - initialScrollToFeature == FeatureIndicator.SHADOWSOCKS - ) { - MaterialTheme.colorScheme.primary.copy( - alpha = highlightAnimation.value - ) - } else { - MaterialTheme.colorScheme.primary + when (initialScrollToFeature) { + FeatureIndicator.UDP_2_TCP, + FeatureIndicator.SHADOWSOCKS, + FeatureIndicator.QUIC, + FeatureIndicator.LWO -> + MaterialTheme.colorScheme.primary.copy( + alpha = highlightAnimation.value + ) + else -> MaterialTheme.colorScheme.primary }, testTag = LAZY_LIST_WIREGUARD_OBFUSCATION_TITLE_TEST_TAG, modifier = Modifier.animateItem(), diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/TunnelState.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/TunnelState.kt index 61d8ec89e3..b8759ab76f 100644 --- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/TunnelState.kt +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/TunnelState.kt @@ -19,33 +19,44 @@ sealed class TunnelState { data class Error(val errorState: ErrorState) : TunnelState() - fun location(): GeoIpLocation? { - return when (this) { + fun featureIndicators(): List<FeatureIndicator>? = + when (this) { + is Connected -> featureIndicators + is Connecting -> featureIndicators + else -> null + } + + fun location(): GeoIpLocation? = + when (this) { is Connected -> location is Connecting -> location is Disconnecting -> null is Disconnected -> location is Error -> null } - } - fun isSecured(): Boolean { - return when (this) { + fun isConnectingOrConnected(): Boolean = + when (this) { + is Connected, + is Connecting -> true + else -> false + } + + fun isSecured(): Boolean = + when (this) { is Connected, is Connecting, is Disconnecting -> true is Disconnected -> false is Error -> this.errorState.isBlocking } - } - fun isBlocked(): Boolean { - return when (this) { + fun isBlocked(): Boolean = + when (this) { is Connected, is Disconnected -> false is Connecting, is Disconnecting -> true is Error -> this.errorState.isBlocking } - } } diff --git a/android/lib/resource/src/main/res/values-da/strings.xml b/android/lib/resource/src/main/res/values-da/strings.xml index 4a9a442c92..06b7dcc761 100644 --- a/android/lib/resource/src/main/res/values-da/strings.xml +++ b/android/lib/resource/src/main/res/values-da/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">Brugerdefineret DNS</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">%1$s mere ...</string> - <string name="feature_obfuscation">Tilsløring</string> <string name="feature_quantum_resistant">Kvantemodstand</string> <string name="filter">Filter</string> <string name="foreground_notification_channel_description">Viser den aktuelle VPN-tunnelstatus</string> @@ -397,11 +396,11 @@ <string name="try_again">Prøv igen</string> <string name="type">Type</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP-over-TCP</string> <string name="udp_over_tcp_port_info">Hvilken TCP-port UDP-over-TCP tilsløringsprotokollen skal forbinde til på VPN-serveren.</string> <string name="undo">Fortryd</string> <string name="unsupported_version">IKKE-UNDERSTØTTET VERSION</string> <string name="unsupported_version_description">Dit privatliv kan være i fare med denne ikke-understøttede appversion. Opdater den straks.</string> - <string name="upd_over_tcp">UDP-over-TCP</string> <string name="update_dns_server_dialog_title">Opdater DNS-server</string> <string name="update_list_name">Opdater listenavn</string> <string name="updating_server_list_in_the_background">Opdaterer serverlisten i baggrunden ...</string> diff --git a/android/lib/resource/src/main/res/values-de/strings.xml b/android/lib/resource/src/main/res/values-de/strings.xml index b9a4a52cdc..44c6fa7df9 100644 --- a/android/lib/resource/src/main/res/values-de/strings.xml +++ b/android/lib/resource/src/main/res/values-de/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">Eigenes DNS</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">%1$s weitere …</string> - <string name="feature_obfuscation">Verschleierung</string> <string name="feature_quantum_resistant">Quantenresistenz</string> <string name="filter">Filter</string> <string name="foreground_notification_channel_description">Zeigt den aktuellen Status des VPN-Tunnels an</string> @@ -397,11 +396,11 @@ <string name="try_again">Erneut versuchen</string> <string name="type">Typ</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP über TCP</string> <string name="udp_over_tcp_port_info">Mit welchem TCP-Port sich das UDP-über-TCP-Verschleierungsprotokoll auf dem VPN-Server verbinden soll.</string> <string name="undo">Rückgängig</string> <string name="unsupported_version">NICHT UNTERSTÜTZTE VERSION</string> <string name="unsupported_version_description">Ihre Privatsphäre könnte mit dieser nicht unterstützen Version der App gefährdet sein. Bitte aktualisieren Sie sie.</string> - <string name="upd_over_tcp">UDP über TCP</string> <string name="update_dns_server_dialog_title">DNS-Server aktualisieren</string> <string name="update_list_name">Name der Liste ändern</string> <string name="updating_server_list_in_the_background">Serverliste wird im Hintergrund aktiviert …</string> diff --git a/android/lib/resource/src/main/res/values-es/strings.xml b/android/lib/resource/src/main/res/values-es/strings.xml index 205b826a73..79895c7c6c 100644 --- a/android/lib/resource/src/main/res/values-es/strings.xml +++ b/android/lib/resource/src/main/res/values-es/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">DNS personalizado</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">%1$s más...</string> - <string name="feature_obfuscation">Ofuscación</string> <string name="feature_quantum_resistant">Resistencia cuántica</string> <string name="filter">Filtrar</string> <string name="foreground_notification_channel_description">Muestra el estado actual del túnel VPN</string> @@ -397,11 +396,11 @@ <string name="try_again">Volver a intentarlo</string> <string name="type">Tipo</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP sobre TCP</string> <string name="udp_over_tcp_port_info">El puerto TCP al que se conectará el protocolo de ofuscación de UDP sobre TCP en el servidor VPN.</string> <string name="undo">Deshacer</string> <string name="unsupported_version">VERSIÓN NO ADMITIDA</string> <string name="unsupported_version_description">Al usar esta versión obsoleta de la aplicación, es posible que su privacidad esté en riesgo. Actualice ahora.</string> - <string name="upd_over_tcp">UDP sobre TCP</string> <string name="update_dns_server_dialog_title">Actualizar servidor DNS</string> <string name="update_list_name">Actualizar nombre de la lista</string> <string name="updating_server_list_in_the_background">Actualizando lista de servidores en segundo plano...</string> diff --git a/android/lib/resource/src/main/res/values-fi/strings.xml b/android/lib/resource/src/main/res/values-fi/strings.xml index ab3101fc57..9ee6269c69 100644 --- a/android/lib/resource/src/main/res/values-fi/strings.xml +++ b/android/lib/resource/src/main/res/values-fi/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">Mukautettu DNS</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">%1$s lisää...</string> - <string name="feature_obfuscation">Hämäysteknologia</string> <string name="feature_quantum_resistant">Kvanttihyökkäysten esto</string> <string name="filter">Suodatin</string> <string name="foreground_notification_channel_description">Näyttää VPN-tunnelin nykyisen tilan</string> @@ -397,11 +396,11 @@ <string name="try_again">Yritä uudelleen</string> <string name="type">Tyyppi</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP TCP:n kautta</string> <string name="udp_over_tcp_port_info">Määrittää, mihin VPN-palvelimen TCP-porttiin \"UDP TCP:n kautta\" -hämäysteknologia-protokollan tulee muodostaa yhteys.</string> <string name="undo">Kumoa</string> <string name="unsupported_version">EI-TUETTU VERSIO</string> <string name="unsupported_version_description">Yksityisyytesi saattaa olla vaarassa tämän sovellusversion, jota ei tueta, vuoksi. Päivitä versio heti.</string> - <string name="upd_over_tcp">UDP TCP:n kautta</string> <string name="update_dns_server_dialog_title">Päivitä DNS-palvelin</string> <string name="update_list_name">Päivitä luettelon nimi</string> <string name="updating_server_list_in_the_background">Palvelinluetteloa päivitetään taustalla...</string> diff --git a/android/lib/resource/src/main/res/values-fr/strings.xml b/android/lib/resource/src/main/res/values-fr/strings.xml index 52ff3dddb1..ca4383b370 100644 --- a/android/lib/resource/src/main/res/values-fr/strings.xml +++ b/android/lib/resource/src/main/res/values-fr/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">DNS personnalisé</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">%1$s de plus…</string> - <string name="feature_obfuscation">Dissimulation</string> <string name="feature_quantum_resistant">Résistance quantique</string> <string name="filter">Filtrer</string> <string name="foreground_notification_channel_description">Affiche l\'état actuel du tunnel VPN</string> @@ -397,11 +396,11 @@ <string name="try_again">Réessayer</string> <string name="type">Type</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP-over-TCP</string> <string name="udp_over_tcp_port_info">Le port TCP auquel le protocole de dissimulation UDP sur TCP doit se connecter sur le serveur VPN.</string> <string name="undo">Annuler</string> <string name="unsupported_version">VERSION NON PRISE EN CHARGE</string> <string name="unsupported_version_description">Votre confidentialité peut être en danger avec cette version non prise en charge de l\'application. Veuillez la mettre à jour maintenant.</string> - <string name="upd_over_tcp">UDP-over-TCP</string> <string name="update_dns_server_dialog_title">Mettre à jour le serveur DNS</string> <string name="update_list_name">Mettre à jour le nom de la liste</string> <string name="updating_server_list_in_the_background">Mise à jour en arrière-plan de la liste des serveurs…</string> diff --git a/android/lib/resource/src/main/res/values-it/strings.xml b/android/lib/resource/src/main/res/values-it/strings.xml index 03bfe3500a..8a6f74274c 100644 --- a/android/lib/resource/src/main/res/values-it/strings.xml +++ b/android/lib/resource/src/main/res/values-it/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">DNS personalizzato</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">Altri %1$s...</string> - <string name="feature_obfuscation">Offuscamento</string> <string name="feature_quantum_resistant">Resistenza ad attacchi quantistici</string> <string name="filter">Filtra</string> <string name="foreground_notification_channel_description">Mostra lo stato attuale del tunnel VPN</string> @@ -397,11 +396,11 @@ <string name="try_again">Riprova</string> <string name="type">Tipo</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP-over-TCP</string> <string name="udp_over_tcp_port_info">A quale porta TCP deve connettersi il protocollo di offuscamento UDP-over-TCP sul server VPN.</string> <string name="undo">Annulla</string> <string name="unsupported_version">VERSIONE NON SUPPORTATA</string> <string name="unsupported_version_description">La tua privacy potrebbe essere a rischio con questa versione dell\'app non supportata. Aggiornala subito.</string> - <string name="upd_over_tcp">UDP-over-TCP</string> <string name="update_dns_server_dialog_title">Aggiorna server DNS</string> <string name="update_list_name">Aggiorna nome elenco</string> <string name="updating_server_list_in_the_background">Aggiornamento dell\'elenco server in background...</string> diff --git a/android/lib/resource/src/main/res/values-ja/strings.xml b/android/lib/resource/src/main/res/values-ja/strings.xml index 5c6a938215..3a19154fca 100644 --- a/android/lib/resource/src/main/res/values-ja/strings.xml +++ b/android/lib/resource/src/main/res/values-ja/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">カスタムDNS</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">その他%1$s件…</string> - <string name="feature_obfuscation">難読化</string> <string name="feature_quantum_resistant">耐量子</string> <string name="filter">絞り込み</string> <string name="foreground_notification_channel_description">現在のVPNトンネルのステータスを表示します</string> @@ -397,11 +396,11 @@ <string name="try_again">再試行</string> <string name="type">種類</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP-over-TCP</string> <string name="udp_over_tcp_port_info">UDP-over-TCP難読化プロトコルで接続する必要のあるVPNサーバーのTCPポートです。</string> <string name="undo">元に戻す</string> <string name="unsupported_version">未対応のバージョン</string> <string name="unsupported_version_description">このアプリバージョンはサポートされていないため、プライバシーが危険にさらされる可能性があります。今すぐアップデートしてください。</string> - <string name="upd_over_tcp">UDP-over-TCP</string> <string name="update_dns_server_dialog_title">DNS サーバーを更新</string> <string name="update_list_name">リスト名の更新</string> <string name="updating_server_list_in_the_background">サーバーリストをバックグラウンドで更新中...</string> diff --git a/android/lib/resource/src/main/res/values-ko/strings.xml b/android/lib/resource/src/main/res/values-ko/strings.xml index b5cdef6266..cba3916b12 100644 --- a/android/lib/resource/src/main/res/values-ko/strings.xml +++ b/android/lib/resource/src/main/res/values-ko/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">사용자 지정 DNS</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">%1$s개 더 보기...</string> - <string name="feature_obfuscation">난독 처리</string> <string name="feature_quantum_resistant">양자 저항</string> <string name="filter">필터</string> <string name="foreground_notification_channel_description">현재 VPN 터널 상태 표시</string> @@ -397,11 +396,11 @@ <string name="try_again">다시 시도</string> <string name="type">유형</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP-over-TCP</string> <string name="udp_over_tcp_port_info">UDP-over-TCP 난독 처리 프로토콜이 VPN 서버에서 연결해야 하는 TCP 포트입니다.</string> <string name="undo">실행 취소</string> <string name="unsupported_version">지원되지 않는 버전</string> <string name="unsupported_version_description">지원되지 않는 이 앱 버전으로 인해 개인 정보가 위험할 수 있습니다. 지금 업데이트하세요.</string> - <string name="upd_over_tcp">UDP-over-TCP</string> <string name="update_dns_server_dialog_title">DNS 서버 업데이트</string> <string name="update_list_name">목록 이름 업데이트</string> <string name="updating_server_list_in_the_background">백그라운드에서 서버 목록을 업데이트하는 중...</string> diff --git a/android/lib/resource/src/main/res/values-my/strings.xml b/android/lib/resource/src/main/res/values-my/strings.xml index a52c079435..b6db2a3709 100644 --- a/android/lib/resource/src/main/res/values-my/strings.xml +++ b/android/lib/resource/src/main/res/values-my/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">စိတ်ကြိုက် DNS</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">နောက်ထပ် %1$s ...</string> - <string name="feature_obfuscation">Obfuscation</string> <string name="feature_quantum_resistant">Quantum ခုခံမှု</string> <string name="filter">စစ်ထုတ်မှု</string> <string name="foreground_notification_channel_description">လက်ရှိ VPN Tunnel အခြေအနေကို ပြသပေးပါသည်</string> @@ -397,11 +396,11 @@ <string name="try_again">ထပ်ကြိုးစားရန်</string> <string name="type">အမျိုးအစား</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP-over-TCP</string> <string name="udp_over_tcp_port_info">VPN ဆာဗာကို ဖွင့်ရန် ၎င်း TCP ပေါ့တ် UDP-over-TCP Obfuscation ပရိုတိုကောလ်နှင့် ချိတ်ဆက်ထားသင့်ပါသည်။</string> <string name="undo">မလုပ်တော့ပါ</string> <string name="unsupported_version">တွဲဖက်မလုပ်ဆောင်နိုင်သည့် ဗားရှင်း</string> <string name="unsupported_version_description">တွဲဖက်မလုပ်ဆောင်နိုင်သည့် ဤအက်ပ်ဗားရှင်းကြောင့် သင့်ကိုယ်ရေးအချက်အလက်များ အန္တရာယ် ရှိနိုင်ပါသည်။ ယခုပင် အပ်ဒိတ်လုပ်ပေးပါ။</string> - <string name="upd_over_tcp">UDP-over-TCP</string> <string name="update_dns_server_dialog_title">DNS ဆာဗာကို အပ်ဒိတ်လုပ်ရန်</string> <string name="update_list_name">စာရင်း အမည်ကို အပ်ဒိတ်လုပ်ရန်</string> <string name="updating_server_list_in_the_background">နောက်ခံတွင် ဆာဗာစာရင်းကို အပ်ဒိတ်လုပ်နေသည်...</string> diff --git a/android/lib/resource/src/main/res/values-nb/strings.xml b/android/lib/resource/src/main/res/values-nb/strings.xml index 63d550e048..e7797d3689 100644 --- a/android/lib/resource/src/main/res/values-nb/strings.xml +++ b/android/lib/resource/src/main/res/values-nb/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">Tilpasset DNS</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">%1$s til …</string> - <string name="feature_obfuscation">Tilsløring</string> <string name="feature_quantum_resistant">Kvantemotstand</string> <string name="filter">Filter</string> <string name="foreground_notification_channel_description">Viser gjeldende VPN-tunnelstatus</string> @@ -397,11 +396,11 @@ <string name="try_again">Prøv igjen</string> <string name="type">Type</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP-over-TCP</string> <string name="udp_over_tcp_port_info">TCP-porten som UDP-over-TCP-tilsløringen skal koble til på VPN-serveren.</string> <string name="undo">Angre</string> <string name="unsupported_version">VERSJON UTEN STØTTE</string> <string name="unsupported_version_description">Personvernet ditt kan være i fare med denne appversjonen som ikke støttes. Oppdater nå.</string> - <string name="upd_over_tcp">UDP-over-TCP</string> <string name="update_dns_server_dialog_title">Oppdater DNS-serveren</string> <string name="update_list_name">Oppdater listenavn</string> <string name="updating_server_list_in_the_background">Oppdater serverlisten i bakgrunnen …</string> diff --git a/android/lib/resource/src/main/res/values-nl/strings.xml b/android/lib/resource/src/main/res/values-nl/strings.xml index 8570f48dd8..2591b1bad7 100644 --- a/android/lib/resource/src/main/res/values-nl/strings.xml +++ b/android/lib/resource/src/main/res/values-nl/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">Aangepaste DNS</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">Nog %1$s...</string> - <string name="feature_obfuscation">Obfuscatie</string> <string name="feature_quantum_resistant">Kwantumbestendigheid</string> <string name="filter">Filter</string> <string name="foreground_notification_channel_description">Toont de huidige status van de VPN-tunnel</string> @@ -397,11 +396,11 @@ <string name="try_again">Opnieuw proberen</string> <string name="type">Type</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP-over-TCP</string> <string name="udp_over_tcp_port_info">Met welke TCP-poort moet het UDP-over-TCP-obfuscatieprotocol verbinding maken op de VPN-server.</string> <string name="undo">Ongedaan maken</string> <string name="unsupported_version">NIET-ONDERSTEUNDE VERSIE</string> <string name="unsupported_version_description">Uw privacy kan risico lopen met deze niet-ondersteunde appversie. Werk de app nu bij.</string> - <string name="upd_over_tcp">UDP-over-TCP</string> <string name="update_dns_server_dialog_title">DNS-server bijwerken</string> <string name="update_list_name">Lijstnaam bijwerken</string> <string name="updating_server_list_in_the_background">Serverlijst wordt bijgewerkt op de achtergrond...</string> diff --git a/android/lib/resource/src/main/res/values-pl/strings.xml b/android/lib/resource/src/main/res/values-pl/strings.xml index 1316905be4..8c7d1998e3 100644 --- a/android/lib/resource/src/main/res/values-pl/strings.xml +++ b/android/lib/resource/src/main/res/values-pl/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">Niestandardowy serwer DNS</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">Jeszcze %1$s...</string> - <string name="feature_obfuscation">Zaciemnianie</string> <string name="feature_quantum_resistant">Odporność na ataki z użyciem komputerów kwantowych</string> <string name="filter">Filtruj</string> <string name="foreground_notification_channel_description">Pokazuje bieżący status tunelu VPN</string> @@ -397,11 +396,11 @@ <string name="try_again">Spróbuj ponownie</string> <string name="type">Typ</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP-przez-TCP</string> <string name="udp_over_tcp_port_info">Port TCP, z którym powinien łączyć się protokół zaciemniania UDP-przez-TCP na serwerze VPN.</string> <string name="undo">Cofnij</string> <string name="unsupported_version">WERSJA NIEOBSŁUGIWANA</string> <string name="unsupported_version_description">W tej nieobsługiwanej wersji aplikacji prywatność może być zagrożona. Zaktualizuj już teraz.</string> - <string name="upd_over_tcp">UDP-przez-TCP</string> <string name="update_dns_server_dialog_title">Zaktualizuj serwer DNS</string> <string name="update_list_name">Zaktualizuj nazwę listy</string> <string name="updating_server_list_in_the_background">Aktualizowanie listy serwerów w tle...</string> diff --git a/android/lib/resource/src/main/res/values-pt/strings.xml b/android/lib/resource/src/main/res/values-pt/strings.xml index 66accd8f2d..73b5e87e2f 100644 --- a/android/lib/resource/src/main/res/values-pt/strings.xml +++ b/android/lib/resource/src/main/res/values-pt/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">DNS personalizado</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">Mais %1$s...</string> - <string name="feature_obfuscation">Ofuscação</string> <string name="feature_quantum_resistant">Resistência quântica</string> <string name="filter">Filtrar</string> <string name="foreground_notification_channel_description">Indica o estado atual do túnel VPN</string> @@ -397,11 +396,11 @@ <string name="try_again">Tentar novamente</string> <string name="type">Tipo</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP sobre TCP</string> <string name="udp_over_tcp_port_info">A que porta TCP o protocolo de ofuscação UDP sobre TCP deve ligar-se no servidor VPN.</string> <string name="undo">Anular</string> <string name="unsupported_version">VERSÃO NÃO SUPORTADA</string> <string name="unsupported_version_description">A sua privacidade pode estar comprometida com uma versão não suportada da aplicação. Por favor efetue a atualização agora.</string> - <string name="upd_over_tcp">UDP sobre TCP</string> <string name="update_dns_server_dialog_title">Atualizar servidor DNS</string> <string name="update_list_name">Atualizar nome da lista</string> <string name="updating_server_list_in_the_background">A atualizar a lista de servidores em segundo plano...</string> diff --git a/android/lib/resource/src/main/res/values-ru/strings.xml b/android/lib/resource/src/main/res/values-ru/strings.xml index d4c7b9da86..fdbc5bcb9e 100644 --- a/android/lib/resource/src/main/res/values-ru/strings.xml +++ b/android/lib/resource/src/main/res/values-ru/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">Пользовательский DNS</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">Еще %1$s...</string> - <string name="feature_obfuscation">Обфускация</string> <string name="feature_quantum_resistant">Квантовая устойчивость</string> <string name="filter">Фильтр</string> <string name="foreground_notification_channel_description">Показывает текущее состояние VPN-туннеля</string> @@ -397,11 +396,11 @@ <string name="try_again">Повторить</string> <string name="type">Тип</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP через TCP</string> <string name="udp_over_tcp_port_info">TCP-порт, к которому должен подключаться протокол обфускации UDP через TCP на VPN-сервере.</string> <string name="undo">Отменить</string> <string name="unsupported_version">НЕПОДДЕРЖИВАЕМАЯ ВЕРСИЯ</string> <string name="unsupported_version_description">Эта версия приложения не поддерживается, что может угрожать неприкосновенности ваших данных. Обновите приложение.</string> - <string name="upd_over_tcp">UDP через TCP</string> <string name="update_dns_server_dialog_title">Обновить DNS-сервер</string> <string name="update_list_name">Обновление названия списка</string> <string name="updating_server_list_in_the_background">Фоновое обновление списка серверов...</string> diff --git a/android/lib/resource/src/main/res/values-sv/strings.xml b/android/lib/resource/src/main/res/values-sv/strings.xml index bd7d7585ba..338c8faa5f 100644 --- a/android/lib/resource/src/main/res/values-sv/strings.xml +++ b/android/lib/resource/src/main/res/values-sv/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">Anpassad DNS</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">%1$s till ...</string> - <string name="feature_obfuscation">Obfuskering</string> <string name="feature_quantum_resistant">Kvantresistens</string> <string name="filter">Filtrera</string> <string name="foreground_notification_channel_description">Visar nuvarande status för VPN-tunnel</string> @@ -397,11 +396,11 @@ <string name="try_again">Försök igen</string> <string name="type">Typ</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP över TCP</string> <string name="udp_over_tcp_port_info">Vilken TCP-port som UDP-över-TCP-obfuskeringsprotokoll bör ansluta till på VPN-servern.</string> <string name="undo">Ångra</string> <string name="unsupported_version">VERSION UTAN STÖD</string> <string name="unsupported_version_description">Din sekretess kan vara utsatt för risk med den här appversionen som inte stöds. Uppdatera nu.</string> - <string name="upd_over_tcp">UDP över TCP</string> <string name="update_dns_server_dialog_title">Uppdatera DNS-server</string> <string name="update_list_name">Uppdatera listnamn</string> <string name="updating_server_list_in_the_background">Uppdaterar serverlistan i bakgrunden ...</string> diff --git a/android/lib/resource/src/main/res/values-th/strings.xml b/android/lib/resource/src/main/res/values-th/strings.xml index e2f64843ff..12073f3e25 100644 --- a/android/lib/resource/src/main/res/values-th/strings.xml +++ b/android/lib/resource/src/main/res/values-th/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">DNS แบบกำหนดเอง</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">อีก %1$s...</string> - <string name="feature_obfuscation">การทำให้ข้อมูลยุ่งเหยิง</string> <string name="feature_quantum_resistant">การต่อต้านควอนตัม</string> <string name="filter">ตัวกรอง</string> <string name="foreground_notification_channel_description">แสดงสถานะอุโมงค์ VPN ในปัจจุบัน</string> @@ -397,11 +396,11 @@ <string name="try_again">ลองอีกครั้ง</string> <string name="type">ประเภท</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP-ผ่าน-TCP</string> <string name="udp_over_tcp_port_info">พอร์ต TCP ใดที่โพรโทคอลการทำให้ข้อมูลยุ่งเหยิง UDP-ผ่าน-TCP ควรเชื่อมต่อบนเซิร์ฟเวอร์ VPN</string> <string name="undo">เลิกทำ</string> <string name="unsupported_version">เวอร์ชันที่ไม่รองรับ</string> <string name="unsupported_version_description">ความเป็นส่วนตัวของคุณอาจมีความเสี่ยง ในขณะที่ใช้งานเวอร์ชันแอปที่ไม่ได้รับการสนับสนุนนี้ โปรดอัปเดตตอนนี้เลย</string> - <string name="upd_over_tcp">UDP-ผ่าน-TCP</string> <string name="update_dns_server_dialog_title">อัปเดตเซิร์ฟเวอร์ DNS</string> <string name="update_list_name">อัปเดตชื่อรายการ</string> <string name="updating_server_list_in_the_background">กำลังอัปเดตรายชื่อเซิร์ฟเวอร์ในพื้นหลัง...</string> diff --git a/android/lib/resource/src/main/res/values-tr/strings.xml b/android/lib/resource/src/main/res/values-tr/strings.xml index e2258537ef..c001bf8e06 100644 --- a/android/lib/resource/src/main/res/values-tr/strings.xml +++ b/android/lib/resource/src/main/res/values-tr/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">Özel DNS</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">%1$s tane daha...</string> - <string name="feature_obfuscation">Gizleme</string> <string name="feature_quantum_resistant">Kuantum direnci</string> <string name="filter">Filtrele</string> <string name="foreground_notification_channel_description">Mevcut VPN tünelinin durumunu gösterir</string> @@ -397,11 +396,11 @@ <string name="try_again">Tekrar dene</string> <string name="type">Tür</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">TCP üzerinden UDP</string> <string name="udp_over_tcp_port_info">TCP üzerinden UDP gizleme protokolünün VPN sunucusunda hangi TCP portuna bağlanması gerekiyor.</string> <string name="undo">Geri al</string> <string name="unsupported_version">DESTEKLENMEYEN SÜRÜM</string> <string name="unsupported_version_description">Bu desteklenmeyen uygulama sürümüyle gizliliğiniz risk altında olabilir. Lütfen hemen güncelleyin.</string> - <string name="upd_over_tcp">TCP üzerinden UDP</string> <string name="update_dns_server_dialog_title">DNS sunucusunu güncelle</string> <string name="update_list_name">Liste adını güncelle</string> <string name="updating_server_list_in_the_background">Sunucu listesi arka planda güncelleniyor...</string> diff --git a/android/lib/resource/src/main/res/values-zh-rCN/strings.xml b/android/lib/resource/src/main/res/values-zh-rCN/strings.xml index c4757f1561..b66ac0d275 100644 --- a/android/lib/resource/src/main/res/values-zh-rCN/strings.xml +++ b/android/lib/resource/src/main/res/values-zh-rCN/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">自定义 DNS</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">其他 %1$s 个…</string> - <string name="feature_obfuscation">混淆</string> <string name="feature_quantum_resistant">量子阻力</string> <string name="filter">筛选</string> <string name="foreground_notification_channel_description">显示当前的 VPN 隧道状态</string> @@ -397,11 +396,11 @@ <string name="try_again">重试</string> <string name="type">类型</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP-over-TCP</string> <string name="udp_over_tcp_port_info">UDP-over-TCP 混淆协议应连接到 VPN 服务器上的哪个 TCP 端口。</string> <string name="undo">撤消</string> <string name="unsupported_version">不受支持的版本</string> <string name="unsupported_version_description">此应用版本不受支持,因此您的隐私可能存在风险。请立即更新。</string> - <string name="upd_over_tcp">UDP-over-TCP</string> <string name="update_dns_server_dialog_title">更新 DNS 服务器</string> <string name="update_list_name">更新列表名称</string> <string name="updating_server_list_in_the_background">正在后台更新服务器列表…</string> diff --git a/android/lib/resource/src/main/res/values-zh-rTW/strings.xml b/android/lib/resource/src/main/res/values-zh-rTW/strings.xml index 14158d905e..240523140d 100644 --- a/android/lib/resource/src/main/res/values-zh-rTW/strings.xml +++ b/android/lib/resource/src/main/res/values-zh-rTW/strings.xml @@ -199,7 +199,6 @@ <string name="feature_custom_dns">自訂 DNS</string> <string name="feature_custom_mtu">MTU</string> <string name="feature_indicators_show_more">其他 %1$s 個…</string> - <string name="feature_obfuscation">混淆</string> <string name="feature_quantum_resistant">抗量子</string> <string name="filter">篩選</string> <string name="foreground_notification_channel_description">顯示目前的 VPN 通道狀態</string> @@ -397,11 +396,11 @@ <string name="try_again">再試一次</string> <string name="type">類型</string> <string name="udp">UDP</string> + <string name="udp_over_tcp">UDP-over-TCP</string> <string name="udp_over_tcp_port_info">UDP-over-TCP 混淆通訊協定應連線到 VPN 伺服器上的哪個 TCP 連接埠。</string> <string name="undo">復原</string> <string name="unsupported_version">不支援的版本</string> <string name="unsupported_version_description">此應用程式版本不受支援,因此您的隱私可能存在風險。請立即更新。</string> - <string name="upd_over_tcp">UDP-over-TCP</string> <string name="update_dns_server_dialog_title">更新 DNS 伺服器</string> <string name="update_list_name">更新清單名稱</string> <string name="updating_server_list_in_the_background">正在背景更新伺服器清單……</string> diff --git a/android/lib/resource/src/main/res/values/strings.xml b/android/lib/resource/src/main/res/values/strings.xml index 68d04343d8..a7ace9eaf0 100644 --- a/android/lib/resource/src/main/res/values/strings.xml +++ b/android/lib/resource/src/main/res/values/strings.xml @@ -345,12 +345,11 @@ <string name="daita_info">By enabling “%1$s” you will have to manually select a server that is %2$s-enabled. This can cause you to end up in a blocked state until you have selected a compatible server in the “Select location” view.</string> <string name="setting_chip">Setting: %s</string> <string name="enable_anyway">Enable anyway</string> - <string name="upd_over_tcp">UDP-over-TCP</string> + <string name="udp_over_tcp">UDP-over-TCP</string> <string name="port_x">Port: %s</string> <string name="connect_panel_active_features">Active features</string> <string name="connect_panel_connection_details">Connection details</string> <string name="feature_quantum_resistant">Quantum resistance</string> - <string name="feature_obfuscation">Obfuscation</string> <string name="feature_custom_dns">Custom DNS</string> <string name="feature_custom_mtu">MTU</string> <string name="dns_content_blockers">DNS content blockers</string> |
