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