From 265c6a7bf7f5000fe1ed2693e83a34e3011daeff Mon Sep 17 00:00:00 2001 From: andrekir Date: Sat, 30 Apr 2022 18:16:12 -0300 Subject: [PATCH] improve users fragment --- .../geeksville/mesh/model/MessagesState.kt | 5 ---- .../geeksville/mesh/ui/ContactsFragment.kt | 4 +++ .../com/geeksville/mesh/ui/UsersFragment.kt | 28 +++++++++++++++---- 3 files changed, 27 insertions(+), 10 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 470ce8a5e..84a1d8764 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 5a33898eb..d6843439f 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt @@ -342,6 +342,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 2e93c72e8..6c1893e00 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt @@ -7,8 +7,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 @@ -165,13 +167,29 @@ class UsersFragment : ScreenFragment("Users"), Logging { holder.signalView.visibility = View.VISIBLE } } + 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 } } @@ -210,9 +228,9 @@ class UsersFragment : ScreenFragment("Users"), Logging { binding.nodeListView.adapter = nodesAdapter binding.nodeListView.layoutManager = LinearLayoutManager(requireContext()) - model.nodeDB.nodes.observe(viewLifecycleOwner, { - nodesAdapter.onNodesChanged(it.values) - }) + model.nodeDB.nodes.observe(viewLifecycleOwner) { + nodesAdapter.onNodesChanged(it.values.toTypedArray()) + } } }