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 dd8828804..8a5a78b7e 100644 --- a/app/src/main/java/com/geeksville/mesh/model/MessagesState.kt +++ b/app/src/main/java/com/geeksville/mesh/model/MessagesState.kt @@ -46,6 +46,13 @@ class MessagesState(private val ui: UIViewModel) : Logging { messages.value = messagesList } + fun removeMessage(m: DataPacket) { + debug("Removing message from view id=${m.id}") + + messagesList.remove(m) + messages.value = messagesList; + } + fun updateStatus(id: Int, status: MessageStatus) { // Super inefficent but this is rare debug("Handling message status change $id: $status") @@ -80,4 +87,20 @@ class MessagesState(private val ui: UIViewModel) : Logging { // FIXME - why is the first time we are called p is already in the list at this point? addMessage(p) } + + fun deleteMessage(str: String, dest: String = DataPacket.ID_BROADCAST) { + val service = ui.meshService + val p = DataPacket(str, dest) + + if (service != null) { + try { + service.send(p) + } catch (ex: RemoteException) { + p.errorMessage = "Error: ${ex.message}" + } + } else { + p.errorMessage = "Error: No Mesh service" + } + removeMessage(p) + } } 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 28db58802..08c90e798 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt @@ -48,7 +48,7 @@ class MessagesFragment : ScreenFragment("Messages"), Logging { private val binding get() = _binding!! private val model: UIViewModel by activityViewModels() - + // Allows textMultiline with IME_ACTION_SEND fun EditText.onActionSend(func: () -> Unit) { setImeOptions(EditorInfo.IME_ACTION_SEND) @@ -164,6 +164,10 @@ class MessagesFragment : ScreenFragment("Messages"), Logging { // Set cardview offset and color. val marginParams = holder.card.layoutParams as ViewGroup.MarginLayoutParams val messageOffset = resources.getDimensionPixelOffset(R.dimen.message_offset) + holder.card.setOnLongClickListener { + this.onLongCLick(position) + true + } if (isMe) { marginParams.leftMargin = messageOffset marginParams.rightMargin = 0 @@ -232,6 +236,12 @@ class MessagesFragment : ScreenFragment("Messages"), Logging { if (itemCount != 0) binding.messageListView.scrollToPosition(itemCount - 1) } + + fun onLongCLick(position: Int) { + messages = messages.filter { x -> x != messages[position] }.toTypedArray() + onMessagesChanged(messages.toList()) + } + } override fun onCreateView( @@ -282,8 +292,8 @@ class MessagesFragment : ScreenFragment("Messages"), Logging { binding.textInputLayout.isEnabled = model.isConnected.value != MeshService.ConnectionState.DISCONNECTED - // Just being connected is enough to allow sending texts I think - // && model.nodeDB.myId.value != null && model.radioConfig.value != null + // Just being connected is enough to allow sending texts I think + // && model.nodeDB.myId.value != null && model.radioConfig.value != null } model.isConnected.observe(viewLifecycleOwner, Observer { _ ->