diff --git a/app/src/main/java/chat/vojo/proxy/ui/ConnectionScreen.kt b/app/src/main/java/chat/vojo/proxy/ui/ConnectionScreen.kt
index f07b7de..32dc334 100644
--- a/app/src/main/java/chat/vojo/proxy/ui/ConnectionScreen.kt
+++ b/app/src/main/java/chat/vojo/proxy/ui/ConnectionScreen.kt
@@ -54,6 +54,7 @@ import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.graphics.StrokeJoin
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.graphics.graphicsLayer
+import androidx.compose.ui.res.pluralStringResource
import androidx.compose.ui.res.stringArrayResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
@@ -66,6 +67,7 @@ import chat.vojo.proxy.R
import chat.vojo.proxy.core.AppSettings
import chat.vojo.proxy.core.ProxyConfig
import chat.vojo.proxy.core.ProxyType
+import chat.vojo.proxy.core.RoutingMode
import chat.vojo.proxy.core.formatClock
import chat.vojo.proxy.core.formatRate
import chat.vojo.proxy.service.VpnState
@@ -136,6 +138,11 @@ fun ConnectionScreen(
onDisconnect = onDisconnect,
)
+ if (activeConfig != null) {
+ Spacer(Modifier.height(10.dp))
+ RoutingScopeLine(settings, Modifier.padding(start = 4.dp))
+ }
+
val stale = connected && applied != null &&
(applied.configId != activeConfig?.id || applied.settings != settings)
if (stale) {
@@ -302,6 +309,28 @@ private fun ConnToggle(
}
}
+/**
+ * Subtle line under the server card stating what the proxy actually carries — so the
+ * "Сайты" split is never invisible (an empty list is now a full tunnel; a non-empty list
+ * shows how much is proxied vs direct).
+ */
+@Composable
+private fun RoutingScopeLine(settings: AppSettings, modifier: Modifier = Modifier) {
+ val n = settings.routedSites.size
+ val text = when {
+ n == 0 -> stringResource(R.string.route_scope_all)
+ settings.routingMode == RoutingMode.DIRECT_ALL ->
+ stringResource(R.string.route_scope_only, pluralStringResource(R.plurals.route_rules, n, n))
+ else ->
+ stringResource(R.string.route_scope_except, pluralStringResource(R.plurals.route_rules, n, n))
+ }
+ Row(modifier, verticalAlignment = Alignment.CenterVertically) {
+ Box(Modifier.size(5.dp).clip(CircleShape).background(Vojo.fleetSoft.copy(alpha = 0.55f)))
+ Spacer(Modifier.width(8.dp))
+ Text(text, color = Vojo.muted, fontSize = 12.5.sp, maxLines = 1, overflow = TextOverflow.Ellipsis)
+ }
+}
+
@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun ServerPickerSheet(
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index a3a51a3..b3859a1 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -47,6 +47,10 @@
Пик
/с
+
+ Весь трафик через прокси
+ Через прокси: %1$s
+ Через прокси, кроме %1$s
Добавить сервер
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 4f746ed..91f7166 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -54,6 +54,10 @@
Peak
/s
+
+ All traffic through the proxy
+ Through the proxy: %1$s
+ Through the proxy, except %1$s
Add server