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"/>