From 8dad5a085ede3ee4f7dde76856447d493e741dbd Mon Sep 17 00:00:00 2001
From: James Rich <2199651+jamesarich@users.noreply.github.com>
Date: Sat, 13 Jul 2024 05:25:22 -0500
Subject: [PATCH] Feat: Show channel number and name in direct message title
(#1131)
* Feat: Show channel number and name in direct message title
This commit updates the message title to include the channel number and name when viewing direct messages.
This improves the user experience by providing more context about the conversation.
* Refactor: Improve message fragment toolbar
Use MaterialToolbar's built-in title and subtitle features to display channel name and number, simplifying the layout and improving UI consistency.
---
.../geeksville/mesh/ui/MessagesFragment.kt | 53 +++++++++++++++----
app/src/main/res/layout/messages_fragment.xml | 23 ++------
2 files changed, 48 insertions(+), 28 deletions(-)
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 83240803e..53cf72bcf 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt
@@ -4,8 +4,15 @@ import android.graphics.Color
import android.graphics.Rect
import android.graphics.drawable.GradientDrawable
import android.os.Bundle
-import android.view.*
-import android.widget.*
+import android.view.LayoutInflater
+import android.view.Menu
+import android.view.MenuItem
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.ImageView
+import android.widget.TextView
+import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.ActionMode
import androidx.cardview.widget.CardView
@@ -15,25 +22,30 @@ 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.lifecycleScope
+import androidx.lifecycle.repeatOnLifecycle
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
-import com.geeksville.mesh.android.Logging
import com.geeksville.mesh.DataPacket
import com.geeksville.mesh.MessageStatus
import com.geeksville.mesh.NodeInfo
import com.geeksville.mesh.R
+import com.geeksville.mesh.android.Logging
import com.geeksville.mesh.database.entity.Packet
import com.geeksville.mesh.database.entity.QuickChatAction
import com.geeksville.mesh.databinding.AdapterMessageLayoutBinding
import com.geeksville.mesh.databinding.MessagesFragmentBinding
import com.geeksville.mesh.model.UIViewModel
+import com.geeksville.mesh.model.getChannel
import com.geeksville.mesh.util.Utf8ByteLengthFilter
import com.google.android.material.chip.Chip
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.launch
import java.text.DateFormat
-import java.util.*
+import java.util.Date
// return time if within 24 hours, otherwise date/time
internal fun getShortDateTime(date: Date): String {
@@ -232,7 +244,12 @@ class MessagesFragment : Fragment(), Logging {
holder.itemView.background = GradientDrawable().apply {
shape = GradientDrawable.RECTANGLE
cornerRadius = 32f
- setColor(ContextCompat.getColor(holder.itemView.context, R.color.colorAdvancedBackground))
+ setColor(
+ ContextCompat.getColor(
+ holder.itemView.context,
+ R.color.colorAdvancedBackground
+ )
+ )
}
}
}
@@ -288,7 +305,21 @@ class MessagesFragment : Fragment(), Logging {
val contactKey = arguments?.getString("contactKey").toString()
val contactName = arguments?.getString("contactName").toString()
- binding.messageTitle.text = contactName
+ val title = contactName
+ binding.toolbar.title = title
+ if (contactKey[1] == '!') {
+ lifecycleScope.launch {
+ repeatOnLifecycle(Lifecycle.State.STARTED) {
+ val channelNumber = contactKey[0].digitToInt()
+ model.channels.collect { channels ->
+ val channelName =
+ channels.getChannel(channelNumber)?.name ?: "Unknown Channel"
+ val subtitle = "(ch: $channelNumber - $channelName)"
+ binding.toolbar.subtitle = subtitle
+ }
+ }
+ }
+ }
fun sendMessageInputText() {
val str = binding.messageInputText.text.toString().trim()
@@ -358,12 +389,14 @@ class MessagesFragment : Fragment(), Logging {
button.text = action.name
button.isEnabled = model.isConnected()
if (action.mode == QuickChatAction.Mode.Instant) {
- button.backgroundTintList = ContextCompat.getColorStateList(requireActivity(), R.color.colorMyMsg)
+ button.backgroundTintList =
+ ContextCompat.getColorStateList(requireActivity(), R.color.colorMyMsg)
}
button.setOnClickListener {
if (action.mode == QuickChatAction.Mode.Append) {
val originalText = binding.messageInputText.text ?: ""
- val needsSpace = !originalText.endsWith(' ') && originalText.isNotEmpty()
+ val needsSpace =
+ !originalText.endsWith(' ') && originalText.isNotEmpty()
val newText = buildString {
append(originalText)
if (needsSpace) append(' ')
@@ -421,6 +454,7 @@ class MessagesFragment : Fragment(), Logging {
}
.show()
}
+
R.id.selectAllButton -> {
// if all selected -> unselect all
if (messagesAdapter.selectedList.size == messagesAdapter.messages.size) {
@@ -434,6 +468,7 @@ class MessagesFragment : Fragment(), Logging {
actionMode?.title = messagesAdapter.selectedList.size.toString()
messagesAdapter.notifyDataSetChanged()
}
+
R.id.resendButton -> {
debug("User clicked resendButton")
val selectedList = messagesAdapter.selectedList
@@ -441,7 +476,7 @@ class MessagesFragment : Fragment(), Logging {
selectedList.forEach {
resendText = resendText + it.data.text + System.lineSeparator()
}
- if (resendText!="")
+ if (resendText != "")
resendText = resendText.substring(0, resendText.length - 1)
binding.messageInputText.setText(resendText)
mode.finish()
diff --git a/app/src/main/res/layout/messages_fragment.xml b/app/src/main/res/layout/messages_fragment.xml
index 3a101a93f..16ed04d60 100644
--- a/app/src/main/res/layout/messages_fragment.xml
+++ b/app/src/main/res/layout/messages_fragment.xml
@@ -10,28 +10,13 @@
-
-
-
-
-
-
-
+ app:navigationIcon="?android:attr/homeAsUpIndicator"/>