From a9f9be098139457eb28061924fd72bfd23543b1f Mon Sep 17 00:00:00 2001 From: andrekir Date: Fri, 16 Sep 2022 18:03:00 -0300 Subject: [PATCH] add placeholders for broadcast channels --- .../geeksville/mesh/ui/ContactsFragment.kt | 35 +++++++------------ 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt index 894ef00c..199f7a81 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt @@ -170,17 +170,22 @@ class ContactsFragment : ScreenFragment("Messages"), Logging { notifyItemChanged(position) } - /// Called when our contacts DB changes - fun onContactsChanged(contacts: Collection) { - this.contacts = contacts.sortedByDescending { it.received_time }.toTypedArray() + fun onContactsChanged(contacts: Map) { + // Add empty channel placeholders (always show Broadcast contacts, even when empty) + val mutableMap = contacts.toMutableMap() + for (ch in 0 until model.channels.value.protobuf.settingsCount) { + val contactKey = "$ch${DataPacket.ID_BROADCAST}" + if (mutableMap[contactKey] == null) mutableMap[contactKey] = Packet( + 0L, 1, contactKey, 0L, + DataPacket(bytes = null, dataType = 1, time = 0L, channel = ch) + ) + } + this.contacts = mutableMap.values.sortedByDescending { it.received_time }.toTypedArray() notifyDataSetChanged() // FIXME, this is super expensive and redraws all nodes } fun onChannelsChanged() { - val oldBroadcast = contacts.find { it.contact_key == DataPacket.ID_BROADCAST } - if (oldBroadcast != null) { - notifyItemChanged(contacts.indexOf(oldBroadcast)) - } + onContactsChanged(contacts.associateBy { it.contact_key }) } } @@ -213,21 +218,7 @@ class ContactsFragment : ScreenFragment("Messages"), Logging { model.contacts.observe(viewLifecycleOwner) { debug("New contacts received: ${it.size}") - fun emptyDataPacket(channel: Int = 0): DataPacket { - return DataPacket(bytes = null, dataType = 1, time = 0L, channel = channel) - } - - fun emptyPacket(contactKey: String, channel: Int = 0): Packet { - return Packet(0L, 1, contactKey, 0L, emptyDataPacket(channel)) - } - - // Add empty channel placeholders - val mutableContacts = it.toMutableMap() - val all = DataPacket.ID_BROADCAST // always show Broadcast contacts, even when empty - for (ch in 0 until model.channels.value.protobuf.settingsCount) - if (it["$ch$all"] == null) mutableContacts["$ch$all"] = emptyPacket("$ch$all", ch) - - contactsAdapter.onContactsChanged(mutableContacts.values) + contactsAdapter.onContactsChanged(it) } }