feat(android): show NAT profile and external address for own sockets

This commit is contained in:
evgeny committed 2026-10-17 22:07:58 +02:00
1 parent 1dfe349eb8
commit 86c08092af
3 files changed
+25

No files matched your search

@@ -0,0 +1,21 @@
package com.utun.chat.ui.components
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import com.utun.chat.R
import com.utun.chat.data.LocalSocketState
/** Результат детектора для рабочего сокета; порт TCP остаётся нулевым. */
@Composable
fun LocalSocketNatInfo(socket: LocalSocketState) {
val source = if (socket.natSource == 2) " · STUN" else ""
Text(stringResource(socket.natLabelRes) + source,
style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurfaceVariant)
if (socket.externalIp.isNotEmpty()) {
val ip = if (socket.externalIp.contains(':')) "[${socket.externalIp}]" else socket.externalIp
Text(stringResource(R.string.socket_external_address, "$ip:${socket.externalPort}"),
style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurfaceVariant)
}
}
@@ -47,6 +47,7 @@ import com.utun.chat.data.MemberDetail
import com.utun.chat.data.MemberLinks
import com.utun.chat.data.LinkStatus
import com.utun.chat.data.LocalSocketState
import com.utun.chat.ui.components.LocalSocketNatInfo
import com.utun.chat.ui.components.PortableRadioIcon
import com.utun.chat.ui.components.RadioSpeakerIcon
import com.utun.chat.viewmodel.ChatViewModel
@@ -427,6 +428,7 @@ private fun MemberDetailCard(
color = MaterialTheme.colorScheme.onSurface
)
}
LocalSocketNatInfo(sk)
}
}
} else {
@@ -41,6 +41,7 @@ import com.utun.chat.data.MicrophonePermission
import com.utun.chat.data.LogManager
import com.utun.chat.data.ServerEntry
import com.utun.chat.data.LocalSocketState
import com.utun.chat.ui.components.LocalSocketNatInfo
import com.utun.chat.data.VoiceSettings
import com.utun.chat.headless.HeadlessService
import com.utun.chat.ui.components.BatteryOptimizationSetting
@@ -380,6 +381,7 @@ private fun DeveloperSettingsTab(vm: ChatViewModel, onDirty: (Boolean) -> Unit,
}
Text(s.ifName, style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.fillMaxWidth())
LocalSocketNatInfo(s)
}
}
}