mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-02-01 19:33:28 -05:00
deleteMessage index by packet id
This commit is contained in:
@@ -66,8 +66,7 @@ interface IMeshService {
|
||||
*/
|
||||
void send(inout DataPacket packet);
|
||||
|
||||
|
||||
void delete(int position);
|
||||
void deleteMessage(int packetId);
|
||||
|
||||
void deleteAllMessages();
|
||||
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -124,7 +124,7 @@ class MessagesFragment : ScreenFragment("Messages"), Logging {
|
||||
}
|
||||
|
||||
var messages = arrayOf<DataPacket>()
|
||||
var positionList = ArrayList<Int>()
|
||||
var selectedList = ArrayList<DataPacket>()
|
||||
|
||||
/**
|
||||
* 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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user