diff --git a/android/src/main/java/com/tailscale/ipn/ui/model/TailCfg.kt b/android/src/main/java/com/tailscale/ipn/ui/model/TailCfg.kt index 778c59f..6f6cc81 100644 --- a/android/src/main/java/com/tailscale/ipn/ui/model/TailCfg.kt +++ b/android/src/main/java/com/tailscale/ipn/ui/model/TailCfg.kt @@ -101,6 +101,8 @@ class Tailcfg { val displayName: String get() = ComputedName ?: Name + fun isSelfNode(netmap: Netmap.NetworkMap): Boolean = StableID == netmap.SelfNode.StableID + fun connectedOrSelfNode(nm: Netmap.NetworkMap?) = Online == true || StableID == nm?.SelfNode?.StableID diff --git a/android/src/main/java/com/tailscale/ipn/ui/util/PeerHelper.kt b/android/src/main/java/com/tailscale/ipn/ui/util/PeerHelper.kt index 7b279d2..f85729f 100644 --- a/android/src/main/java/com/tailscale/ipn/ui/util/PeerHelper.kt +++ b/android/src/main/java/com/tailscale/ipn/ui/util/PeerHelper.kt @@ -39,7 +39,18 @@ class PeerCategorizer { grouped .map { (userId, peers) -> val profile = netmap.userProfile(userId) - PeerSet(profile, peers.sortedBy { it.ComputedName }) + PeerSet( + profile, + peers.sortedWith { a, b -> + when { + a.StableID == b.StableID -> 0 + a.isSelfNode(netmap) -> -1 + b.isSelfNode(netmap) -> 1 + else -> + (a.ComputedName?.lowercase() ?: "").compareTo( + b.ComputedName?.lowercase() ?: "") + } + }) } .sortedBy { if (it.user?.ID == me?.ID) {