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 24981c42d..b0c264d5d 100644 --- a/src/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationActivity.java @@ -489,6 +489,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 { @@ -531,6 +532,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity switch (item.getItemId()) { 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 9ee64a306..0acb5e8d3 100644 --- a/src/org/thoughtcrime/securesms/ConversationFragment.java +++ b/src/org/thoughtcrime/securesms/ConversationFragment.java @@ -373,6 +373,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)