From 44d195a4a5c63f2b74b375562f0f5c0299cf3695 Mon Sep 17 00:00:00 2001 From: andrekir Date: Thu, 28 Nov 2024 08:42:49 -0300 Subject: [PATCH] refactor: `Messages` navigation to single `contactKey` argument --- .../java/com/geeksville/mesh/MainActivity.kt | 10 ++--- .../mesh/service/MeshServiceNotifications.kt | 7 +--- .../geeksville/mesh/ui/ContactsFragment.kt | 2 +- .../geeksville/mesh/ui/MessagesFragment.kt | 38 +++++++++---------- .../com/geeksville/mesh/ui/UsersFragment.kt | 2 +- 5 files changed, 25 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/MainActivity.kt b/app/src/main/java/com/geeksville/mesh/MainActivity.kt index 73332043..6e76c108 100644 --- a/app/src/main/java/com/geeksville/mesh/MainActivity.kt +++ b/app/src/main/java/com/geeksville/mesh/MainActivity.kt @@ -327,9 +327,7 @@ class MainActivity : AppCompatActivity(), Logging { MeshServiceNotifications.OPEN_MESSAGE_ACTION -> { val contactKey = intent.getStringExtra(MeshServiceNotifications.OPEN_MESSAGE_EXTRA_CONTACT_KEY) - val contactName = - intent.getStringExtra(MeshServiceNotifications.OPEN_MESSAGE_EXTRA_CONTACT_NAME) - showMessages(contactKey, contactName) + showMessages(contactKey) } UsbManager.ACTION_USB_DEVICE_ATTACHED -> { @@ -602,10 +600,10 @@ class MainActivity : AppCompatActivity(), Logging { binding.pager.currentItem = 5 } - private fun showMessages(contactKey: String?, contactName: String?) { + private fun showMessages(contactKey: String?) { model.setCurrentTab(0) - if (contactKey != null && contactName != null) { - supportFragmentManager.navigateToMessages(contactKey, contactName) + if (contactKey != null) { + supportFragmentManager.navigateToMessages(contactKey) } } diff --git a/app/src/main/java/com/geeksville/mesh/service/MeshServiceNotifications.kt b/app/src/main/java/com/geeksville/mesh/service/MeshServiceNotifications.kt index 713c83ec..554ad026 100644 --- a/app/src/main/java/com/geeksville/mesh/service/MeshServiceNotifications.kt +++ b/app/src/main/java/com/geeksville/mesh/service/MeshServiceNotifications.kt @@ -46,8 +46,6 @@ class MeshServiceNotifications( private const val FIFTEEN_MINUTES_IN_MILLIS = 15L * 60 * 1000 const val OPEN_MESSAGE_ACTION = "com.geeksville.mesh.OPEN_MESSAGE_ACTION" const val OPEN_MESSAGE_EXTRA_CONTACT_KEY = "com.geeksville.mesh.OPEN_MESSAGE_EXTRA_CONTACT_KEY" - const val OPEN_MESSAGE_EXTRA_CONTACT_NAME = - "com.geeksville.mesh.OPEN_MESSAGE_EXTRA_CONTACT_NAME" } private val notificationManager: NotificationManager get() = context.notificationManager @@ -197,11 +195,10 @@ class MeshServiceNotifications( ) } - private fun openMessageIntent(contactKey: String, contactName: String): PendingIntent { + private fun openMessageIntent(contactKey: String): PendingIntent { val intent = Intent(context, MainActivity::class.java) intent.action = OPEN_MESSAGE_ACTION intent.putExtra(OPEN_MESSAGE_EXTRA_CONTACT_KEY, contactKey) - intent.putExtra(OPEN_MESSAGE_EXTRA_CONTACT_NAME, contactName) val pendingIntent = PendingIntent.getActivity( context, @@ -277,7 +274,7 @@ class MeshServiceNotifications( } val person = Person.Builder().setName(name).build() with(messageNotificationBuilder) { - setContentIntent(openMessageIntent(contactKey, name)) + setContentIntent(openMessageIntent(contactKey)) priority = NotificationCompat.PRIORITY_DEFAULT setCategory(Notification.CATEGORY_MESSAGE) setAutoCancel(true) 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 33106158..734f93b7 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt @@ -70,7 +70,7 @@ class ContactsFragment : ScreenFragment("Messages"), Logging { onLongClick(contact) } else { debug("calling MessagesFragment filter:${contact.contactKey}") - parentFragmentManager.navigateToMessages(contact.contactKey, contact.longName) + parentFragmentManager.navigateToMessages(contact.contactKey) } } 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 fed73bd9..8ca7e22a 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt @@ -34,14 +34,12 @@ import androidx.core.view.allViews import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.fragment.app.activityViewModels -import androidx.lifecycle.Lifecycle 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.android.Logging import com.geeksville.mesh.database.entity.QuickChatAction import com.geeksville.mesh.databinding.MessagesFragmentBinding import com.geeksville.mesh.model.Message @@ -54,9 +52,9 @@ import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.launch -internal fun FragmentManager.navigateToMessages(contactKey: String, contactName: String) { +internal fun FragmentManager.navigateToMessages(contactKey: String) { val messagesFragment = MessagesFragment().apply { - arguments = bundleOf("contactKey" to contactKey, "contactName" to contactName) + arguments = bundleOf("contactKey" to contactKey) } beginTransaction() .add(R.id.mainActivityLayout, messagesFragment) @@ -125,22 +123,20 @@ class MessagesFragment : Fragment(), Logging { } contactKey = arguments?.getString("contactKey").toString() - val contactName = arguments?.getString("contactName").toString() - binding.toolbar.title = contactName - 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) { - model.channels.collect { channels -> - val channelName = - channels.getChannel(channelNumber)?.name ?: "Unknown Channel" - val subtitle = "(ch: $channelNumber - $channelName)" - binding.toolbar.subtitle = subtitle - } - } - } + val channelIndex = contactKey[0].digitToIntOrNull() + val nodeId = contactKey.substring(1) + val channelName = channelIndex?.let { model.channels.value.getChannel(it)?.name } + ?: "Unknown Channel" + + binding.toolbar.title = when (nodeId) { + DataPacket.ID_BROADCAST -> channelName + else -> model.getUser(nodeId).longName + } + + if (channelIndex == DataPacket.PKC_CHANNEL_INDEX) { + binding.toolbar.title = "${binding.toolbar.title}đź”’" + } else if (nodeId != DataPacket.ID_BROADCAST) { + binding.toolbar.subtitle = "(ch: $channelIndex - $channelName)" } fun sendMessageInputText() { 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 dba92f0f..e7c58ea9 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt @@ -58,7 +58,7 @@ class UsersFragment : ScreenFragment("Users"), Logging { val channel = if (hasPKC) DataPacket.PKC_CHANNEL_INDEX else node.channel val contactKey = "$channel${user.id}" info("calling MessagesFragment filter: $contactKey") - parentFragmentManager.navigateToMessages(contactKey, user.longName) + parentFragmentManager.navigateToMessages(contactKey) } private fun navigateToNodeDetails(nodeNum: Int) {