From 67e09adc6e92b5c6c1c5f093b35e7875f4cff322 Mon Sep 17 00:00:00 2001 From: Jordan Whited Date: Mon, 3 Nov 2025 12:52:47 -0800 Subject: [PATCH] android: make ping peer relay aware Updates tailscale/tailscale#17743 Signed-off-by: Jordan Whited --- .../src/main/java/com/tailscale/ipn/ui/model/IpnState.kt | 1 + .../main/java/com/tailscale/ipn/ui/util/ConnectionMode.kt | 6 ++++++ .../java/com/tailscale/ipn/ui/viewModel/PingViewModel.kt | 3 +++ android/src/main/res/values/strings.xml | 1 + 4 files changed, 11 insertions(+) diff --git a/android/src/main/java/com/tailscale/ipn/ui/model/IpnState.kt b/android/src/main/java/com/tailscale/ipn/ui/model/IpnState.kt index 5c6ac0e5e4..9922b35e1a 100644 --- a/android/src/main/java/com/tailscale/ipn/ui/model/IpnState.kt +++ b/android/src/main/java/com/tailscale/ipn/ui/model/IpnState.kt @@ -26,6 +26,7 @@ class IpnState { val Addrs: List? = null, val CurAddr: String? = null, val Relay: String? = null, + val PeerRelay: String? = null, val Online: Boolean, val ExitNode: Boolean, val ExitNodeOption: Boolean, diff --git a/android/src/main/java/com/tailscale/ipn/ui/util/ConnectionMode.kt b/android/src/main/java/com/tailscale/ipn/ui/util/ConnectionMode.kt index eb36ea1721..7a051a2e5b 100644 --- a/android/src/main/java/com/tailscale/ipn/ui/util/ConnectionMode.kt +++ b/android/src/main/java/com/tailscale/ipn/ui/util/ConnectionMode.kt @@ -17,12 +17,15 @@ sealed class ConnectionMode { class Direct : ConnectionMode() + class PeerRelay : ConnectionMode() + @Composable fun titleString(): String { return when (this) { is NotConnected -> stringResource(id = R.string.not_connected) is Derp -> stringResource(R.string.relayed_connection, relayName) is Direct -> stringResource(R.string.direct_connection) + is PeerRelay -> stringResource(R.string.peer_relayed_connection) } } @@ -31,6 +34,7 @@ sealed class ConnectionMode { is NotConnected -> "NotConnected" is Derp -> "Derp($relayName)" is Direct -> "Direct" + is PeerRelay -> "PeerRelay" } } @@ -39,6 +43,7 @@ sealed class ConnectionMode { is NotConnected -> R.drawable.xmark_circle is Derp -> R.drawable.link_off is Direct -> R.drawable.link + is PeerRelay -> R.drawable.link_off } } @@ -48,6 +53,7 @@ sealed class ConnectionMode { is NotConnected -> MaterialTheme.colorScheme.onPrimary is Derp -> MaterialTheme.colorScheme.error is Direct -> MaterialTheme.colorScheme.on + is PeerRelay -> MaterialTheme.colorScheme.on } } } diff --git a/android/src/main/java/com/tailscale/ipn/ui/viewModel/PingViewModel.kt b/android/src/main/java/com/tailscale/ipn/ui/viewModel/PingViewModel.kt index eedd3d0592..79c1f7b8ab 100644 --- a/android/src/main/java/com/tailscale/ipn/ui/viewModel/PingViewModel.kt +++ b/android/src/main/java/com/tailscale/ipn/ui/viewModel/PingViewModel.kt @@ -116,9 +116,12 @@ class PingViewModel : ViewModel() { result.Peer?.let { map -> map[peer.value?.Key]?.let { peerStatus -> val curAddr = peerStatus.CurAddr.orEmpty() + val peerRelay = peerStatus.PeerRelay.orEmpty() val relay = peerStatus.Relay.orEmpty() if (curAddr.isNotEmpty()) { this.connectionMode.set(ConnectionMode.Direct()) + } else if (peerRelay.isNotEmpty()) { + this.connectionMode.set(ConnectionMode.PeerRelay()) } else if (relay.isNotEmpty()) { this.connectionMode.set(ConnectionMode.Derp(relayName = relay.uppercase())) } diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml index 001774ae19..3e3db0512c 100644 --- a/android/src/main/res/values/strings.xml +++ b/android/src/main/res/values/strings.xml @@ -303,6 +303,7 @@ Ping Relayed connection (%1$s) Direct connection + Peer relayed connection Pinging %1$s Ping failed An unknown error occurred. Please try again.