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)