Only copy distinct messages.

Fixes #11696
This commit is contained in:
Alan Evans
2021-10-18 23:12:38 -03:00
committed by Greyson Parrelli
parent 41585699d2
commit 07a6942ea8
2 changed files with 15 additions and 21 deletions
@@ -19,8 +19,6 @@ package org.thoughtcrime.securesms.conversation;
import android.Manifest; import android.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.Configuration; import android.content.res.Configuration;
@@ -167,7 +165,6 @@ import org.thoughtcrime.securesms.wallpaper.ChatWallpaper;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
@@ -871,24 +868,21 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
} }
private void handleCopyMessage(final Set<MultiselectPart> multiselectParts) { private void handleCopyMessage(final Set<MultiselectPart> multiselectParts) {
List<MultiselectPart> multiselectPartList = new ArrayList<>(multiselectParts); CharSequence bodies = Stream.of(multiselectParts)
Collections.sort(multiselectPartList, (lhs, rhs) -> Long.compare(lhs.getMessageRecord().getDateReceived(), rhs.getMessageRecord().getDateReceived())); .sortBy(m -> m.getMessageRecord().getDateReceived())
.map(MultiselectPart::getConversationMessage)
.distinct()
.map(m -> m.getDisplayBody(requireContext()))
.filterNot(TextUtils::isEmpty)
.collect(SpannableStringBuilder::new, (bodyBuilder, body) -> {
if (bodyBuilder.length() > 0) {
bodyBuilder.append('\n');
}
bodyBuilder.append(body);
});
SpannableStringBuilder bodyBuilder = new SpannableStringBuilder(); if (!TextUtils.isEmpty(bodies)) {
ClipboardManager clipboard = (ClipboardManager) requireActivity().getSystemService(Context.CLIPBOARD_SERVICE); Util.copyToClipboard(requireContext(), bodies);
for (MultiselectPart part : multiselectPartList) {
CharSequence body = part.getConversationMessage().getDisplayBody(requireContext());
if (!TextUtils.isEmpty(body)) {
if (bodyBuilder.length() > 0) {
bodyBuilder.append('\n');
}
bodyBuilder.append(body);
}
}
if (!TextUtils.isEmpty(bodyBuilder)) {
clipboard.setPrimaryClip(ClipData.newPlainText(null, bodyBuilder));
} }
} }
@@ -483,7 +483,7 @@ public class Util {
return MemoryUnitFormat.formatBytes(sizeBytes); return MemoryUnitFormat.formatBytes(sizeBytes);
} }
public static void copyToClipboard(@NonNull Context context, @NonNull String text) { public static void copyToClipboard(@NonNull Context context, @NonNull CharSequence text) {
ServiceUtil.getClipboardManager(context).setPrimaryClip(ClipData.newPlainText("text", text)); ServiceUtil.getClipboardManager(context).setPrimaryClip(ClipData.newPlainText("text", text));
} }