From 0b0d82dc76780226b50b2293b3cf331a6793d42b Mon Sep 17 00:00:00 2001 From: andrekir Date: Wed, 2 Mar 2022 11:21:43 -0300 Subject: [PATCH] deleteMessage index by packet id --- .../com/geeksville/mesh/IMeshService.aidl | 3 +- .../geeksville/mesh/model/MessagesState.kt | 6 +-- .../geeksville/mesh/service/MeshService.kt | 10 +++-- .../geeksville/mesh/ui/MessagesFragment.kt | 41 ++++++++----------- 4 files changed, 28 insertions(+), 32 deletions(-) diff --git a/app/src/main/aidl/com/geeksville/mesh/IMeshService.aidl b/app/src/main/aidl/com/geeksville/mesh/IMeshService.aidl index 8b5010c86..8242c67be 100644 --- a/app/src/main/aidl/com/geeksville/mesh/IMeshService.aidl +++ b/app/src/main/aidl/com/geeksville/mesh/IMeshService.aidl @@ -66,8 +66,7 @@ interface IMeshService { */ void send(inout DataPacket packet); - - void delete(int position); + void deleteMessage(int packetId); void deleteAllMessages(); 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 6e98fb5d4..a678034fc 100644 --- a/app/src/main/java/com/geeksville/mesh/model/MessagesState.kt +++ b/app/src/main/java/com/geeksville/mesh/model/MessagesState.kt @@ -95,12 +95,12 @@ class MessagesState(private val ui: UIViewModel) : Logging { addMessage(p) } - fun deleteMessage(packet: DataPacket, position: Int) { + fun deleteMessage(packet: DataPacket) { val service = ui.meshService if (service != null) { try { - service.delete(position) + service.deleteMessage(packet.id) } catch (ex: RemoteException) { packet.errorMessage = "Error: ${ex.message}" } @@ -116,7 +116,7 @@ class MessagesState(private val ui: UIViewModel) : Logging { try { service.deleteAllMessages() } catch (ex: RemoteException) { - + errormsg("Error: ${ex.message}") } removeAllMessages() } 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 3b4965bd5..7691c8e8f 100644 --- a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt +++ b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt @@ -1753,10 +1753,12 @@ class MeshService : Service(), Logging { this@MeshService.setOwner(myId, longName, shortName) } - override fun delete(position: Int) { - if (position >= 0) { - recentDataPackets.removeAt(position) - } + override fun deleteMessage(packetId: Int) { + val packet = recentDataPackets.find {it.id == packetId} + if (packet != null) { + recentDataPackets.remove(packet) + debug("Deleting message id=${packet.id}") + } else debug("Nothing to delete, message id=${packetId} not found") } override fun deleteAllMessages() { 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 91cb9ff7f..5a4bf550b 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt @@ -124,7 +124,7 @@ class MessagesFragment : ScreenFragment("Messages"), Logging { } var messages = arrayOf() - var positionList = ArrayList() + var selectedList = ArrayList() /** * Returns the total number of items in the data set held by the adapter. @@ -245,24 +245,19 @@ class MessagesFragment : ScreenFragment("Messages"), Logging { R.id.deleteButton -> { val deleteMessagesString = resources.getQuantityString( R.plurals.delete_messages, - positionList.size, - positionList.size + selectedList.size, + selectedList.size ) MaterialAlertDialogBuilder(requireContext()) .setMessage(deleteMessagesString) .setPositiveButton(getString(R.string.delete)) { _, _ -> debug("User clicked deleteButton") // all items selected --> deleteAllMessages() - if (positionList.size == messages.size) { + if (selectedList.size == messages.size) { model.messagesState.deleteAllMessages() } else { - // remove selectedList in reverse so we don't break the index - positionList.sortedDescending().forEach { - try { - model.messagesState.deleteMessage((messages[it]), it) - } catch (ex: ArrayIndexOutOfBoundsException) { - errormsg("error deleting messages ${ex.message}") - } + selectedList.forEach { + model.messagesState.deleteMessage(it) } mode.finish() } @@ -273,15 +268,15 @@ class MessagesFragment : ScreenFragment("Messages"), Logging { } R.id.selectAllButton -> { // if all selected -> unselect all - if (positionList.size == messages.size) { - positionList.clear() + if (selectedList.size == messages.size) { + selectedList.clear() mode.finish() } else { // else --> select all - positionList.clear() - positionList.addAll(messages.indices) + selectedList.clear() + selectedList.addAll(messages) } - actionMode?.title = positionList.size.toString() + actionMode?.title = selectedList.size.toString() notifyDataSetChanged() } } @@ -289,7 +284,7 @@ class MessagesFragment : ScreenFragment("Messages"), Logging { } override fun onDestroyActionMode(mode: ActionMode) { - positionList.clear() + selectedList.clear() notifyDataSetChanged() actionMode = null } @@ -304,7 +299,7 @@ class MessagesFragment : ScreenFragment("Messages"), Logging { if (actionMode != null) clickItem(holder) } - if (positionList.contains(position)) { + if (selectedList.contains(msg)) { holder.itemView.background = GradientDrawable().apply { shape = GradientDrawable.RECTANGLE cornerRadius = 32f @@ -321,17 +316,17 @@ class MessagesFragment : ScreenFragment("Messages"), Logging { private fun clickItem(holder: ViewHolder) { val position = holder.bindingAdapterPosition - if (!positionList.contains(position)) { - positionList.add(position) + if (!selectedList.contains(messages[position])) { + selectedList.add(messages[position]) } else { - positionList.remove(position) + selectedList.remove(messages[position]) } - if (positionList.isEmpty()) { + if (selectedList.isEmpty()) { // finish action mode when no items selected actionMode?.finish() } else { // show total items selected on action mode title - actionMode?.title = "${positionList.size}" + actionMode?.title = "${selectedList.size}" } notifyItemChanged(position) }