From e27a76633c0f10ae698621ba519d5778a633e34b Mon Sep 17 00:00:00 2001 From: Jackson Rosenthal Date: Sat, 29 Jan 2022 14:31:08 -0500 Subject: [PATCH] Delete messages from view by long clicking. Looking into clearing "all messages" & menu for deleting individual messages --- .../aidl/com/geeksville/mesh/IMeshService.aidl | 3 +++ .../com/geeksville/mesh/model/MessagesState.kt | 13 ++++++------- .../com/geeksville/mesh/service/MeshService.kt | 14 ++++++++++---- .../com/geeksville/mesh/ui/MessagesFragment.kt | 8 +------- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/app/src/main/aidl/com/geeksville/mesh/IMeshService.aidl b/app/src/main/aidl/com/geeksville/mesh/IMeshService.aidl index 46d90f282..56b6090fc 100644 --- a/app/src/main/aidl/com/geeksville/mesh/IMeshService.aidl +++ b/app/src/main/aidl/com/geeksville/mesh/IMeshService.aidl @@ -66,6 +66,9 @@ interface IMeshService { */ void send(inout DataPacket packet); + + void delete(int position); + /** Get the IDs of everyone on the mesh. You should also subscribe for NODE_CHANGE broadcasts. */ 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 8a5a78b7e..60c7a5784 100644 --- a/app/src/main/java/com/geeksville/mesh/model/MessagesState.kt +++ b/app/src/main/java/com/geeksville/mesh/model/MessagesState.kt @@ -50,7 +50,7 @@ class MessagesState(private val ui: UIViewModel) : Logging { debug("Removing message from view id=${m.id}") messagesList.remove(m) - messages.value = messagesList; + messages.value = messagesList } fun updateStatus(id: Int, status: MessageStatus) { @@ -88,19 +88,18 @@ class MessagesState(private val ui: UIViewModel) : Logging { addMessage(p) } - fun deleteMessage(str: String, dest: String = DataPacket.ID_BROADCAST) { + fun deleteMessage(packet: DataPacket, position: Int) { val service = ui.meshService - val p = DataPacket(str, dest) if (service != null) { try { - service.send(p) + service.delete(position) } catch (ex: RemoteException) { - p.errorMessage = "Error: ${ex.message}" + packet.errorMessage = "Error: ${ex.message}" } } else { - p.errorMessage = "Error: No Mesh service" + packet.errorMessage = "Error: No Mesh service" } - removeMessage(p) + removeMessage(packet) } } diff --git a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt index a326ca8ec..8790e0d4b 100644 --- a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt +++ b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt @@ -1018,10 +1018,10 @@ class MeshService : Service(), Logging { else broadcastSecs * 1000L - if (prefs.locationShare == RadioConfigProtos.LocationSharing.LocDisabled) { - info("GPS location sharing is disabled") - desiredInterval = 0 - } + if (prefs.locationShare == RadioConfigProtos.LocationSharing.LocDisabled) { + info("GPS location sharing is disabled") + desiredInterval = 0 + } // if (prefs.fixedPosition) { // info("Node has fixed position, therefore not overriding position") @@ -1783,6 +1783,12 @@ class MeshService : Service(), Logging { this@MeshService.setOwner(myId, longName, shortName) } + override fun delete(position: Int) { + if (position >= 0) { + recentDataPackets.removeAt(position) + } + } + override fun send(p: DataPacket) { toRemoteExceptions { // Init from and id 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 08c90e798..5c043f01f 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt @@ -165,7 +165,7 @@ class MessagesFragment : ScreenFragment("Messages"), Logging { val marginParams = holder.card.layoutParams as ViewGroup.MarginLayoutParams val messageOffset = resources.getDimensionPixelOffset(R.dimen.message_offset) holder.card.setOnLongClickListener { - this.onLongCLick(position) + model.messagesState.deleteMessage(messages[position], position) true } if (isMe) { @@ -236,12 +236,6 @@ 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(