From 2433cbc00a2f5aaadd8af7d7daa3ba7cf59c70e7 Mon Sep 17 00:00:00 2001 From: andrekir Date: Mon, 16 Sep 2024 10:28:42 -0300 Subject: [PATCH] feat: show names with a lock for DMs using PKC --- app/src/main/java/com/geeksville/mesh/DataPacket.kt | 3 +++ .../main/java/com/geeksville/mesh/service/MeshService.kt | 2 +- .../main/java/com/geeksville/mesh/ui/MessagesFragment.kt | 7 +++++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/DataPacket.kt b/app/src/main/java/com/geeksville/mesh/DataPacket.kt index 24d380c0..b4a90780 100644 --- a/app/src/main/java/com/geeksville/mesh/DataPacket.kt +++ b/app/src/main/java/com/geeksville/mesh/DataPacket.kt @@ -167,6 +167,9 @@ data class DataPacket( /// special broadcast address const val NODENUM_BROADCAST = (0xffffffff).toInt() + // Public-key cryptography (PKC) channel index + const val PKC_CHANNEL_INDEX = 8 + fun nodeNumToDefaultId(n: Int): String = "!%08x".format(n) fun idToDefaultNodeNum(id: String?): Int? = id?.toLong(16)?.toInt() diff --git a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt index a41bdba1..059bcf21 100644 --- a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt +++ b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt @@ -533,7 +533,7 @@ class MeshService : Service(), Logging { dataType = data.portnumValue, bytes = data.payload.toByteArray(), hopLimit = packet.hopLimit, - channel = packet.channel, + channel = if (packet.pkiEncrypted) DataPacket.PKC_CHANNEL_INDEX else packet.channel, ) } } diff --git a/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt index 46d2ad6e..17ce1a18 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt @@ -22,6 +22,7 @@ import androidx.lifecycle.asLiveData import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle +import com.geeksville.mesh.DataPacket import com.geeksville.mesh.android.Logging import com.geeksville.mesh.R import com.geeksville.mesh.database.entity.QuickChatAction @@ -121,10 +122,12 @@ class MessagesFragment : Fragment(), Logging { contactKey = arguments?.getString("contactKey").toString() val contactName = arguments?.getString("contactName").toString() binding.toolbar.title = contactName - if (contactKey[1] == '!') { + val channelNumber = contactKey[0].digitToIntOrNull() + if (channelNumber == DataPacket.PKC_CHANNEL_INDEX) { + binding.toolbar.title = "$contactNameđź”’" + } else if (channelNumber != null && contactKey.substring(1) != DataPacket.ID_BROADCAST) { lifecycleScope.launch { repeatOnLifecycle(Lifecycle.State.STARTED) { - val channelNumber = contactKey[0].digitToInt() model.channels.collect { channels -> val channelName = channels.getChannel(channelNumber)?.name ?: "Unknown Channel"