diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/BaseTunnel.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/BaseTunnel.kt index 53dbc58e..33bfbf7e 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/BaseTunnel.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/BaseTunnel.kt @@ -13,14 +13,10 @@ import com.zaneschepke.wireguardautotunnel.domain.state.TunnelState import com.zaneschepke.wireguardautotunnel.domain.state.TunnelStatistics import java.util.concurrent.ConcurrentHashMap import kotlin.coroutines.cancellation.CancellationException -import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Job +import kotlinx.coroutines.* import kotlinx.coroutines.flow.* -import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock -import kotlinx.coroutines.withTimeoutOrNull import timber.log.Timber abstract class BaseTunnel( diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/KernelTunnel.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/KernelTunnel.kt index fabd7bca..74b01426 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/KernelTunnel.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/KernelTunnel.kt @@ -16,17 +16,13 @@ import com.zaneschepke.wireguardautotunnel.util.extensions.asTunnelState import com.zaneschepke.wireguardautotunnel.util.extensions.toBackendCoreException import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject -import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.TimeoutCancellationException +import kotlinx.coroutines.* import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.consumeAsFlow import kotlinx.coroutines.flow.update -import kotlinx.coroutines.launch -import kotlinx.coroutines.withTimeout import timber.log.Timber class KernelTunnel diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/TunnelMonitor.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/TunnelMonitor.kt index ff1a7491..0549c6a3 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/TunnelMonitor.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/TunnelMonitor.kt @@ -7,11 +7,7 @@ import com.zaneschepke.wireguardautotunnel.domain.enums.TunnelStatus import com.zaneschepke.wireguardautotunnel.domain.model.TunnelConf import com.zaneschepke.wireguardautotunnel.domain.repository.GeneralSettingRepository import com.zaneschepke.wireguardautotunnel.domain.repository.TunnelRepository -import com.zaneschepke.wireguardautotunnel.domain.state.FailureReason -import com.zaneschepke.wireguardautotunnel.domain.state.LogHealthState -import com.zaneschepke.wireguardautotunnel.domain.state.PingState -import com.zaneschepke.wireguardautotunnel.domain.state.TunnelState -import com.zaneschepke.wireguardautotunnel.domain.state.TunnelStatistics +import com.zaneschepke.wireguardautotunnel.domain.state.* import com.zaneschepke.wireguardautotunnel.util.extensions.toMillis import com.zaneschepke.wireguardautotunnel.util.network.NetworkUtils import dagger.hilt.android.scopes.ServiceScoped @@ -20,7 +16,6 @@ import inet.ipaddr.IPAddress import inet.ipaddr.IPAddressString import io.ktor.util.collections.* import javax.inject.Inject -import kotlin.collections.mapValues import kotlinx.coroutines.* import kotlinx.coroutines.flow.* import timber.log.Timber diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/UserspaceTunnel.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/UserspaceTunnel.kt index a4923cf7..12c5dcae 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/UserspaceTunnel.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/UserspaceTunnel.kt @@ -20,17 +20,13 @@ import java.io.IOException import java.util.* import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject -import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.TimeoutCancellationException +import kotlinx.coroutines.* import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.consumeAsFlow import kotlinx.coroutines.flow.update -import kotlinx.coroutines.launch -import kotlinx.coroutines.withTimeout import org.amnezia.awg.backend.Backend import org.amnezia.awg.backend.BackendException import org.amnezia.awg.backend.ProxyGoBackend diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/di/ViewModelModule.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/di/ViewModelModule.kt index 1a23c8b7..6bf6bdd6 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/di/ViewModelModule.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/di/ViewModelModule.kt @@ -10,7 +10,6 @@ import dagger.hilt.InstallIn import dagger.hilt.android.components.ViewModelComponent import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.scopes.ViewModelScoped -import io.ktor.utils.io.ioDispatcher import javax.inject.Provider import kotlinx.coroutines.CoroutineDispatcher diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/domain/enums/NetworkType.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/domain/enums/NetworkType.kt new file mode 100644 index 00000000..9963818d --- /dev/null +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/domain/enums/NetworkType.kt @@ -0,0 +1,8 @@ +package com.zaneschepke.wireguardautotunnel.domain.enums + +enum class NetworkType { + WIFI, + ETHERNET, + MOBILE_DATA, + NONE, +} diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/animations/AnimatedFloatIcon.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/animations/AnimatedFloatIcon.kt index 3e9f1815..2ed6a055 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/animations/AnimatedFloatIcon.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/animations/AnimatedFloatIcon.kt @@ -1,12 +1,7 @@ package com.zaneschepke.wireguardautotunnel.ui.common.animations import androidx.compose.animation.Crossfade -import androidx.compose.animation.core.FastOutSlowInEasing -import androidx.compose.animation.core.LinearEasing -import androidx.compose.animation.core.animateFloat -import androidx.compose.animation.core.animateFloatAsState -import androidx.compose.animation.core.tween -import androidx.compose.animation.core.updateTransition +import androidx.compose.animation.core.* import androidx.compose.material3.Icon import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/button/SurfaceRow.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/button/SurfaceRow.kt index c0ece604..0080540f 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/button/SurfaceRow.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/button/SurfaceRow.kt @@ -1,30 +1,13 @@ package com.zaneschepke.wireguardautotunnel.ui.common.button -import android.R.attr.description -import android.R.attr.enabled import androidx.compose.animation.animateContentSize -import androidx.compose.foundation.background -import androidx.compose.foundation.combinedClickable -import androidx.compose.foundation.focusGroup -import androidx.compose.foundation.focusable -import androidx.compose.foundation.indication +import androidx.compose.foundation.* import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.defaultMinSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.* import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.ripple -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue +import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/button/SwitchWithDivider.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/button/SwitchWithDivider.kt index 28a58f37..a0cbddbe 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/button/SwitchWithDivider.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/button/SwitchWithDivider.kt @@ -1,13 +1,7 @@ package com.zaneschepke.wireguardautotunnel.ui.common.button import androidx.compose.foundation.gestures.detectTapGestures -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.IntrinsicSize -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.* import androidx.compose.material3.MaterialTheme import androidx.compose.material3.VerticalDivider import androidx.compose.runtime.Composable diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/dialog/VpnDeniedDialog.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/dialog/VpnDeniedDialog.kt index 09bd1647..b6a44d06 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/dialog/VpnDeniedDialog.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/dialog/VpnDeniedDialog.kt @@ -1,14 +1,15 @@ package com.zaneschepke.wireguardautotunnel.ui.common.dialog -import androidx.compose.foundation.text.ClickableText import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource +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.withStyle +import androidx.compose.ui.text.withLink import com.zaneschepke.wireguardautotunnel.R import com.zaneschepke.wireguardautotunnel.util.extensions.launchVpnSettings @@ -19,11 +20,17 @@ fun VpnDeniedDialog(show: Boolean, onDismiss: () -> Unit) { val alwaysOnDescription = buildAnnotatedString { append(stringResource(R.string.always_on_message)) append(" ") - pushStringAnnotation(tag = "vpnSettings", annotation = "") - withStyle(style = SpanStyle(color = MaterialTheme.colorScheme.primary)) { + withLink( + LinkAnnotation.Clickable( + tag = "vpnSettings", + styles = + TextLinkStyles(style = SpanStyle(color = MaterialTheme.colorScheme.primary)), + ) { + context.launchVpnSettings() + } + ) { append(stringResource(id = R.string.vpn_settings)) } - pop() append(" ") append(stringResource(R.string.always_on_message2)) append(".") @@ -33,18 +40,13 @@ fun VpnDeniedDialog(show: Boolean, onDismiss: () -> Unit) { onAttest = { onDismiss() }, title = { Text(text = stringResource(R.string.vpn_denied_dialog_title)) }, body = { - ClickableText( + Text( text = alwaysOnDescription, style = MaterialTheme.typography.bodyMedium.copy( color = MaterialTheme.colorScheme.outline ), - ) { - alwaysOnDescription - .getStringAnnotations(tag = "vpnSettings", it, it) - .firstOrNull() - ?.let { context.launchVpnSettings() } - } + ) }, confirmText = { Text(text = stringResource(R.string.okay)) }, ) diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/label/lowerCaseLabel.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/label/lowerCaseLabel.kt index 599695dc..8a58bf47 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/label/lowerCaseLabel.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/label/lowerCaseLabel.kt @@ -2,7 +2,7 @@ package com.zaneschepke.wireguardautotunnel.ui.common.label import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import java.util.Locale +import java.util.* @Composable fun lowercaseLabel(text: String): String { diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/text/DescriptionText.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/text/DescriptionText.kt index cb30ed70..a1d5a033 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/text/DescriptionText.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/text/DescriptionText.kt @@ -4,6 +4,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.text.AnnotatedString @Composable fun DescriptionText(text: String, modifier: Modifier = Modifier) { @@ -13,3 +14,12 @@ fun DescriptionText(text: String, modifier: Modifier = Modifier) { modifier = modifier, ) } + +@Composable +fun DescriptionText(text: AnnotatedString, modifier: Modifier = Modifier) { + Text( + text = text, + style = MaterialTheme.typography.bodySmall.copy(color = MaterialTheme.colorScheme.outline), + modifier = modifier, + ) +} diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/textbox/CustomTextField.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/textbox/CustomTextField.kt index e561fb56..2276498c 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/textbox/CustomTextField.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/textbox/CustomTextField.kt @@ -9,11 +9,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextFieldDefaults import androidx.compose.material3.TextFieldDefaults -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue +import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.graphics.Color diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/components/currentBackStackEntryAsNavbarState.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/components/currentBackStackEntryAsNavbarState.kt index 225ed998..1baab994 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/components/currentBackStackEntryAsNavbarState.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/components/currentBackStackEntryAsNavbarState.kt @@ -8,8 +8,10 @@ import androidx.compose.material.icons.automirrored.rounded.Sort import androidx.compose.material.icons.rounded.* import androidx.compose.material3.Icon import androidx.compose.material3.IconButton -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.State import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.res.stringResource diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/autotunnel/AutoTunnelScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/autotunnel/AutoTunnelScreen.kt index b6f5ddf0..866f1420 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/autotunnel/AutoTunnelScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/autotunnel/AutoTunnelScreen.kt @@ -8,12 +8,20 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.* -import androidx.compose.material3.* -import androidx.compose.runtime.* +import androidx.compose.material3.Button +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +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.SpanStyle import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontWeight @@ -23,11 +31,14 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.zaneschepke.wireguardautotunnel.R +import com.zaneschepke.wireguardautotunnel.domain.enums.NetworkType import com.zaneschepke.wireguardautotunnel.ui.LocalNavController import com.zaneschepke.wireguardautotunnel.ui.common.button.ScaledSwitch import com.zaneschepke.wireguardautotunnel.ui.common.button.SurfaceRow import com.zaneschepke.wireguardautotunnel.ui.common.button.SwitchWithDivider +import com.zaneschepke.wireguardautotunnel.ui.common.functions.rememberClipboardHelper import com.zaneschepke.wireguardautotunnel.ui.common.label.GroupLabel +import com.zaneschepke.wireguardautotunnel.ui.common.text.DescriptionText import com.zaneschepke.wireguardautotunnel.ui.navigation.Route import com.zaneschepke.wireguardautotunnel.ui.navigation.TunnelNetwork import com.zaneschepke.wireguardautotunnel.viewmodel.AutoTunnelViewModel @@ -37,6 +48,7 @@ import com.zaneschepke.wireguardautotunnel.viewmodel.AutoTunnelViewModel fun AutoTunnelScreen(viewModel: AutoTunnelViewModel = hiltViewModel()) { val context = LocalContext.current val navController = LocalNavController.current + val clipboard = rememberClipboardHelper() val autoTunnelState by viewModel.container.stateFlow.collectAsStateWithLifecycle() if (autoTunnelState.isLoading) return @@ -96,6 +108,84 @@ fun AutoTunnelScreen(viewModel: AutoTunnelViewModel = hiltViewModel()) { stringResource(R.string.networks), modifier = Modifier.padding(horizontal = 16.dp), ) + val activeNetworkType by + remember(autoTunnelState.connectivityState) { + derivedStateOf { + val connectivity = autoTunnelState.connectivityState + when { + connectivity?.ethernetConnected == true -> NetworkType.ETHERNET + connectivity?.wifiState?.connected == true -> NetworkType.WIFI + connectivity?.cellularConnected == true -> NetworkType.MOBILE_DATA + else -> NetworkType.NONE + } + } + } + + val localizedNetworkType = + when (activeNetworkType) { + NetworkType.WIFI -> stringResource(R.string.wifi) + NetworkType.ETHERNET -> stringResource(R.string.ethernet) + NetworkType.MOBILE_DATA -> stringResource(R.string.mobile_data) + NetworkType.NONE -> stringResource(R.string.no_network) + } + + val ssid by + remember(autoTunnelState.connectivityState) { + derivedStateOf { + autoTunnelState.connectivityState?.wifiState?.ssid + ?: context.getString(R.string.unknown) + } + } + + SurfaceRow( + leading = { + Icon(ImageVector.vectorResource(R.drawable.globe), contentDescription = null) + }, + title = + buildAnnotatedString { + append(stringResource(R.string.active_network)) + withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) { + append(localizedNetworkType) + } + }, + description = + if (activeNetworkType == NetworkType.WIFI) { + { + Column { + DescriptionText( + buildAnnotatedString { + append(stringResource(R.string.security_type)) + withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) { + append( + autoTunnelState.connectivityState + ?.wifiState + ?.securityType + ?.name ?: stringResource(R.string.unknown) + ) + } + } + ) + DescriptionText( + buildAnnotatedString { + append(stringResource(R.string.network_name)) + withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) { + append(ssid) + } + } + ) + } + } + } else null, + trailing = + if (activeNetworkType == NetworkType.WIFI) { + { Icon(Icons.Outlined.CopyAll, contentDescription = null) } + } else null, + onClick = + if (activeNetworkType == NetworkType.WIFI) { + { clipboard.copy(ssid, context.getString(R.string.wifi)) } + } else null, + ) + SurfaceRow( leading = { Icon(Icons.Outlined.Wifi, contentDescription = null) }, title = stringResource(R.string.tunnel_on_wifi), @@ -107,7 +197,7 @@ fun AutoTunnelScreen(viewModel: AutoTunnelViewModel = hiltViewModel()) { ) }, description = { - Text( + DescriptionText( buildAnnotatedString { append(stringResource(R.string.preferred_tunnel_label)) withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) { @@ -116,11 +206,7 @@ fun AutoTunnelScreen(viewModel: AutoTunnelViewModel = hiltViewModel()) { else stringResource(R.string._default) ) } - }, - style = - MaterialTheme.typography.bodySmall.copy( - color = MaterialTheme.colorScheme.outline - ), + } ) }, onClick = { navController.push(Route.WifiPreferences) }, @@ -136,18 +222,14 @@ fun AutoTunnelScreen(viewModel: AutoTunnelViewModel = hiltViewModel()) { ) }, description = { - Text( + DescriptionText( buildAnnotatedString { append(stringResource(R.string.preferred_tunnel_label)) mobileDataTunnel?.tunName?.let { append(it) } ?: withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) { append(stringResource(R.string._default)) } - }, - style = - MaterialTheme.typography.bodySmall.copy( - color = MaterialTheme.colorScheme.outline - ), + } ) }, onClick = { navController.push(Route.PreferredTunnel(TunnelNetwork.MOBILE_DATA)) }, @@ -163,18 +245,14 @@ fun AutoTunnelScreen(viewModel: AutoTunnelViewModel = hiltViewModel()) { ) }, description = { - Text( + DescriptionText( buildAnnotatedString { append(stringResource(R.string.preferred_tunnel_label)) ethernetTunnel?.tunName?.let { append(it) } ?: withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) { append(stringResource(R.string._default)) } - }, - style = - MaterialTheme.typography.bodySmall.copy( - color = MaterialTheme.colorScheme.outline - ), + } ) }, onClick = { navController.push(Route.PreferredTunnel(TunnelNetwork.ETHERNET)) }, diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/autotunnel/components/TrustNetworksTextBox.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/autotunnel/components/TrustNetworksTextBox.kt index 01573802..e16ac9e9 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/autotunnel/components/TrustNetworksTextBox.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/autotunnel/components/TrustNetworksTextBox.kt @@ -1,6 +1,5 @@ package com.zaneschepke.wireguardautotunnel.ui.screens.autotunnel.components -import android.R.attr.text import androidx.compose.animation.animateContentSize import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.* diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt index d0dc788d..887fac92 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt @@ -8,13 +8,7 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ViewQuilt -import androidx.compose.material.icons.outlined.Android -import androidx.compose.material.icons.outlined.Dns -import androidx.compose.material.icons.outlined.ExpandMore -import androidx.compose.material.icons.outlined.Lan -import androidx.compose.material.icons.outlined.MonitorHeart -import androidx.compose.material.icons.outlined.Pin -import androidx.compose.material.icons.outlined.SettingsBackupRestore +import androidx.compose.material.icons.outlined.* import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text @@ -39,14 +33,14 @@ import com.zaneschepke.wireguardautotunnel.ui.common.button.SwitchWithDivider import com.zaneschepke.wireguardautotunnel.ui.common.label.GroupLabel import com.zaneschepke.wireguardautotunnel.ui.common.text.DescriptionText import com.zaneschepke.wireguardautotunnel.ui.navigation.Route -import com.zaneschepke.wireguardautotunnel.ui.screens.settings.components.* +import com.zaneschepke.wireguardautotunnel.ui.screens.settings.components.BackupBottomSheet import com.zaneschepke.wireguardautotunnel.ui.screens.settings.proxy.compoents.AppModeBottomSheet import com.zaneschepke.wireguardautotunnel.util.StringValue import com.zaneschepke.wireguardautotunnel.util.extensions.asString import com.zaneschepke.wireguardautotunnel.util.extensions.asTitleString import com.zaneschepke.wireguardautotunnel.util.extensions.capitalize import com.zaneschepke.wireguardautotunnel.viewmodel.SettingsViewModel -import java.util.Locale +import java.util.* @Composable fun SettingsScreen(viewModel: SettingsViewModel = hiltViewModel()) { diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/components/LearnMoreLinkLabel.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/components/LearnMoreLinkLabel.kt index 205c3522..a91aba8c 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/components/LearnMoreLinkLabel.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/components/LearnMoreLinkLabel.kt @@ -1,27 +1,30 @@ package com.zaneschepke.wireguardautotunnel.ui.screens.settings.components -import androidx.compose.foundation.text.ClickableText import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.SpanStyle -import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.* import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.text.withStyle import com.zaneschepke.wireguardautotunnel.R @Composable fun LearnMoreLinkLabel(onClick: (url: String) -> Unit, url: String) { - // TODO update link when docs are fully updated val gettingStarted = buildAnnotatedString { - pushStringAnnotation(tag = "details", annotation = url) - withStyle(style = SpanStyle(color = MaterialTheme.colorScheme.primary)) { + withLink( + LinkAnnotation.Clickable( + tag = "details", + styles = + TextLinkStyles(style = SpanStyle(color = MaterialTheme.colorScheme.primary)), + ) { + onClick(url) + } + ) { append(stringResource(id = R.string.learn_more)) } - pop() } - ClickableText( + Text( text = gettingStarted, style = MaterialTheme.typography.bodySmall.copy( @@ -29,10 +32,5 @@ fun LearnMoreLinkLabel(onClick: (url: String) -> Unit, url: String) { textAlign = TextAlign.Start, fontStyle = FontStyle.Italic, ), - ) { - gettingStarted.getStringAnnotations(tag = "details", it, it).firstOrNull()?.let { annotation - -> - onClick(annotation.item) - } - } + ) } diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/globals/TunnelGlobalsScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/globals/TunnelGlobalsScreen.kt index 170426a1..2b4ae3f9 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/globals/TunnelGlobalsScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/globals/TunnelGlobalsScreen.kt @@ -1,6 +1,5 @@ package com.zaneschepke.wireguardautotunnel.ui.screens.settings.globals -import android.R.attr.onClick import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/monitoring/TunnelMonitoringScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/monitoring/TunnelMonitoringScreen.kt index 9f7bca75..6e2e6e68 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/monitoring/TunnelMonitoringScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/monitoring/TunnelMonitoringScreen.kt @@ -7,13 +7,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.Adjust -import androidx.compose.material.icons.outlined.NetworkPing -import androidx.compose.material.icons.outlined.QueryStats -import androidx.compose.material.icons.outlined.Replay -import androidx.compose.material.icons.outlined.Timer -import androidx.compose.material.icons.outlined.TimerOff -import androidx.compose.material.icons.outlined.ViewHeadline +import androidx.compose.material.icons.outlined.* import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/monitoring/ping/PingTargetScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/monitoring/ping/PingTargetScreen.kt index 203943d8..b6425498 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/monitoring/ping/PingTargetScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/monitoring/ping/PingTargetScreen.kt @@ -19,12 +19,7 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue +import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester @@ -131,6 +126,9 @@ fun PingTargetScreen(viewModel: SettingsViewModel = hiltViewModel()) { style = MaterialTheme.typography.labelMedium, ) }, + supportingText = { + DescriptionText(stringResource(R.string.ip_or_hostname)) + }, containerColor = MaterialTheme.colorScheme.surface, modifier = Modifier.fillMaxWidth() diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/SupportScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/SupportScreen.kt index 70c2dee0..bed0821d 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/SupportScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/SupportScreen.kt @@ -1,10 +1,6 @@ package com.zaneschepke.wireguardautotunnel.ui.screens.support -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/donate/DonateScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/donate/DonateScreen.kt index 79196813..67313dfd 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/donate/DonateScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/donate/DonateScreen.kt @@ -1,10 +1,6 @@ package com.zaneschepke.wireguardautotunnel.ui.screens.support.donate -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/TunnelsScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/TunnelsScreen.kt index a1cc0b1e..f1cdb00e 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/TunnelsScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/TunnelsScreen.kt @@ -4,12 +4,8 @@ import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/components/GettingStartedLabel.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/components/GettingStartedLabel.kt index d65a7bba..ad7e3ed6 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/components/GettingStartedLabel.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/components/GettingStartedLabel.kt @@ -4,18 +4,15 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.text.ClickableText import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.SpanStyle -import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.* import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.text.withStyle import androidx.compose.ui.unit.dp import com.zaneschepke.wireguardautotunnel.R @@ -26,23 +23,27 @@ fun GettingStartedLabel(onClick: (url: String) -> Unit) { verticalArrangement = Arrangement.Center, modifier = Modifier.padding(top = 100.dp).fillMaxSize(), ) { + val url = stringResource(id = R.string.docs_url) val gettingStarted = buildAnnotatedString { append(stringResource(id = R.string.see_the)) append(" ") - pushStringAnnotation( - tag = "gettingStarted", - annotation = stringResource(id = R.string.docs_url), - ) - withStyle(style = SpanStyle(color = MaterialTheme.colorScheme.primary)) { + withLink( + LinkAnnotation.Clickable( + tag = "gettingStarted", + styles = + TextLinkStyles(style = SpanStyle(color = MaterialTheme.colorScheme.primary)), + ) { + onClick(url) + } + ) { append(stringResource(id = R.string.getting_started_guide)) } - pop() append(" ") append(stringResource(R.string.unsure_how)) append(".") } Text(text = stringResource(R.string.no_tunnels), fontStyle = FontStyle.Italic) - ClickableText( + Text( modifier = Modifier.padding(vertical = 10.dp, horizontal = 24.dp), text = gettingStarted, style = @@ -50,11 +51,6 @@ fun GettingStartedLabel(onClick: (url: String) -> Unit) { color = MaterialTheme.colorScheme.onSurfaceVariant, textAlign = TextAlign.Center, ), - ) { - gettingStarted - .getStringAnnotations(tag = "gettingStarted", it, it) - .firstOrNull() - ?.let { annotation -> onClick(annotation.item) } - } + ) } } diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/AddPeerButton.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/AddPeerButton.kt index f1cef1b6..a6d1651a 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/AddPeerButton.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/AddPeerButton.kt @@ -1,6 +1,8 @@ package com.zaneschepke.wireguardautotunnel.ui.screens.tunnels.config.components -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/InterfaceFields.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/InterfaceFields.kt index 77a9b174..517e3a30 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/InterfaceFields.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/InterfaceFields.kt @@ -1,6 +1,5 @@ package com.zaneschepke.wireguardautotunnel.ui.screens.tunnels.config.components -import android.R.attr.label import androidx.compose.foundation.layout.* import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/InterfaceSection.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/InterfaceSection.kt index 9d7567b6..0e46d559 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/InterfaceSection.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/InterfaceSection.kt @@ -1,7 +1,10 @@ package com.zaneschepke.wireguardautotunnel.ui.screens.tunnels.config.components import androidx.compose.foundation.focusGroup -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.* diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/PeersSection.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/PeersSection.kt index 6b09d7a8..74767abe 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/PeersSection.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/PeersSection.kt @@ -2,7 +2,10 @@ package com.zaneschepke.wireguardautotunnel.ui.screens.tunnels.config.components import androidx.compose.foundation.background import androidx.compose.foundation.focusGroup -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Delete import androidx.compose.material.icons.rounded.MoreVert diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/splittunnel/components/AppListItem.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/splittunnel/components/AppListItem.kt index 527ee429..064f2279 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/splittunnel/components/AppListItem.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/splittunnel/components/AppListItem.kt @@ -9,11 +9,7 @@ import androidx.compose.foundation.layout.size import androidx.compose.material3.Checkbox import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.LocalMinimumInteractiveComponentSize -import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.runtime.derivedStateOf -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember +import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/tunneloptions/TunnelOptionsScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/tunneloptions/TunnelOptionsScreen.kt index fe3ece5f..68dbbca4 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/tunneloptions/TunnelOptionsScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/tunneloptions/TunnelOptionsScreen.kt @@ -13,8 +13,11 @@ import androidx.compose.material.icons.outlined.Star import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector @@ -30,7 +33,7 @@ import com.zaneschepke.wireguardautotunnel.ui.common.button.SurfaceRow import com.zaneschepke.wireguardautotunnel.ui.common.label.GroupLabel import com.zaneschepke.wireguardautotunnel.ui.common.text.DescriptionText import com.zaneschepke.wireguardautotunnel.ui.navigation.Route -import com.zaneschepke.wireguardautotunnel.ui.screens.tunnels.tunneloptions.components.* +import com.zaneschepke.wireguardautotunnel.ui.screens.tunnels.tunneloptions.components.QrCodeDialog import com.zaneschepke.wireguardautotunnel.ui.sideeffect.LocalSideEffect import com.zaneschepke.wireguardautotunnel.viewmodel.TunnelViewModel import org.orbitmvi.orbit.compose.collectSideEffect diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/Theme.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/Theme.kt index d0a30168..01790d2c 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/Theme.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/Theme.kt @@ -5,7 +5,6 @@ import android.os.Build import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material.ripple.RippleAlpha import androidx.compose.material3.* -import androidx.compose.material3.MaterialTheme.colorScheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.SideEffect diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/util/extensions/StringExtensions.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/util/extensions/StringExtensions.kt index 02863f7d..c18bb448 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/util/extensions/StringExtensions.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/util/extensions/StringExtensions.kt @@ -1,6 +1,6 @@ package com.zaneschepke.wireguardautotunnel.util.extensions -import java.util.Locale +import java.util.* import timber.log.Timber val hasNumberInParentheses = """^(.+?)\((\d+)\)$""".toRegex() diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 4d629de4..9309cc70 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -35,7 +35,6 @@ PIN je nesprávný Vytvořte PIN Nastavit jako hlavní tunel - Použít tunel pro Wi-Fi Upravit tunel Junk packet počet Junk packet minimální velikost @@ -63,19 +62,15 @@ Base64 klíč Přečíst si dokumentaci Poslat mi email - Aplikace nenašla žádné služby polohy zapnuté na Vašem zařízení. Dle Vašeho zařízení, tohle může způsobit, že funkce nedůvěryhodné Wi-Fi nedokáže přečíst jméno připojené Wi-Fi. Chcete i přesto pokračovat? Smazat tunel Jste si jisti, že chcete smazat tento tunel? Ano Vše Žádná emailová aplikace nebyla nalezena Žádný prohlížeč nebyl nalezen - Přečíst si logy PIN úspěšně vytvořen Zadejte PIN Zapnout zámek aplikace - Restartovat při selhání pingu - Nastavit jako tunel pro mobilní data Nastavení Podpora WG Tunnel @@ -95,7 +90,6 @@ Oznámení Použít root shell pro získání Wi-Fi informací, zabrání potřebě oprávnění k poloze Přidat ze schránky - Nastavit jako tunel pro ethernet Povolit LAN provoz Logy Automaticky @@ -103,7 +97,6 @@ Tunel pro mobilní data Přeskočit Přispět na projekt - Zapnout místní protokolování Zastavit tunel při ztrátě internetu Zastavit při ztrátě internetu Ethernet tunel @@ -126,7 +119,6 @@ Zahrnout LAN Přidat název Wi-Fi Kanál pro oznámení VPN - Specifické nastavení tunelu Zobrazit skripty Dělené tunelování Kanál pro oznámení o stavu auto-tunelu @@ -194,7 +186,6 @@ Klíč: %1$s Aktivní Služba není spuštěna - Aktivní: %1$s Tunel selhal s: %1$s Vyžadováno oprávnění k použití fotoaparátu Kopírovat @@ -210,7 +201,6 @@ Před deaktivací Po aktivaci Varianta: %1$s - Zabezpečení: %1$s Hotovo WireGuard Amnezia @@ -247,8 +237,6 @@ Pokusů o ping za interval Celkový časový limit pro všechny pokusy Zobrazit podrobné statistiky pingů - RX: %1$s MB - TX: %1$s MB Poslední úspěšný ping: %1$s Odeslané pakety: %1$s Ztracené pakety: %.2f%% @@ -277,7 +265,6 @@ Oddělené čárkami Server:Port Nový tunel - Systémové funkce Nepodařilo se přečíst data. Neplatný klíč Neplatné číslo @@ -315,7 +302,6 @@ Vlastní cíl pingu (volitelné) Interval pingování tunelu Časový limit pingování tunelu - Povolit monitorování pingování tunelu Před %1$s s Latence: %1$s Cíl pingu: %1$s diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index e1d4f607..d64e997e 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -54,14 +54,12 @@ Sende mir eine E-Mail Root Shell verweigert Kein Datei-Explorer installiert - Die App erkennt keine auf deinem Gerät aktivierten Standortdienste. Je nach Gerät kann dies dazu führen, dass die Funktion nicht vertrauenswürdiges WLAN den WLAN-Namen nicht lesen kann. Möchtest du trotzdem fortfahren? Auto-Tunnel Dienst Bist du sicher, dass du den Tunnel löschen möchtest? Ja alle Keinen Browser erkannt Issue öffnen - Logeinträge lesen (automatisch) PIN nicht korrekt PIN erfolgreich erstellt @@ -72,9 +70,6 @@ Eine E-Mail senden… Keine E-Mail-App erkannt PIN erstellen - Tunnel für WLAN-Namen verwenden - Als Tunnel für Mobile Daten setzen - Neustart bei PING Fehler (Beta) Tunnel bearbeiten Als Primären Tunnel setzen VPN Benachrichtigungskanal @@ -117,7 +112,6 @@ Laufender Tunnel Fürs Projekt spenden Lokales Logging - Lokales Logging aktivieren Aus Zwischenablage einfügen Automatisch Sprache @@ -130,7 +124,6 @@ Überwache Statusänderungen Stoppen wenn keine Internetverbindung besteht Ethernet Tunnel - Als Ethernet Tunnel setzen Nativer Notschalter LAN Verkehr erlauben Ein Kanal für VPN-Statusbenachrichtigungen @@ -138,7 +131,6 @@ Ein Kanal für Auto-Tunnel Statusbenachrichtigungen Stop Tunneling aufteilen - Tunnelspezifische Einstellungen Skripte anzeigen Vor Aktivierung Nach Aktivierung @@ -189,7 +181,6 @@ DNS-Auflösung fehlgeschlagen Tunnel als WireGuard exportieren Kameraberechtigung erforderlich - Aktiv: %1$s Löschen Noch nix hier! Alles auswählen @@ -207,7 +198,6 @@ Erlauben Diese App benötigt die Berechtigung, um Updates zu installieren. Du verwendesz bereits die neueste Version. - Sicherheit: %1$s AMOLED Variante: %1$s Dunkler @@ -255,9 +245,6 @@ Tunnel-Ping-Timeout Gesamtzeitüberschreitung für alle Versuche Detaillierte Ping-Statistiken anzeigen - Ping-Tunnel-Überwachung aktivieren - RX: %1$s MB - TX: %1$s MB Erreichbar: %1$s Letzter erfolgreicher Ping: %1$s vor %1$s Sek @@ -303,7 +290,6 @@ Komma getrennt Server:Port Neuer Tunnel - Systemfunktionen Daten konnten nicht gelesen werden. Ungültiger Schlüssel Ungültige Nummer diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 12be0acc..23180550 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -7,10 +7,7 @@ Copiar public key clave base64 Túnel en Wi-Fi no de confianza - La app no detecta activado el servicio de ubicación en tu dispositivo. Dependiendo del dispositivo, esto podría hacer que la característica de Wi-Fi no de confianza falle al leer el nombre Wi-Fi. ¿Quieres continuar de todas formas? todas - Establecer como túnel en datos móviles - Usar tunnel en nombre Wi-Fi Ayuda Clave privada Enviar SSID @@ -66,14 +63,12 @@ Ninguna app de email detectada Ningún navegador detectado Abrir una incidencia - Leer los registros (automático) El pin no es correcto Pin creado con éxito Introduce tu pin Crear pin Activar el bloqueo de aplicaciones - Reiniciar al fallar ping (beta) Establecer como túnel Principal Editar túnel Ajustes @@ -112,11 +107,9 @@ Iniciar túnel automático Detener túnel automático Registro local - Habilitar registro local Excluir LAN Activar compatibilidad con Amnezia Incluir LAN - Ajustes específicos del túnel Ocultar scripts Configuraciones avanzadas Mostrar scripts @@ -142,7 +135,6 @@ Detener cuando no hay internet Detener túnel cuando se pierda el internet Túnel ethernet - Establecer como túnel ethernet Interruptor de apagado nativo Permitir tráfico LAN Excluir LAN del interruptor de apagado @@ -172,7 +164,6 @@ Copiar Exportar túneles como WireGuard Exportar túneles como Amnezia - Activo: %1$s Añadir túnel Exportar registros almacenados Inactivo @@ -196,7 +187,6 @@ Versión: %1$s Comprobar actualización Fallo al comprobar la actualización. - Seguridad: %1$s Sabor: %1$s Iniciando túnel Activar control remoto de la app diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 431a2671..2e550b69 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -84,7 +84,6 @@ Peida Amnezia seadistused Toeta projekti rahaliselt Kohalik logimine - Logi andmed nutiseadmes Lisa lõikelaualt Välimus Teavitused @@ -118,7 +117,6 @@ E-posti rakendust ei õnnestu tuvastada Veebibrauserit ei õnnestu tuvastada Alusta veateate koostamist - Loe logisid (automaatne) PIN-kood pole õige PIN-koodi loomine õnnestus @@ -140,10 +138,8 @@ Jäta vahele Eksportimine ei õnnestunud Viga tunneli töös: %1$s - Aktiivne: %1$s Võti: %1$s Versioon: %1$s - Turvalisus: %1$s Levitusviis: %1$s Vigane seadistus Viga kerneli mooduli nimes @@ -164,7 +160,6 @@ Lisateave Jälgin oleku muudatusi Tunnel töötab - Tunnelikohased seadistused Käivita automaatne tunneldus Peata automaatne tunneldus Kiirtoimingud @@ -178,9 +173,6 @@ Peata internetiühenduse puudumisel Peata tunnel internetiühenduse kadumisel Kasuta rakenduse lukustust - Pingimise mittetoimimisel käivita uuesti (beeta) - Määra mobiilse andmeside tunneliks - Kasuta tunnelit WiFi nime puhul Tuum/Kernel Mobiilside andmetunnel Käivita rakenduse seadistused @@ -213,7 +205,6 @@ Praegune: %1$s Mitmikvalik Kasuta rakenduse otseteid - Rakendus ei suuda sinu nutiseadmes tuvastada asukohateenuste toimimist. Sõltuvalt sinu nutiseadmest võib see tähendada, et ebausaldusväärse WiFi-ühenduse identifitseerimine nime alusel ei pruugi toimida. Kas sa ikkagi soovid jätkata? Tunneli automaatne loomine Tunneli automaatne käivitamine pole kasutusel Tunneli automaatne käivitamine on kasutusel diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 54cfd48c..7d425568 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -8,7 +8,6 @@ Sallitut IP-osoitteet Luo tyhjästä Ulkoasu - Tunnelikohtaiset asetukset DNS-palvelimet WG Tunnel VPN-ilmoituskanava @@ -43,7 +42,6 @@ Lähetä minulle sähköpostia SSID on jo luettelossa Tiedostonhallintasovellusta ei ole asennettuna - Sovellus ei tunnista laitteessasi käytössä olevia sijaintipalveluja. Laitteesta riippuen tämä voi aiheuttaa sen, että epäluotettava wlan-ominaisuus ei pysty lukemaan wlan-nimeä. Haluatko kuitenkin jatkaa? Automaattinen tunnelointipalvelu Poista tunneli Kyllä @@ -78,7 +76,6 @@ kaikki ei koskaan Lokitiedot - Aseta ethernet-tunneliksi sekuntia Peruuta Selainta ei tunnistettu @@ -102,7 +99,6 @@ Salli sovelluksen pikakuvakkeet Automaattinen Tunnelin nimi - Lue lokitiedot Mobiilidatatunneli Käynnistä laitteen käynnistyksen yhteydessä varmistaaksesi, että Aina päällä oleva VPN on kytketty pois päältä kaikkien muiden sovellusten osalta ja yritä uudelleen diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 5e7f78bf..25495bad 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -62,8 +62,6 @@ Code PIN incorrect Entrez votre code NIP Créer un NIP - Redémarrer après l\'échec du ping (beta) - Définir comme tunnel de données mobiles Support Taille minimum des paquets indésirables Initialiser la taille des paquets indésirables @@ -82,15 +80,12 @@ Activer les raccourcis Une erreur inconnue s\'est produite Assistance WG Tunnel - L\'application détecte qu\'aucun service de localisation n\'est activé sur votre appareil. Selon votre appareil, cela peut empêcher la fonctionnalité « Wi-Fi approuvés » de lire le nom du Wi-Fi. Souhaitez-vous tout de même continuer ? Oui tout Définir comme tunnel principal - Lire les journaux (auto) Code PIN bien créé Activer le verrouillage de l\'appli - Utiliser ce tunnel selon le nom du wifi Éditer le tunnel Réglages Nombre de paquets indésirables @@ -126,10 +121,8 @@ Surveille les changements d’état Faire un don au projet Journalisation locale - Activer la journalisation locale Démarrer l\'auto-tunnel Exclure le LAN - Réglages spécifiques du tunnel Voir les scripts Cacher les scripts Retirer la prise en charge d\'Amnezia @@ -138,7 +131,6 @@ Arrêt en l\'absence d\'internet Couper les tunnels en l\'absence d\'internet Tunnel ethernet - Définir comme tunnel ethernet Arrêt d\'urgence natif Autoriser le trafic LAN Contourner le LAN en cas d\'arêt d\'urgence diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 9fdc554b..5be0c34f 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -42,14 +42,11 @@ SSID sudah ada Root shell ditolak Tidak ada file explorer yang diinstal - Aplikasi tidak mendeteksi layanan lokasi apa pun yang diaktifkan di perangkat Anda. Tergantung pada perangkatnya, hal ini dapat menyebabkan fitur wifi yang tidak tepercaya gagal membaca nama wifi. Apakah Anda ingin melanjutkan? Layanan Auto-tunnel Ya Pin salah Pin berhasil dibuat Masukkan pin Anda - Mulai ulang saat ping gagal (beta) - Gunakan tunnel pada nama wifi Edit tunnel Jumlah paket sampah Ukuran minimum paket sampah @@ -82,9 +79,7 @@ Tidak ada browser yang terdeteksi semua Membuka masalah - Baca log (auto) Buat pin - Ditetapkan sebagai tunnel data seluler Ditetapkan sebagai tunnel utama \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index c175654d..f78c0f83 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -47,8 +47,6 @@ L\'SSID esiste già Shell di root negata Permesso localizzazione in background - Questa app non rileva alcun servizio di localizzazione attivo sul tuo dispositivo. Indipendentemente dal dispositivo, questo potrebbe causare il fallimento nel recuperare il nome wifi da parte della funzione wifi non fidate. Vuoi continuare comunque? - Leggi i log (Auto) Magic header pacchetto sottocarico se non sei sicuro su come procedere @@ -71,10 +69,7 @@ Il PIN non è corretto PIN correttamente creato Abilita blocco app - Riavvia su fallimento ping (beta) - Imposta come tunnel dati mobili Imposta come tunnel principale - Usa tunnel su nome wifi Modifica tunnel Impostazioni Supporto @@ -112,10 +107,8 @@ Approfondisci Caratteri jolly attivi Dona al progetto - Abilita logging locale Monitora i cambi di stato Ferma - Configurazioni specifiche del tunnel Mostra gli script Prima di avviarsi Tunneling diviso @@ -157,7 +150,6 @@ Avvia tunnel automatico Ferma tunnel automatico Kill switch nativo - Configura come tunnel ethernet Bypass LAN per kill switch Un canale per le notifiche di stato della VPN Canale di notifica del tunnel automatico @@ -181,7 +173,6 @@ Permessi telecamera richiesti Esportazione fallita Tunnel interrotto: %1$s - Attivo: %1$s Non autorizzato Servizio non in esecuzione Inattivo @@ -203,7 +194,6 @@ Licenze Controllo degli aggiornamenti non è supportato per questo tipo di build. Più scuro - Sicurezza: %1$s Esportazione riuscita Download Controlla gli aggiornamenti @@ -225,7 +215,6 @@ Nunero non valido Chiave non valida Impossibile leggere i dati. - Funzioni di sistema Nuovo tunnel Server:Porta Separati da virgola @@ -266,8 +255,6 @@ %1$s sec fa Ultimo ping riuscito: %1$s Raggiungibile: %1$s - TX: %1$s MB - RX: %1$s MB Corrente: %1$s %1$s (sperimentale) %1$s (root richiesto) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index a911bf08..085f3c01 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -20,7 +20,6 @@ 不明なエラーが発生しました ファイルエクスプローラーはインストールされていません アプリのショートカットを有効にする - アプリがデバイスで有効になっている位置情報サービスを検出しません。 デバイスによっては、信頼されていない無線LAN機能がWiFi名を読み取れない可能性があります。このまま続けますか? メールアプリは検出されません メールを送る ブラウザは検出されません @@ -50,7 +49,6 @@ Ethernetでのトンネルの有効化 問題を報告する PINが無効です - ログを確認する PINの登録が完了しました 設定 モバイルデータでのトンネルの有効化 @@ -60,8 +58,6 @@ 自動トンネルサービス トンネルの編集 新規PINを作成 - 指定WiFiでトンネルを適用 - モバイルデータトンネルに設定 アプリロックを有効にする VPN接続の許可が拒否されました。 他のすべてのアプリで常時接続VPNがオフになっていることを確認して、再度お試しください diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 6008ff7a..b931c891 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -48,16 +48,13 @@ Open een melding Stel PIN in Schakel app-lock in - Herstart bij mislukte ping (beta) Initiële junk packet grootte Junk packet maximum grootte Response junk packet grootte Weet je zeker dat je deze tunnel wil verwijderen? Ja Geen email app gevonden - Lees logboeken (auto) - Stel in als mobiele datatunnel Stel in als primaire tunnel Tunnel bewerken Instellingen @@ -71,7 +68,6 @@ Foutieve PIN Vul PIN in PIN aangemaakt - Gebruik tunnel bij WiFi naam Peer toevoegen Initiële packet magic header Achtergrondlocatievrijgave @@ -100,7 +96,6 @@ VPN systeeminstellingen Root toegang verleend Deze functie vereist locatierechten om het WiFi SSID te kunnen bepalen. Ook als de applicatie is gesloten. Lees het privacybeleid op het scherm Ondersteuning voor meer informatie. - De app kan geen ingeschakelde locatieservices op je apparaat vinden. Afhankelijk van het type apparaat kan dit leiden tot een niet functionerende herkenning van het verbonden WiFi netwerk. De niet-vertrouwde WiFi functionaliteit werkt daardoor mogelijk niet. Toch doorgaan? Transport packet magic header Uiterlijk Licht @@ -111,12 +106,10 @@ Meldingen Snelle acties Ethernet tunnel - Instellen als ethernet tunnel LAN trafiek toestaan Een kanaal voor VPN status notificaties Stop Gesplitste tunneling - Tunnel specifieke instellingen Geavanceerde instellingen Amnezia eigenschappen verbergen Scripts verbergen @@ -124,7 +117,6 @@ Toevoegen van klembord Toon scripts Auto-tunnel Notificatie Kanaal - lokale logging inschakelen Een kanaal voor auto-tunnel status notificaties Amnezia compatibiliteit inschakelen Toevoegen met link @@ -221,10 +213,8 @@ Kamera toestemming vereist Export mislukt Tunnel is mislukt: %1$s - Actief: %1$s Sleutel: %1$s Versie: %1$s - Veiligheid: %1$s Huidige: %1$s Smaak: %1$s Configuratie ongeldig diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 7ccbfadb..192e4c1b 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -34,13 +34,10 @@ Ta funkcja wymaga pozwolenia na dostęp do lokalizacji w tle, aby włączyć monitorowanie SSID sieci Wi-Fi nawet wtedy, gdy aplikacja jest zamknięta. Więcej szczegółów znajdziesz w polityce prywatności znajdującej się na ekranie Obsługa. (opcjonalnie) Klucz wstępnie udostępniony - Aplikacja nie wykrywa żadnych usług lokalizacyjnych włączonych na tym urządzeniu. W zależności od urządzenia może to spowodować, że funkcja niezaufanej sieci Wi-Fi nie będzie w stanie odczytać nazwy sieci Wi-Fi. Czy chcesz kontynuować mimo to? - Przeczytaj dzienniki Obsługa Nagłówek magicznego pakietu początkowego Anuluj w celu upewnienia się, że funkcja stałego VPN jest wyłączona dla wszystkich innych aplikacji, następnie spróbuj ponownie - Użyj tunelu na nazwę sieci Wi-Fi Zezwolono na powłokę użytkownika root Kanał powiadomień VPN Utwórz od nowa @@ -57,7 +54,6 @@ Serwery DNS Plik nie jest w formacie .conf lub .zip Skopiuj klucz publiczny - Uruchom ponownie w przypadku niepowodzenia pingowania (beta) Minimalny rozmiar pakietu śmieciowego Otwórz zagadnienie Dziękujemy za korzystanie z aplikacji WG Tunnel! @@ -119,7 +115,6 @@ Użyj powłoki użytkownika root, aby uzyskać informacje o sieci Wi-Fi, dzięki czemu nie będzie potrzeby uzyskiwania uprawnień do lokalizacji Zatrzymaj autotunel Tunel jest uruchomiony - Włącz lokalne rejestrowanie Wyślij wiadomość e-mail… OK Nie dodano jeszcze żadnych tuneli! @@ -127,12 +122,10 @@ Przeczytaj dokumentację Wyślij mi wiadomość e-mail Ustaw jako tunel podstawowy - Ustaw jako tunel mobilnej transmisji danych Kanał VPN Zatrzymaj, gdy nie ma Internetu Zatrzymaj tunel przy utracie Internetu Tunel ethernetowy - Ustaw jako tunel ethernetowy Zezwól na ruch LAN Omiń LAN dla wyłącznika awaryjnego Kanał powiadomień o stanie VPN @@ -140,7 +133,6 @@ Kanał powiadomień o stanie autotunelowania Zatrzymaj Tunelowanie rozdzielone - Ustawienia specyficzne dla tunelu Przed aktywacją Po aktywacji Przed dezaktywacją @@ -165,7 +157,6 @@ Dodaj z adresu URL Eksport nie powiódł się Nieaktywny - Aktywny: %1$s Usuń i wyczyść dzienniki Dołącz do społeczności Telegramu Nie udało się pobrać konfiguracji @@ -212,7 +203,6 @@ Wariant: %1$s Ciemniejszy AMOLED - Zabezpieczenia: %1$s Pokaż kod QR Amnezia WireGuard @@ -256,9 +246,6 @@ Limit czasu pingowania tunelu Całkowity limit czasu dla wszystkich prób Wyświetl szczegółowe statystyki pingowania - Włącz monitorowanie pingowania tunelu - RX: %1$s MB - TX: %1$s MB Osiągalny: %1$s Ostatni udany ping: %1$s %1$s sek. temu @@ -304,7 +291,6 @@ Oddzielone przecinkiem Serwer:Port Nowy tunel - Funkcje systemu Nie udało się odczytać danych. Nieprawidłowy klucz Nieprawidłowa liczba diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index d17192f9..dae32659 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -16,7 +16,6 @@ Serviço de Auto-túnel todos Digite o seu pin - Usar túnel em wifi com nome Quantidade de pacotes-lixo Tamanho mínimo de pacote-lixo Tamanho máximo de pacote-lixo @@ -56,7 +55,6 @@ (aleatório) Manter a conexão persistente (keepalive) Cancelar - Reiniciar em falha de ping (beta) Me envie um email SSID já existe Tem certeza que quer apagar este túnel? @@ -68,18 +66,15 @@ Enviar um email… Ler a documentação Shell Root negado - A aplicação não detetou o serviço de localização ativado no seu dispositivo. Dependendo do dispositivo, isto pode causar que a função de Wi-Fi não confiável falhe em ler o nome do Wi-Fi. Quer continuar mesmo assim? Abrir um problema Nenhuma aplicação de email detetado Nenhum navegador detetado O Pin está errado (automático) - Ler os registos Pin criado com sucesso Criar um pin Ligar bloqueio de aplicação Editar túnel - Selecionar como túnel em dados móveis Selecionar como túnel principal Suporte Kernel @@ -124,17 +119,14 @@ Túnel em execução Contribua com esse projeto Registro local - Ativar registro local Interromper quando não há internet Interrompa o túnel quando a internet não estiver disponível Túnel ethernet - Definir como túnel ethernet Interruptor de desligamento padrão Permitir tráfego LAN Ignorar LAN no interruptor de desligamento Tunelamento dividido pausar - Configurações específicas no túnel Mostrar scripts Ações rápidas Configurações avançadas diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index f11300a4..cf6c9040 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -10,7 +10,6 @@ Ler a documentação Nenhuma aplicação de email detetado Permitir VPN sempre ligada - Ler os registos Auto-túnel (opcional) Configurações @@ -38,7 +37,6 @@ Pin criado com sucesso Digite o seu pin Ligar bloqueio de aplicação - Reiniciar em falha de ping (beta) Editar túnel Kernel Quantidade de pacotes-lixo @@ -68,7 +66,6 @@ Tamanho de pacote-lixo inicial Permissão negada Configurações do sistema VPN - A aplicação não detetou o serviço de localização ativado no seu dispositivo. Dependendo do dispositivo, isto pode causar que a função de Wi-Fi não confiável falhe em ler o nome do Wi-Fi. Quer continuar mesmo assim? Serviço de Auto-túnel Nenhum explorador de ficheiros instalado WG Tunnel @@ -91,8 +88,6 @@ segundos Nenhum navegador detetado Abrir um problema - Selecionar como túnel em dados móveis - Usar túnel em wifi com nome Veja o guia de início rápido para ter certeza que VPN Sempre-ligada é desligada para todas as outras aplicações e tente novamente @@ -118,7 +113,6 @@ Automático Idioma Tema - Ativar registo local Túnel com dados móveis Saber mais Wildcards ativos @@ -129,10 +123,8 @@ Adicionar da área de transferência Interrompa o túnel quando a internet não estiver disponível Túnel ethernet - Definir como túnel ethernet pausar Tunelamento dividido - Configurações específicas no túnel Mostrar scripts Configurações avançadas Ocultar propriedades Amnezia diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index eca9da4b..be174ba9 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -25,7 +25,6 @@ Приложение для отправки почты не найдено Введите PIN-код Защита приложения - Перезапуск при сбое пинга (бета) Настройки Поддержка S1 @@ -62,12 +61,10 @@ Общий ключ секунд Интервал поддержки соединения - Приложение не обнаружило сервис местоположения на вашем устройстве. На некоторых устройствах это может привести к невозможности определения имени сети Wi-Fi и сбою функции недоверенной сети. Всё равно продолжить? SSID уже существует Root-доступ запрещён Удалить туннель Да - Использовать туннель в сети Wi-Fi Эта функция требует фоновый доступ к местоположению для отслеживания имён сетей Wi-Fi, даже когда приложение закрыто. Для получения дополнительной информации, прочтите политику конфиденциальности на экране поддержки. Копировать открытый ключ Включить ярлыки приложения @@ -75,14 +72,12 @@ Некорректный PIN-код PIN-код создан успешно Создать PIN-код - Назначить как туннель для мобильного интернета Редактировать туннель Jc Jmax Поддержка WG Tunnel Отправить письмо автору Браузер не найден - Посмотреть журнал (авто) Назначить как главный туннель Модуль ядра @@ -126,7 +121,6 @@ Запустить автотуннель Работающий туннель Отслеживание изменений состояния - Включить ведение журнала Добавить из буфера обмена Канал уведомлений автотуннеля Показать сценарии @@ -134,7 +128,6 @@ Остановить без интернета Остановить туннель при потере интернета Туннель для Ethernet - Назначить как туннель для Ethernet Штатное экстренное отключение Обход LAN Разрешать трафик LAN при экстренном отключении @@ -142,7 +135,6 @@ Канал уведомлений о состоянии автотуннеля Стоп Раздельное туннелирование - Специальные настройки туннеля До активации После активации До деактивации @@ -164,7 +156,6 @@ Удалить журналы Центр управления WG Tunnel Поиск - Активный: %1$s Добавить из URL Присоединиться к сообществу в Matrix Ошибка получения DNS @@ -211,7 +202,6 @@ Сборка: %1$s AMOLED Ночная - Защита: %1$s WireGuard Готово Amnezia @@ -265,9 +255,6 @@ Время ожидания пинга туннеля Общее время ожидания всех попыток Подробная статистика пингования - Отслеживать пингование туннеля - ↓: %1$s МБ - ↑: %1$s МБ Доступно: %1$s Последний успешный пинг: %1$s Цель пинга: %1$s @@ -303,7 +290,6 @@ Разделённые запятой Сервер:порт Новый туннель - Системные функции Невозможно прочитать данные. Неправильный ключ Неправильное число diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 910190d0..8978b3ca 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -54,7 +54,6 @@ Pošlite mi e-mail SSID už existuje Nie je nainštalovaný žiadny prehliadač súborov - Aplikácia nezistila žiadne lokalizačné služby povolené vo vašom zariadení. V závislosti od zariadenia to môže spôsobiť, že funkcia nedôveryhodnej wifi nebude môcť prečítať názov wifi. Chcete aj tak pokračovať? Služba automatického tunela Vymazanie tunela Naozaj chcete tento tunel odstrániť? diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index f2a6dd8e..7e6b5871 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -46,7 +46,6 @@ மின்னஞ்சல் பயன்பாடு எதுவும் கண்டறியப்படவில்லை உலாவி கண்டறியப்படவில்லை ஒரு சிக்கலைத் திறக்கவும் - பதிவுகளைப் படியுங்கள் (ஆட்டோ) முள் தவறானது முள் வெற்றிகரமாக உருவாக்கப்பட்டது @@ -101,12 +100,10 @@ மாநில மாற்றங்களை கண்காணித்தல் திட்டத்திற்கு நன்கொடை உள்ளூர்வாசிகள் - உள்ளக பதிவுகளை இயக்கவும் கிளிப்போர்டில் இருந்து சேர்க்கவும் இணையத்தில் நிறுத்துங்கள் இணைய இழப்பில் சுரங்கப்பாதையை நிறுத்துங்கள் ஈத்தர்நெட் சுரங்கப்பாதை - ஈத்தர்நெட் சுரங்கப்பாதையாக அமைக்கவும் சொந்த கொலை சுவிட்ச் லேன் போக்குவரத்தை அனுமதிக்கவும் கொலை சுவிட்சுக்கு பைபாச் லேன் @@ -114,7 +111,6 @@ ஆட்டோ-டன்னல் மாநில அறிவிப்புகளுக்கான சேனல் நிறுத்து பிளவு சுரங்கப்பாதை - சுரங்கப்பாதை குறிப்பிட்ட அமைப்புகள் ச்கிரிப்ட்களைக் காட்டு முன் மேல் பின் மேல் @@ -146,13 +142,9 @@ (விரும்பினால்) முன் பகிரப்பட்ட விசை எனக்கு மின்னஞ்சல் அனுப்புங்கள் - உங்கள் சாதனத்தில் இயக்கப்பட்ட எந்த இருப்பிட சேவைகளையும் பயன்பாடு கண்டறியவில்லை. சாதனத்தைப் பொறுத்து, இது நம்பத்தகாத வைஃபை அம்சத்தை வைஃபை பெயரைப் படிக்கத் தவறிவிடும். எப்படியும் தொடர விரும்புகிறீர்களா? ஆட்டோ-டன்னல் பணி சுரங்கப்பாதையை நீக்கு - பிங் தோல்வியை மறுதொடக்கம் செய்யுங்கள் (பீட்டா) - மொபைல் தரவு சுரங்கப்பாதையாக அமைக்கவும் முதன்மை சுரங்கப்பாதையாக அமைக்கவும் - வைஃபை பெயரில் சுரங்கப்பாதை பயன்படுத்தவும் சுரங்கப்பாதை திருத்து மாறும் விரைவான செயல்கள் @@ -178,7 +170,6 @@ கீழ்தோன்றும் சேமிக்கப்பட்ட பதிவுகளை ஏற்றுமதி செய்யுங்கள் நீக்கு - செயலில்: %1$s ஏற்றுமதி தோல்வியடைந்தது விசை: %1$s கட்டமைப்பு பிழை diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index ae2e816e..42072bf0 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -63,7 +63,6 @@ SSID zaten mevcut Root kabuğu reddedildi Dosya gezgini yüklü değil - Uygulama, cihazınızda etkinleştirilmiş herhangi bir konum servisi algılamıyor. Cihaza bağlı olarak, bu durum güvenilmeyen wifi özelliğinin wifi adını okuyamamasını sağlayabilir. Yine de devam etmek ister misiniz? Otomatik tünel servisi Tüneli sil Bu tüneli silmek istediğinizden emin misiniz? @@ -72,17 +71,13 @@ E-posta uygulaması algılanmadı Tarayıcı algılanmadı Bir sorun aç - Günlükleri oku (Otomatik) Pin yanlış Pin başarıyla oluşturuldu Pin’inizi girin Pin oluştur Uygulama kilidini etkinleştir - Ping başarısız olduğunda yeniden başlat (beta) - Mobil veri tüneli olarak ayarla Birincil tünel olarak ayarla - Wifi adında tünel kullan Tüneli düzenle Ayarlar Destek @@ -134,12 +129,10 @@ Durum değişikliklerini izleme Projeye bağış yap Yerel günlüğe kaydetme - Yerel günlüğe kaydetmeyi etkinleştir Panodan ekle İnternet olmadığında durdur İnternet kaybında tüneli durdur Ethernet tüneli - Ethernet tüneli olarak ayarla Yerel kill switch LAN trafiğine izin ver Kill switch için LAN’ı atla @@ -149,7 +142,6 @@ Otomatik tünel durum bildirimleri için bir kanal durdur Bölünmüş tünelleme - Tünele özgü ayarlar Komut dosyalarını göster Ön çalıştırma Sonra çalıştırma diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 24a52d19..aba5bf2e 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -19,7 +19,6 @@ Надіслати E-Mail… Root доступ заборонено Невірний PIN-код - Використовувати тунель в мережі Wi-Fi Заголовок транспортного пакету інструкція щодо початку роботи Канал сповіщення VPN @@ -62,22 +61,18 @@ Не знайдено файловий менеджер Сервіс автотунелювання Видалити тунель - Додаток не знайшов служб місце знаходження на вашому пристрої. На деяких пристроях це може привести до неможливості визначення назви мережі Wi-Fi і помилок функції недовірених Wi-Fi мереж. Все рівно хочете продовжити? Ви дійсно хочете видалити цей тунель? Так (авто) всі Програми для надсилання email не знайдено Повідомити про проблему - Переглянути логи Веб браузер не знайдено PIN-код створено успішно Введіть PIN-код Створити PINhкод Увімкнути блокування додатку Редагувати тунель - Перезапуск при помилці ping (бета) - Встановити як тунель для мобільних даних Встановити як основний тунель Підтримка Налаштування @@ -150,11 +145,8 @@ Локальне ведення журналу Запустити автотунель Зупинити автотунель - Увімкнути ведення журналу Зупинити тунель під час втрати інтернету Тунель для Ethernet - Призначити як тунель для Ethernet - Спеціальні налаштування тунелю Канал сповіщень про стан VPN Включити сумісність із Amnezia Декілька diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index a5c22be7..f0b6a563 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -8,7 +8,6 @@ عوامی کلید نقل کریں وی پی این نوٹیفکیشن چینل (اختیاری) - ایپ آپ کے آلے پر فعال مقام کی سروسز کا پتہ نہیں لگا رہی۔ ڈیوائس پر منحصر ہے، یہ غیر بھروسہ مند وائی فائی فیچر کے وائی فائی کا نام پڑھنے میں ناکام ہونے کا سبب بن سکتا ہے۔ کیا آپ بہرحال جاری رکھنا چاہیں گے؟ پس منظر لوکیشن کا انکشاف عوامی کلید ڈبلیو جی ٹنل @@ -56,12 +55,10 @@ کوئی ای میل ایپ نہیں ملی کوئی براؤزر نہیں ملا ایک مسئلہ کھولیں - لاگز پڑھیں (خودکار) پن غلط ہے پن کامیابی کے ساتھ بن گیا پن بنائیں - پنگ فیل پر دوبارہ شروع کریں (بی ٹا) بنیادی ٹنل کے طور پر سیٹ کریں جنک پیکٹ کی تعداد اِنِٹ پیکٹ جنک سائز @@ -88,12 +85,10 @@ خودکار ٹنل چلائیں پروجیکٹ کے لیے عطیہ کریں مقامی لاگنگ - مقامی لاگنگ فعال کریں بغیر انٹرنیٹ پر روکیں انٹرنیٹ لاس پر ٹنل روکیں لین ٹریفک کی اجازت دیں سپلٹ ٹنلنگ - ٹنل کی مخصوص ترتیبات اسکرپٹس دکھائیں پری اپ پوسٹ اپ @@ -118,7 +113,6 @@ مسلسل زندہ ایمنیزیا مطابقت ہٹائیں روشن - بطور ایتھرنیٹ ٹنل کے سیٹ کریں ایپ ترتیبات لانچ کریں ریاستی تبدیلیوں کی نگرانی پن درج کریں @@ -126,11 +120,9 @@ ہینڈشیک رسپانس پیکٹ میجک ہیڈر اگر آپ کو یقین نہیں کہ کیسے آگے بڑھیں - وائی فائی نام پر ٹنل استعمال کریں وائی فائی کی معلومات حاصل کرنے کے لیے روٹ شیل کا استعمال کریں، مقام کی اجازت کی ضرورت کو روکتے ہوئے رسپانس پیکٹ جنک سائز جنک پیکٹ کا کم از کم سائز - موبائل ڈیٹا ٹنل کے طور پر سیٹ کریں ٹنل میں ترمیم کریں ایپ لاک فعال کریں لاگز @@ -180,7 +172,6 @@ کیمرے کی اجازت درکار ہے برآمد ناکام ٹنل اس کے ساتھ ناکام ہوگئی: %1$s - فعال: %1$s غلط ترتیب ڈی این ایس ریزولوشن ناکام غیر مجاز @@ -209,7 +200,6 @@ آپ پہلے ہی تازہ ترین ورژن چلا رہے ہیں۔ بہت گہرا ایمولیڈ - سیکیورٹی: %1$s اس قسم کی تعمیر کے لیے تازہ کاری معائنہ تعاون یافتہ نہیں ہے۔ ذائقہ: %1$s کیو آر دکھائیں @@ -255,9 +245,6 @@ ٹنل پنگ ٹائم آؤٹ تمام کوششوں کے لیے کل ٹائم آؤٹ پِنگ کے تفصیلی اعدادوشمار دکھائیں - پِنگ ٹنل مانیٹرنگ کو فعال کریں - آر ایکس: %1$s ایم بی - ٹی ایکس: %1$s ایم بی قابل رسائی: %1$s آخری کامیاب پِنگ: %1$s %1$s سیکنڈ پہلے @@ -303,7 +290,6 @@ کوما الگ شدہ سرور:پورٹ نئی ٹنل - سسٹم کی خصوصیات ڈیٹا پڑھنے میں ناکام۔ غلط کلید غلط نمبر diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index a2ab7763..f2885b33 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -56,12 +56,10 @@ 自动隧道服务 删除隧道 确定删除这个隧道吗? - 此应用不会在您的设备上检测任何已开启的定位服务。根据不同的设备,可能会导致无法获得不可信 WiFi 的名称。您想继续吗? 全部 未安装邮件应用 锁定应用 - 在指定的 WiFi 上使用此隧道 设置 支持 内核 @@ -74,20 +72,17 @@ WG Tunnel VPN 通知频道 查看问题 - 查看日志 (自动) 创建密码成功 输入 PIN 码 创建 PIN 码 设置为主隧道 - 允许使用数据流量 初始化无效包大小 无效包最大值 响应包的 magic header 无效的响应包大小 拒绝访问 日志 - Ping 失败之后自动重启隧道(beta) 编辑隧道 初始化数据包的 magic header VPN 连接被拒绝,请检查 @@ -127,14 +122,12 @@ 隧道运行中 捐赠 日志 - 开启本地日志 无网络时停用 网络丢失时停止隧道 绕过局域网流量 自动隧道通知频道 自动隧道状态通知频道 停止 - 隧道特殊设置 隧道分流 显示脚本 启动前 @@ -153,7 +146,6 @@ 隧道控制 自动隧道 以太网隧道 - 设置为以太网隧道 系统 VPN 开关 允许局域网流量 VPN 状态通知频道 @@ -186,7 +178,6 @@ 隧道启动中 开启远程应用控制 加入 Matrix 社区 - 活跃:%1$s 控制隧道和自动隧道功能. WG 隧道控制桥 不活跃 @@ -209,7 +200,6 @@ 允许 更新检查不支持此构建类型。 版本架构:%1$s - 安全性:%1$s 颜色更深 AMOLED 显示二维码 @@ -255,9 +245,6 @@ 隧道 ping 超时 所有 ping 尝试的总超时 展示详细的 ping 数据 - 启用隧道 ping 监控 - 已接受:%1$s MB - 已传输:%1$s MB 可抵达:%1$s 上次成功的 ping 操作:%1$s %1$s 秒前 @@ -303,7 +290,6 @@ 英文逗号分隔 服务器:端口 新隧道 - 系统特性 读取数据失败。 无效密钥 无效数字 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index f9dbcb30..004e8f1e 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -82,9 +82,7 @@ 未安裝任何檔案管理器 如果您不確定如何進行 請參閱 - 查看日誌 日誌 - 啟用本地日誌記錄 給作者寄電子郵件 允許永久連線的 VPN VPN 已開啟 @@ -121,12 +119,10 @@ 多個 將隧道匯出為 Amnezia 將隧道匯出為 WireGuard - 使用中: %1$s 未使用 信任的 WiFi SSID 自動隧道管理 自動隧道管理服務 - Ping 失敗後重新啟動隧道 (beta) 全選 開始自動隧道管理 自動隧道管理 @@ -138,7 +134,6 @@ 監控狀態變化 透過 root 權限取得 Wi-Fi 資訊,避免需要位置存取權 隧道拆分 - 隧道個別設定 SSID 使用萬用字元 允許 檢查更新 @@ -185,7 +180,6 @@ 無效組態 金鑰: %1$s 風格: %1$s - 安全性: %1$s Amnezia WireGuard 完成 @@ -209,8 +203,6 @@ 排序 延遲: %1$s 抖動: %1$s - 已傳輸: %1$s MB - 已接收: %1$s MB 警告 IP 或主機名稱 %1$s 秒前 @@ -239,7 +231,6 @@ Ping 目標: %1$s 可抵達: %1$s 隧道監控 - 啟用隧道 ping 監控 隧道 ping 逾時 隧道 ping 間隔 每一間隔的 ping 嘗試次數 @@ -255,10 +246,7 @@ 乙太網路上的隧道 背景定位披露 不受信任 Wi-Fi 上的隧道 - 設為行動數據隧道 - 在指定 Wi-Fi 名稱上使用隧道 行動數據隧道 略過 乙太網路隧道 - 設為乙太網路隧道 - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c0e2217c..43d6c221 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -70,7 +70,6 @@ SSID already exists Root shell denied No file explorer installed - The app is not detecting any location services enabled on your device. Depending on the device, this could cause the untrusted wifi feature to fail to read the wifi name. Would you like to continue anyways? Auto-tunnel service Delete tunnel Are you sure you would like to delete the selected tunnels? @@ -79,17 +78,13 @@ No email app detected No browser detected Open an issue - Read the logs (Auto) Pin is incorrect Pin successfully created Enter PIN Create PIN Enable app lock - Restart on ping fail (beta) - Set as mobile data tunnel Tunnel used when no preferred tunnel is configured - Use tunnel on wifi name Edit tunnel Settings Support @@ -140,12 +135,10 @@ Monitoring state changes Donate to project Local logs monitor - Enable local logging Add from clipboard Stop on no internet Stop tunnel on internet loss Ethernet tunnel - Set as ethernet tunnel Native kill switch Allow LAN traffic Bypass LAN for kill switch @@ -155,7 +148,6 @@ A channel for auto-tunnel state notifications Stop Split tunneling - Tunnel specific settings Show scripts Pre up Post up @@ -192,10 +184,8 @@ Camera permission required Export failed Tunnel failed with: %1$s - Active: %1$s Key: %1$s Version: %1$s - Security: %1$s Current: %1$s Flavor: %1$s %1$s (experimental) @@ -280,9 +270,6 @@ Tunnel ping timeout Total timeout for all attempts Display detailed ping stats - Enable ping tunnel monitoring - "RX: %1$s MB" - "TX: %1$s MB" Reachable: %1$s Last successful ping: %1$s %1$s seconds ago @@ -324,7 +311,6 @@ Comma separated Server:Port New tunnel - System features Failed to read data. Invalid key Invalid number @@ -411,4 +397,12 @@ Backup and restore Ping target Set ping target + Mobile data + Ethernet + Unknown + No network connected + Active Network:  + Security:  + Network:  + Wi-Fi diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml index 7dc5111e..081b2ed6 100644 --- a/app/src/main/res/xml/file_paths.xml +++ b/app/src/main/res/xml/file_paths.xml @@ -1,5 +1,5 @@ - + diff --git a/logcatter/src/main/java/com/zaneschepke/logcatter/LogcatManager.kt b/logcatter/src/main/java/com/zaneschepke/logcatter/LogcatManager.kt index a0b39e9b..13b4112c 100644 --- a/logcatter/src/main/java/com/zaneschepke/logcatter/LogcatManager.kt +++ b/logcatter/src/main/java/com/zaneschepke/logcatter/LogcatManager.kt @@ -1,6 +1,5 @@ package com.zaneschepke.logcatter -import android.R.attr.path import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner import com.zaneschepke.logcatter.model.LogMessage