From 9227ce3ba5ac68dc9491afd575d6cba4ffd51299 Mon Sep 17 00:00:00 2001 From: andrekir Date: Fri, 22 Apr 2022 16:56:27 -0300 Subject: [PATCH] improve users fragment --- .../geeksville/mesh/model/MessagesState.kt | 5 ---- .../geeksville/mesh/ui/ContactsFragment.kt | 4 ++++ .../com/geeksville/mesh/ui/UsersFragment.kt | 24 ++++++++++++++++--- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/model/MessagesState.kt b/app/src/main/java/com/geeksville/mesh/model/MessagesState.kt index 8da1e3c94..5ec87d59a 100644 --- a/app/src/main/java/com/geeksville/mesh/model/MessagesState.kt +++ b/app/src/main/java/com/geeksville/mesh/model/MessagesState.kt @@ -51,11 +51,6 @@ class MessagesState(private val ui: UIViewModel) : Logging { if (contactsList[all] == null) contactsList[all] = emptyDataPacket() - val nodes = ui.nodeDB.nodes.value!! - nodes.keys.forEachIndexed { index, node -> - if (index != 0 && contactsList[node] == null) - contactsList[node] = emptyDataPacket(node) - } contacts.value = contactsList } 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 d6f732b4f..8da8a0906 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt @@ -204,6 +204,10 @@ class ContactsFragment : ScreenFragment("Messages"), Logging { contactsAdapter.onChannelsChanged() } + model.nodeDB.nodes.observe(viewLifecycleOwner) { + contactsAdapter.notifyDataSetChanged() + } + model.messagesState.contacts.observe(viewLifecycleOwner) { debug("New contacts received: ${it.size}") contactsAdapter.onContactsChanged(it.values) diff --git a/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt index 815054268..c35ba3384 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt @@ -6,8 +6,10 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.content.ContextCompat +import androidx.core.os.bundleOf import androidx.core.text.HtmlCompat import androidx.fragment.app.activityViewModels +import androidx.fragment.app.setFragmentResult import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.geeksville.android.Logging @@ -161,13 +163,29 @@ class UsersFragment : ScreenFragment("Users"), Logging { holder.signalView.visibility = View.INVISIBLE } } + holder.itemView.setOnLongClickListener { + if (position > 0) { + debug("calling MessagesFragment filter:${n.user?.id}") + setFragmentResult( + "requestKey", + bundleOf("contactId" to n.user?.id, "contactName" to name) + ) + parentFragmentManager.beginTransaction() + .replace(R.id.mainActivityLayout, MessagesFragment()) + .addToBackStack(null) + .commit() + } + true + } } private var nodes = arrayOf() /// Called when our node DB changes - fun onNodesChanged(nodesIn: Collection) { - nodes = nodesIn.toTypedArray() + fun onNodesChanged(nodesIn: Array) { + if (nodesIn.size > 1) + nodesIn.sortWith(compareByDescending { it.lastHeard }, 1) + nodes = nodesIn notifyDataSetChanged() // FIXME, this is super expensive and redraws all nodes } } @@ -211,7 +229,7 @@ class UsersFragment : ScreenFragment("Users"), Logging { binding.nodeListView.layoutManager = LinearLayoutManager(requireContext()) model.nodeDB.nodes.observe(viewLifecycleOwner) { - nodesAdapter.onNodesChanged(it.values) + nodesAdapter.onNodesChanged(it.values.toTypedArray()) } } }