From e2fb65920c0dd4ba8f0b3767664f9796e57e96c7 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 6 Jan 2023 11:27:33 -0500 Subject: [PATCH] Ensure SMS and MMS messages are sent appropriately. --- .../securesms/InviteActivity.java | 2 +- .../expire/ExpireTimerSettingsRepository.kt | 2 +- .../ConversationParentFragment.java | 5 +- .../securesms/groups/GroupManagerV1.java | 4 +- .../securesms/groups/GroupManagerV2.java | 2 +- .../insights/InsightsRepository.java | 2 +- .../securesms/jobs/GiftSendJob.kt | 2 +- .../jobs/PaymentNotificationSendJobV2.kt | 2 +- .../jobs/SendPaymentsActivatedJob.kt | 2 +- .../mediasend/v2/MediaSelectionRepository.kt | 4 +- .../securesms/mms/AttachmentManager.java | 2 +- .../notifications/RemoteReplyReceiver.java | 6 +- .../securesms/recipients/RecipientUtil.java | 2 +- .../service/QuickResponseService.java | 2 +- .../securesms/sharing/MultiShareSender.java | 7 ++- .../securesms/sms/MessageSender.java | 62 +++++++++++++------ .../direct/StoryDirectReplyRepository.kt | 2 +- .../reply/group/StoryGroupReplySender.kt | 2 +- 18 files changed, 70 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java b/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java index 4dfe003222..e47bfa6e20 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java @@ -254,7 +254,7 @@ public class InviteActivity extends PassphraseRequiredActivity implements Contac Recipient recipient = Recipient.resolved(recipientId); int subscriptionId = recipient.getDefaultSubscriptionId().orElse(-1); - MessageSender.send(context, OutgoingMessage.sms(recipient, message, subscriptionId), -1L, true, null, null); + MessageSender.send(context, OutgoingMessage.sms(recipient, message, subscriptionId), -1L, MessageSender.SendType.SMS, null, null); if (recipient.getContactUri() != null) { SignalDatabase.recipients().setHasSentInvite(recipient.getId()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/expire/ExpireTimerSettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/expire/ExpireTimerSettingsRepository.kt index 97146e8091..30d5f08556 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/expire/ExpireTimerSettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/expire/ExpireTimerSettingsRepository.kt @@ -40,7 +40,7 @@ class ExpireTimerSettingsRepository(val context: Context) { } else { SignalDatabase.recipients.setExpireMessages(recipientId, newExpirationTime) val outgoingMessage = OutgoingMessage.expirationUpdateMessage(Recipient.resolved(recipientId), System.currentTimeMillis(), newExpirationTime * 1000L) - MessageSender.send(context, outgoingMessage, getThreadId(recipientId), false, null, null) + MessageSender.send(context, outgoingMessage, getThreadId(recipientId), MessageSender.SendType.SIGNAL, null, null) consumer.invoke(Result.success(newExpirationTime)) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java index 583d43267a..c89d06dd03 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java @@ -267,6 +267,7 @@ import org.thoughtcrime.securesms.safety.SafetyNumberBottomSheet; import org.thoughtcrime.securesms.search.MessageResult; import org.thoughtcrime.securesms.service.KeyCachingService; import org.thoughtcrime.securesms.sms.MessageSender; +import org.thoughtcrime.securesms.sms.MessageSender.SendType; import org.thoughtcrime.securesms.stickers.StickerEventListener; import org.thoughtcrime.securesms.stickers.StickerLocator; import org.thoughtcrime.securesms.stickers.StickerManagementActivity; @@ -3113,7 +3114,7 @@ public class ConversationParentFragment extends Fragment final long id = fragment.stageOutgoingMessage(outgoingMessage); SimpleTask.run(() -> { - return MessageSender.send(context, outgoingMessage, thread, sendType.usesSmsTransport(), metricId, null); + return MessageSender.send(context, outgoingMessage, thread, sendType.usesSmsTransport() ? SendType.MMS : SendType.SIGNAL, metricId, null); }, result -> { sendComplete(result); future.set(null); @@ -3153,7 +3154,7 @@ public class ConversationParentFragment extends Fragment .withPermanentDenialDialog(getString(R.string.ConversationActivity_signal_needs_sms_permission_in_order_to_send_an_sms)) .onAllGranted(() -> { SimpleTask.run(() -> { - return MessageSender.send(context, message, thread, sendType.usesSmsTransport(), metricId, null); + return MessageSender.send(context, message, thread, sendType.usesSmsTransport() ? SendType.SMS : SendType.SIGNAL, metricId, null); }, this::sendComplete); silentlySetComposeText(""); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV1.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV1.java index f9e12204d2..aca1840fdc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV1.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV1.java @@ -185,7 +185,7 @@ final class GroupManagerV1 { Collections.emptyList(), Collections.emptyList()); - long threadId = MessageSender.send(context, outgoingMessage, -1, false, null, null); + long threadId = MessageSender.send(context, outgoingMessage, -1, MessageSender.SendType.SIGNAL, null, null); return new GroupActionResult(groupRecipient, threadId, newMemberCount, Collections.emptyList()); } @@ -209,7 +209,7 @@ final class GroupManagerV1 { recipientTable.setExpireMessages(recipient.getId(), expirationTime); OutgoingMessage outgoingMessage = OutgoingMessage.expirationUpdateMessage(recipient, System.currentTimeMillis(), expirationTime * 1000L); - MessageSender.send(context, outgoingMessage, threadId, false, null, null); + MessageSender.send(context, outgoingMessage, threadId, MessageSender.SendType.SIGNAL, null, null); } @WorkerThread diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java index b05ac45536..748eea0f0a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java @@ -1279,7 +1279,7 @@ final class GroupManagerV2 { } else { //noinspection IfStatementWithIdenticalBranches if (sendToMembers) { - long threadId = MessageSender.send(context, outgoingMessage, -1, false, null, null); + long threadId = MessageSender.send(context, outgoingMessage, -1, MessageSender.SendType.SIGNAL, null, null); return new RecipientAndThread(groupRecipient, threadId); } else { long threadId = SignalDatabase.threads().getOrCreateValidThreadId(outgoingMessage.getRecipient(), -1, outgoingMessage.getDistributionType()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/insights/InsightsRepository.java b/app/src/main/java/org/thoughtcrime/securesms/insights/InsightsRepository.java index 3d3157ecc3..e6ef34e8b3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/insights/InsightsRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/insights/InsightsRepository.java @@ -78,7 +78,7 @@ public class InsightsRepository implements InsightsDashboardViewModel.Repository int subscriptionId = resolved.getDefaultSubscriptionId().orElse(-1); String message = context.getString(R.string.InviteActivity_lets_switch_to_signal, context.getString(R.string.install_url)); - MessageSender.send(context, OutgoingMessage.sms(resolved, message, subscriptionId), -1L, true, null, null); + MessageSender.send(context, OutgoingMessage.sms(resolved, message, subscriptionId), -1L, MessageSender.SendType.SMS, null, null); RecipientTable database = SignalDatabase.recipients(); database.setHasSentInvite(recipient.getId()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/GiftSendJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/GiftSendJob.kt index 737eeed890..2e7cfec79a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/GiftSendJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/GiftSendJob.kt @@ -68,7 +68,7 @@ class GiftSendJob private constructor(parameters: Parameters, private val recipi Log.i(TAG, "Sending gift badge to $recipientId...") var didInsert = false - MessageSender.send(context, outgoingMessage, thread, false, null) { + MessageSender.send(context, outgoingMessage, thread, MessageSender.SendType.SIGNAL, null) { didInsert = true } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJobV2.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJobV2.kt index c96615ab22..5452977508 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJobV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJobV2.kt @@ -70,7 +70,7 @@ class PaymentNotificationSendJobV2 private constructor( recipient.expiresInSeconds.seconds.inWholeMilliseconds ), SignalDatabase.threads.getOrCreateThreadIdFor(recipient), - false, + MessageSender.SendType.SIGNAL, null, null ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendPaymentsActivatedJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendPaymentsActivatedJob.kt index 42d31b973b..6dc31832ff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendPaymentsActivatedJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendPaymentsActivatedJob.kt @@ -47,7 +47,7 @@ class SendPaymentsActivatedJob(parameters: Parameters) : BaseJob(parameters) { context, OutgoingMessage.paymentsActivatedMessage(recipient, System.currentTimeMillis(), 0), threadId, - false, + MessageSender.SendType.SIGNAL, null, null ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt index dc7e04b3e5..11c2e20d25 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt @@ -109,7 +109,7 @@ class MediaSelectionRepository(context: Context) { StoryType.NONE } - if (isSms || MessageSender.isLocalSelfSend(context, singleRecipient, isSms)) { + if (isSms || MessageSender.isLocalSelfSend(context, singleRecipient, MessageSender.SendType.SIGNAL)) { Log.i(TAG, "SMS or local self-send. Skipping pre-upload.") emitter.onSuccess(MediaSendActivityResult.forTraditionalSend(singleRecipient!!.id, updatedMedia, trimmedBody, sendType, isViewOnce, trimmedMentions, StoryType.NONE)) } else { @@ -182,7 +182,7 @@ class MediaSelectionRepository(context: Context) { } fun isLocalSelfSend(recipient: Recipient?, isSms: Boolean): Boolean { - return MessageSender.isLocalSelfSend(context, recipient, isSms) + return MessageSender.isLocalSelfSend(context, recipient, if (isSms) MessageSender.SendType.SMS else MessageSender.SendType.SIGNAL) } @WorkerThread diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java index 13c21703da..351ddbbc02 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java @@ -464,7 +464,7 @@ public class AttachmentManager { .setMessage(context.getString(R.string.AttachmentManager__request_to_activate_payments)) .setPositiveButton(context.getString(R.string.AttachmentManager__send_request), (dialog, which) -> { OutgoingMessage outgoingMessage = OutgoingMessage.requestToActivatePaymentsMessage(recipient, System.currentTimeMillis(), 0); - MessageSender.send(context, outgoingMessage, SignalDatabase.threads().getOrCreateThreadIdFor(recipient), false, null, null); + MessageSender.send(context, outgoingMessage, SignalDatabase.threads().getOrCreateThreadIdFor(recipient), MessageSender.SendType.SIGNAL, null, null); }) .setNegativeButton(context.getString(R.string.AttachmentManager__cancel), null) .show(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java index d6ffe9c12a..e3be42a27b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java @@ -101,17 +101,17 @@ public class RemoteReplyReceiver extends BroadcastReceiver { Collections.emptySet(), null, recipient.isPushGroup()); - threadId = MessageSender.send(context, reply, -1, false, null, null); + threadId = MessageSender.send(context, reply, -1, MessageSender.SendType.SIGNAL, null, null); break; } case SecureMessage: { OutgoingMessage reply = OutgoingMessage.text(recipient, responseText.toString(), expiresIn, System.currentTimeMillis()); - threadId = MessageSender.send(context, reply, -1, false, null, null); + threadId = MessageSender.send(context, reply, -1, MessageSender.SendType.SIGNAL, null, null); break; } case UnsecuredSmsMessage: { OutgoingMessage reply = OutgoingMessage.sms(recipient, responseText.toString(), subscriptionId); - threadId = MessageSender.send(context, reply, -1, true, null, null); + threadId = MessageSender.send(context, reply, -1, MessageSender.SendType.SMS, null, null); break; } default: diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java index 142f64f3bf..9f48f2af07 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java @@ -321,7 +321,7 @@ public class RecipientUtil { if (threadId == -1 || !SignalDatabase.messages().hasMeaningfulMessage(threadId)) { SignalDatabase.recipients().setExpireMessages(recipient.getId(), defaultTimer); OutgoingMessage outgoingMessage = OutgoingMessage.expirationUpdateMessage(recipient, System.currentTimeMillis(), defaultTimer * 1000L); - MessageSender.send(context, outgoingMessage, SignalDatabase.threads().getOrCreateThreadIdFor(recipient), false, null, null); + MessageSender.send(context, outgoingMessage, SignalDatabase.threads().getOrCreateThreadIdFor(recipient), MessageSender.SendType.SIGNAL, null, null); return true; } return false; diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/QuickResponseService.java b/app/src/main/java/org/thoughtcrime/securesms/service/QuickResponseService.java index b651133349..8233a4ed20 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/QuickResponseService.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/QuickResponseService.java @@ -50,7 +50,7 @@ public class QuickResponseService extends IntentService { int subscriptionId = recipient.getDefaultSubscriptionId().orElse(-1); if (!TextUtils.isEmpty(content)) { - MessageSender.send(this, OutgoingMessage.sms(recipient, content, subscriptionId), -1, false, null, null); + MessageSender.send(this, OutgoingMessage.sms(recipient, content, subscriptionId), -1, MessageSender.SendType.SIGNAL, null, null); } } catch (URISyntaxException e) { Toast.makeText(this, R.string.QuickResponseService_problem_sending_message, Toast.LENGTH_LONG).show(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareSender.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareSender.java index 66bc6e7bf9..d014e9f0c6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareSender.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareSender.java @@ -43,6 +43,7 @@ import org.thoughtcrime.securesms.mms.VideoSlide; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.sms.MessageSender; +import org.thoughtcrime.securesms.sms.MessageSender.SendType; import org.thoughtcrime.securesms.stories.Stories; import org.thoughtcrime.securesms.util.Base64; import org.thoughtcrime.securesms.util.MediaUtil; @@ -307,11 +308,11 @@ public final class MultiShareSender { storiesToBatchSend.addAll(outgoingMessages); } else if (shouldSendAsPush(recipient, forceSms)) { for (final OutgoingMessage outgoingMessage : outgoingMessages) { - MessageSender.send(context, outgoingMessage.makeSecure(), threadId, false, null, null); + MessageSender.send(context, outgoingMessage.makeSecure(), threadId, SendType.SIGNAL, null, null); } } else { for (final OutgoingMessage outgoingMessage : outgoingMessages) { - MessageSender.send(context, outgoingMessage, threadId, forceSms, null, null); + MessageSender.send(context, outgoingMessage, threadId, SendType.MMS, null, null); } } } @@ -393,7 +394,7 @@ public final class MultiShareSender { outgoingMessage = OutgoingMessage.sms(recipient, body, subscriptionId); } - MessageSender.send(context, outgoingMessage, threadId, forceSms, null, null); + MessageSender.send(context, outgoingMessage, threadId, forceSms ? SendType.SMS : SendType.SIGNAL, null, null); } private static @NonNull OutgoingMessage generateTextStory(@NonNull Context context, diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java index 8bb4b03a5b..9989e4c63d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java @@ -60,6 +60,7 @@ import org.thoughtcrime.securesms.jobs.IndividualSendJob; import org.thoughtcrime.securesms.jobs.ReactionSendJob; import org.thoughtcrime.securesms.jobs.RemoteDeleteSendJob; import org.thoughtcrime.securesms.jobs.ResumableUploadSpecJob; +import org.thoughtcrime.securesms.jobs.SmsSendJob; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.linkpreview.LinkPreview; import org.thoughtcrime.securesms.mediasend.Media; @@ -201,11 +202,11 @@ public class MessageSender { List jobDependencyIds = (dependencies != null) ? dependencies.stream().map(UploadDependencyGraph.Node::getJobId).collect(Collectors.toList()) : Collections.emptyList(); - sendMediaMessage(context, - recipient, - false, - messageId, - jobDependencyIds); + sendMessageInternal(context, + recipient, + SendType.SIGNAL, + messageId, + jobDependencyIds); } onMessageSent(); @@ -218,7 +219,7 @@ public class MessageSender { public static long send(final Context context, final OutgoingMessage message, final long threadId, - final boolean forceSms, + @NonNull SendType sendType, @Nullable final String metricId, @Nullable final MessageTable.InsertListener insertListener) { @@ -229,7 +230,7 @@ public class MessageSender { long allocatedThreadId = threadTable.getOrCreateValidThreadId(message.getRecipient(), threadId, message.getDistributionType()); Recipient recipient = message.getRecipient(); - long messageId = database.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, recipient, message, allocatedThreadId), allocatedThreadId, forceSms, insertListener); + long messageId = database.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, recipient, message, allocatedThreadId), allocatedThreadId, sendType != SendType.SIGNAL, insertListener); if (message.getRecipient().isGroup() && message.getAttachments().isEmpty() && message.getLinkPreviews().isEmpty() && message.getSharedContacts().isEmpty()) { SignalLocalMetrics.GroupMessageSend.onInsertedIntoDatabase(messageId, metricId); @@ -237,7 +238,7 @@ public class MessageSender { SignalLocalMetrics.GroupMessageSend.cancel(metricId); } - sendMediaMessage(context, recipient, forceSms, messageId, Collections.emptyList()); + sendMessageInternal(context, recipient, sendType, messageId, Collections.emptyList()); onMessageSent(); threadTable.update(allocatedThreadId, true); @@ -274,7 +275,7 @@ public class MessageSender { attachmentDatabase.updateMessageId(attachmentIds, messageId, message.getStoryType().isStory()); - sendMediaMessage(context, recipient, false, messageId, jobIds); + sendMessageInternal(context, recipient, SendType.SIGNAL, messageId, jobIds); onMessageSent(); threadTable.update(allocatedThreadId, true); @@ -390,7 +391,7 @@ public class MessageSender { long messageId = messageIds.get(i); Recipient recipient = messages.get(i).getRecipient(); - if (isLocalSelfSend(context, recipient, false)) { + if (isLocalSelfSend(context, recipient, SendType.SIGNAL)) { sendLocalMediaSelf(context, messageId); } else if (recipient.isPushGroup()) { jobManager.add(new PushGroupSendJob(messageId, recipient.getId(), Collections.emptySet(), true), messageDependsOnIds, recipient.getId().toQueueKey()); @@ -407,7 +408,7 @@ public class MessageSender { * be enqueued (like in the case of a local self-send). */ public static @Nullable PreUploadResult preUploadPushAttachment(@NonNull Context context, @NonNull Attachment attachment, @Nullable Recipient recipient, @NonNull Media media) { - if (isLocalSelfSend(context, recipient, false)) { + if (isLocalSelfSend(context, recipient, SendType.SIGNAL)) { return null; } Log.i(TAG, "Pre-uploading attachment for " + (recipient != null ? recipient.getId() : "null")); @@ -488,7 +489,21 @@ public class MessageSender { boolean forceSms = messageRecord.isForcedSms(); Recipient recipient = messageRecord.getRecipient(); - sendMediaMessage(context, recipient, forceSms, messageId, Collections.emptyList()); + SendType sendType; + + if (forceSms) { + Recipient threadRecipient = SignalDatabase.threads().getRecipientForThreadId(messageRecord.getThreadId()); + + if ((threadRecipient != null && threadRecipient.isGroup()) || SignalDatabase.attachments().getAttachmentsForMessage(messageId).size() > 0) { + sendType = SendType.MMS; + } else { + sendType = SendType.SMS; + } + } else { + sendType = SendType.SIGNAL; + } + + sendMessageInternal(context, recipient, sendType, messageId, Collections.emptyList()); onMessageSent(); } @@ -504,18 +519,20 @@ public class MessageSender { return outgoingMessage; } - private static void sendMediaMessage(Context context, Recipient recipient, boolean forceSms, long messageId, @NonNull Collection uploadJobIds) + private static void sendMessageInternal(Context context, Recipient recipient, SendType sendType, long messageId, @NonNull Collection uploadJobIds) { - if (isLocalSelfSend(context, recipient, forceSms)) { + if (isLocalSelfSend(context, recipient, sendType)) { sendLocalMediaSelf(context, messageId); } else if (recipient.isPushGroup()) { sendGroupPush(context, recipient, messageId, Collections.emptySet(), uploadJobIds); } else if (recipient.isDistributionList()) { sendDistributionList(context, recipient, messageId, Collections.emptySet(), uploadJobIds); - } else if (!forceSms && isPushMediaSend(context, recipient)) { + } else if (sendType == SendType.SIGNAL && isPushMediaSend(context, recipient)) { sendMediaPush(context, recipient, messageId, uploadJobIds); - } else { + } else if (sendType == SendType.MMS) { sendMms(context, messageId); + } else { + sendSms(recipient, messageId); } } @@ -557,6 +574,11 @@ public class MessageSender { MmsSendJob.enqueue(context, jobManager, messageId); } + private static void sendSms(Recipient recipient, long messageId) { + JobManager jobManager = ApplicationDependencies.getJobManager(); + jobManager.add(new SmsSendJob(messageId, recipient)); + } + private static boolean isPushMediaSend(Context context, Recipient recipient) { if (!SignalStore.account().isRegistered()) { return false; @@ -585,10 +607,10 @@ public class MessageSender { } } - public static boolean isLocalSelfSend(@NonNull Context context, @Nullable Recipient recipient, boolean forceSms) { + public static boolean isLocalSelfSend(@NonNull Context context, @Nullable Recipient recipient, SendType sendType) { return recipient != null && recipient.isSelf() && - !forceSms && + sendType == SendType.SIGNAL && SignalStore.account().isRegistered() && !TextSecurePreferences.isMultiDevice(context); } @@ -705,4 +727,8 @@ public class MessageSender { public enum MessageSentEvent { INSTANCE } + + public enum SendType { + SIGNAL, SMS, MMS + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/direct/StoryDirectReplyRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/direct/StoryDirectReplyRepository.kt index 2bbf524f80..419127944f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/direct/StoryDirectReplyRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/direct/StoryDirectReplyRepository.kt @@ -64,7 +64,7 @@ class StoryDirectReplyRepository(context: Context) { null ), threadId, - false, + MessageSender.SendType.SIGNAL, null ) { emitter.onComplete() diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplySender.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplySender.kt index 0e0eac8dd8..8e9a741dba 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplySender.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplySender.kt @@ -53,7 +53,7 @@ object StoryGroupReplySender { isSecure = true ), message.threadId, - false, + MessageSender.SendType.SIGNAL, null ) { it.onComplete()