diff --git a/res/values/strings.xml b/res/values/strings.xml index 1541c70d0..1058f0fa4 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -208,6 +208,10 @@ Deleting Deleting messages... Quoted message not found + + Message copied to clipboard + %1$d selected messages copied to clipboard + There is no browser installed on your device. diff --git a/src/org/thoughtcrime/securesms/ConversationFragment.java b/src/org/thoughtcrime/securesms/ConversationFragment.java index d1d940651..17c880322 100644 --- a/src/org/thoughtcrime/securesms/ConversationFragment.java +++ b/src/org/thoughtcrime/securesms/ConversationFragment.java @@ -52,6 +52,7 @@ import android.widget.TextView; import android.widget.Toast; import android.widget.ViewSwitcher; +import com.b44t.messenger.DcContact; import com.b44t.messenger.DcContext; import com.b44t.messenger.DcEventCenter; import com.b44t.messenger.DcMsg; @@ -311,9 +312,28 @@ public class ConversationFragment extends Fragment list.addItemDecoration(lastSeenDecoration); } - private void handleCopyMessage(final Set messageRecords) { - List messageList = new LinkedList<>(messageRecords); - Collections.sort(messageList, new Comparator() { + private String getMessageContent(DcMsg msg, DcMsg prev_msg) + { + String ret = ""; + + if (msg.getFromId() != prev_msg.getFromId()) { + DcContact contact = dcContext.getContact(msg.getFromId()); + ret += contact.getDisplayName() + ":\n"; + } + + if( msg.getType()==DcMsg.DC_MSG_TEXT ) { + ret += msg.getText(); + } + else { + ret += msg.getSummarytext(1000); + } + + return ret; + } + + private void handleCopyMessage(final Set dcMsgsSet) { + List dcMsgsList = new LinkedList<>(dcMsgsSet); + Collections.sort(dcMsgsList, new Comparator() { @Override public int compare(DcMsg lhs, DcMsg rhs) { if (lhs.getDateReceived() < rhs.getDateReceived()) return -1; @@ -322,23 +342,27 @@ public class ConversationFragment extends Fragment } }); - StringBuilder bodyBuilder = new StringBuilder(); - ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); + StringBuilder result = new StringBuilder(); - for (DcMsg messageRecord : messageList) { - String body = messageRecord.getDisplayBody(); - if (!TextUtils.isEmpty(body)) { - bodyBuilder.append(body).append('\n'); + DcMsg prevMsg = new DcMsg(dcContext); + for (DcMsg msg : dcMsgsList) { + if (result.length()>0) { + result.append("\n\n"); + } + result.append(getMessageContent(msg, prevMsg)); + prevMsg = msg; + } + + if (result.length()>0) { + try { + ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); + clipboard.setText(result.toString()); + Toast.makeText(getActivity(), getActivity().getResources().getQuantityString(R.plurals.ConversationFragment_n_selected_messages_copied_to_clipboard, dcMsgsList.size(), dcMsgsList.size()), Toast.LENGTH_LONG).show(); + } + catch(Exception e) { + e.printStackTrace(); } } - if (bodyBuilder.length() > 0 && bodyBuilder.charAt(bodyBuilder.length() - 1) == '\n') { - bodyBuilder.deleteCharAt(bodyBuilder.length() - 1); - } - - String result = bodyBuilder.toString(); - - if (!TextUtils.isEmpty(result)) - clipboard.setText(result); } private void handleDeleteMessages(final Set messageRecords) {