From 7eb1724c75a62c548b2ca35c4a1f2b9815558353 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Thu, 16 Dec 2021 22:58:39 -0500 Subject: [PATCH] allow to remove all messages from current chat --- res/menu/conversation_clear.xml | 7 +++++++ .../thoughtcrime/securesms/ConversationActivity.java | 2 ++ .../thoughtcrime/securesms/ConversationAdapter.java | 4 ++++ .../thoughtcrime/securesms/ConversationFragment.java | 4 ++++ .../securesms/MessageSelectorFragment.java | 10 ++++++---- 5 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 res/menu/conversation_clear.xml diff --git a/res/menu/conversation_clear.xml b/res/menu/conversation_clear.xml new file mode 100644 index 000000000..8de253cfa --- /dev/null +++ b/res/menu/conversation_clear.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java index 9443e0b28..2791eb83c 100644 --- a/src/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationActivity.java @@ -483,6 +483,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity menu.findItem(R.id.menu_archive_chat).setTitle(R.string.menu_unarchive_chat); } + inflater.inflate(R.menu.conversation_clear, menu); inflater.inflate(R.menu.conversation_delete, menu); try { @@ -533,6 +534,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity case R.id.menu_add_attachment: handleAddAttachment(); return true; case R.id.menu_leave: handleLeaveGroup(); return true; case R.id.menu_archive_chat: handleArchiveChat(); return true; + case R.id.menu_clear_chat: fragment.handleClearChat(); return true; case R.id.menu_delete_chat: handleDeleteChat(); return true; case R.id.menu_mute_notifications: handleMuteNotifications(); return true; case R.id.menu_show_map: handleShowMap(); return true; diff --git a/src/org/thoughtcrime/securesms/ConversationAdapter.java b/src/org/thoughtcrime/securesms/ConversationAdapter.java index 19bebe937..a1b5a80b1 100644 --- a/src/org/thoughtcrime/securesms/ConversationAdapter.java +++ b/src/org/thoughtcrime/securesms/ConversationAdapter.java @@ -331,6 +331,10 @@ public class ConversationAdapter return Collections.unmodifiableSet(new HashSet<>(batchSelected)); } + public int[] getMessageIds() { + return dcMsgList; + } + public void pulseHighlightItem(int position) { if (position>=0 && position < getItemCount()) { positionToPulseHighlight = position; diff --git a/src/org/thoughtcrime/securesms/ConversationFragment.java b/src/org/thoughtcrime/securesms/ConversationFragment.java index 9da8769e3..4d1e70b44 100644 --- a/src/org/thoughtcrime/securesms/ConversationFragment.java +++ b/src/org/thoughtcrime/securesms/ConversationFragment.java @@ -357,6 +357,10 @@ public class ConversationFragment extends MessageSelectorFragment return !dcMsg.isInfo() && dcMsg.getType() != DcMsg.DC_MSG_VIDEOCHAT_INVITATION; } + public void handleClearChat() { + handleDeleteMessages((int) chatId, getListAdapter().getMessageIds()); + } + private ConversationAdapter getListAdapter() { return (ConversationAdapter) list.getAdapter(); } diff --git a/src/org/thoughtcrime/securesms/MessageSelectorFragment.java b/src/org/thoughtcrime/securesms/MessageSelectorFragment.java index a87af4410..e3ce36c9c 100644 --- a/src/org/thoughtcrime/securesms/MessageSelectorFragment.java +++ b/src/org/thoughtcrime/securesms/MessageSelectorFragment.java @@ -55,19 +55,21 @@ public abstract class MessageSelectorFragment } protected void handleDeleteMessages(int chatId, final Set messageRecords) { - int messagesCount = messageRecords.size(); + handleDeleteMessages(chatId, DcMsg.msgSetToIds(messageRecords)); + } + + protected void handleDeleteMessages(int chatId, final int[] messageIds) { DcChat dcChat = DcHelper.getContext(getActivity()).getChat(chatId); String text = getActivity().getResources().getQuantityString( dcChat.isDeviceTalk()? R.plurals.ask_delete_messages_simple : R.plurals.ask_delete_messages, - messagesCount, messagesCount); + messageIds.length, messageIds.length); new AlertDialog.Builder(getActivity()) .setMessage(text) .setCancelable(true) .setPositiveButton(R.string.delete, (dialog, which) -> { - int[] ids = DcMsg.msgSetToIds(messageRecords); - dcContext.deleteMsgs(ids); + dcContext.deleteMsgs(messageIds); if (actionMode != null) actionMode.finish(); }) .setNegativeButton(android.R.string.cancel, null)