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