Ensure shared background for all generated text stories in a set.

fork-5.53.8
Alex Hart 2022-06-09 09:20:04 -03:00
rodzic b8a7748dc1
commit 92c6a84075
1 zmienionych plików z 29 dodań i 10 usunięć

Wyświetl plik

@ -18,6 +18,7 @@ import org.signal.core.util.concurrent.SimpleTask;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey; import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey;
import org.thoughtcrime.securesms.conversation.MessageSendType; import org.thoughtcrime.securesms.conversation.MessageSendType;
import org.thoughtcrime.securesms.conversation.colors.ChatColors;
import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.SignalDatabase;
import org.thoughtcrime.securesms.database.ThreadDatabase; import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.database.model.Mention; import org.thoughtcrime.securesms.database.model.Mention;
@ -73,12 +74,13 @@ public final class MultiShareSender {
@WorkerThread @WorkerThread
public static MultiShareSendResultCollection sendSync(@NonNull MultiShareArgs multiShareArgs) { public static MultiShareSendResultCollection sendSync(@NonNull MultiShareArgs multiShareArgs) {
List<MultiShareSendResult> results = new ArrayList<>(multiShareArgs.getContactSearchKeys().size()); List<MultiShareSendResult> results = new ArrayList<>(multiShareArgs.getContactSearchKeys().size());
Context context = ApplicationDependencies.getApplication(); Context context = ApplicationDependencies.getApplication();
boolean isMmsEnabled = Util.isMmsCapable(context); boolean isMmsEnabled = Util.isMmsCapable(context);
String message = multiShareArgs.getDraftText(); String message = multiShareArgs.getDraftText();
SlideDeck slideDeck; SlideDeck slideDeck;
List<OutgoingMediaMessage> storiesBatch = new LinkedList<>(); List<OutgoingMediaMessage> storiesBatch = new LinkedList<>();
ChatColors generatedTextStoryBackgroundColor = TextStoryBackgroundColors.getRandomBackgroundColor();
try { try {
slideDeck = buildSlideDeck(context, multiShareArgs); slideDeck = buildSlideDeck(context, multiShareArgs);
@ -119,7 +121,22 @@ public final class MultiShareSender {
if ((recipient.isMmsGroup() || recipient.getEmail().isPresent()) && !isMmsEnabled) { if ((recipient.isMmsGroup() || recipient.getEmail().isPresent()) && !isMmsEnabled) {
results.add(new MultiShareSendResult(recipientSearchKey, MultiShareSendResult.Type.MMS_NOT_ENABLED)); results.add(new MultiShareSendResult(recipientSearchKey, MultiShareSendResult.Type.MMS_NOT_ENABLED));
} else if (hasMmsMedia && sendType.usesSmsTransport() || hasPushMedia && !sendType.usesSmsTransport() || canSendAsTextStory) { } else if (hasMmsMedia && sendType.usesSmsTransport() || hasPushMedia && !sendType.usesSmsTransport() || canSendAsTextStory) {
sendMediaMessageOrCollectStoryToBatch(context, multiShareArgs, recipient, slideDeck, sendType, threadId, forceSms, expiresIn, multiShareArgs.isViewOnce(), subscriptionId, mentions, recipientSearchKey.isStory(), sentTimestamp, canSendAsTextStory, storiesBatch); sendMediaMessageOrCollectStoryToBatch(context,
multiShareArgs,
recipient,
slideDeck,
sendType,
threadId,
forceSms,
expiresIn,
multiShareArgs.isViewOnce(),
subscriptionId,
mentions,
recipientSearchKey.isStory(),
sentTimestamp,
canSendAsTextStory,
storiesBatch,
generatedTextStoryBackgroundColor);
results.add(new MultiShareSendResult(recipientSearchKey, MultiShareSendResult.Type.SUCCESS)); results.add(new MultiShareSendResult(recipientSearchKey, MultiShareSendResult.Type.SUCCESS));
} else if (recipientSearchKey.isStory()) { } else if (recipientSearchKey.isStory()) {
results.add(new MultiShareSendResult(recipientSearchKey, MultiShareSendResult.Type.INVALID_SHARE_TO_STORY)); results.add(new MultiShareSendResult(recipientSearchKey, MultiShareSendResult.Type.INVALID_SHARE_TO_STORY));
@ -182,7 +199,8 @@ public final class MultiShareSender {
boolean isStory, boolean isStory,
long sentTimestamp, long sentTimestamp,
boolean canSendAsTextStory, boolean canSendAsTextStory,
@NonNull List<OutgoingMediaMessage> storiesToBatchSend) @NonNull List<OutgoingMediaMessage> storiesToBatchSend,
@NonNull ChatColors generatedTextStoryBackgroundColor)
{ {
String body = multiShareArgs.getDraftText(); String body = multiShareArgs.getDraftText();
if (sendType.usesSignalTransport() && !forceSms && body != null) { if (sendType.usesSignalTransport() && !forceSms && body != null) {
@ -229,7 +247,7 @@ public final class MultiShareSender {
outgoingMessages.add(outgoingMediaMessage); outgoingMessages.add(outgoingMediaMessage);
} else if (canSendAsTextStory) { } else if (canSendAsTextStory) {
outgoingMessages.add(generateTextStory(recipient, multiShareArgs, sentTimestamp, storyType)); outgoingMessages.add(generateTextStory(recipient, multiShareArgs, sentTimestamp, storyType, generatedTextStoryBackgroundColor));
} else { } else {
List<Slide> storySupportedSlides = slideDeck.getSlides() List<Slide> storySupportedSlides = slideDeck.getSlides()
.stream() .stream()
@ -317,14 +335,15 @@ public final class MultiShareSender {
private static @NonNull OutgoingMediaMessage generateTextStory(@NonNull Recipient recipient, private static @NonNull OutgoingMediaMessage generateTextStory(@NonNull Recipient recipient,
@NonNull MultiShareArgs multiShareArgs, @NonNull MultiShareArgs multiShareArgs,
long sentTimestamp, long sentTimestamp,
@NonNull StoryType storyType) @NonNull StoryType storyType,
@NonNull ChatColors background)
{ {
return new OutgoingMediaMessage( return new OutgoingMediaMessage(
recipient, recipient,
Base64.encodeBytes(StoryTextPost.newBuilder() Base64.encodeBytes(StoryTextPost.newBuilder()
.setBody(getBodyForTextStory(multiShareArgs.getDraftText(), multiShareArgs.getLinkPreview())) .setBody(getBodyForTextStory(multiShareArgs.getDraftText(), multiShareArgs.getLinkPreview()))
.setStyle(StoryTextPost.Style.DEFAULT) .setStyle(StoryTextPost.Style.DEFAULT)
.setBackground(TextStoryBackgroundColors.getRandomBackgroundColor().serialize()) .setBackground(background.serialize())
.setTextBackgroundColor(0) .setTextBackgroundColor(0)
.setTextForegroundColor(Color.WHITE) .setTextForegroundColor(Color.WHITE)
.build() .build()