public long insertMessageOutbox( @NonNull MasterSecretUnion masterSecret, @NonNull OutgoingMediaMessage message, long threadId, boolean forceSms) throws MmsException { long type = Types.BASE_OUTBOX_TYPE; if (masterSecret.getMasterSecret().isPresent()) type |= Types.ENCRYPTION_SYMMETRIC_BIT; else type |= Types.ENCRYPTION_ASYMMETRIC_BIT; if (message.isSecure()) type |= Types.SECURE_MESSAGE_BIT; if (forceSms) type |= Types.MESSAGE_FORCE_SMS_BIT; if (message.isGroup()) { if (((OutgoingGroupMediaMessage) message).isGroupUpdate()) type |= Types.GROUP_UPDATE_BIT; else if (((OutgoingGroupMediaMessage) message).isGroupQuit()) type |= Types.GROUP_QUIT_BIT; } List<String> recipientNumbers = message.getRecipients().toNumberStringList(true); MmsAddresses addresses; if (!message.getRecipients().isSingleRecipient() && message.getDistributionType() == ThreadDatabase.DistributionTypes.BROADCAST) { addresses = MmsAddresses.forBcc(recipientNumbers); } else { addresses = MmsAddresses.forTo(recipientNumbers); } ContentValues contentValues = new ContentValues(); contentValues.put(DATE_SENT, message.getSentTimeMillis()); contentValues.put(MESSAGE_TYPE, PduHeaders.MESSAGE_TYPE_SEND_REQ); contentValues.put(MESSAGE_BOX, type); contentValues.put(THREAD_ID, threadId); contentValues.put(READ, 1); contentValues.put(DATE_RECEIVED, System.currentTimeMillis()); contentValues.remove(ADDRESS); long messageId = insertMediaMessage( masterSecret, addresses, message.getBody(), message.getAttachments(), contentValues); jobManager.add(new TrimThreadJob(context, threadId)); return messageId; }
public long copyMessageInbox(MasterSecret masterSecret, long messageId) throws MmsException { try { OutgoingMediaMessage request = getOutgoingMessage(masterSecret, messageId); ContentValues contentValues = new ContentValues(); contentValues.put(ADDRESS, request.getRecipients().getPrimaryRecipient().getNumber()); contentValues.put(DATE_SENT, request.getSentTimeMillis()); contentValues.put( MESSAGE_BOX, Types.BASE_INBOX_TYPE | Types.SECURE_MESSAGE_BIT | Types.ENCRYPTION_SYMMETRIC_BIT); contentValues.put(THREAD_ID, getThreadIdForMessage(messageId)); contentValues.put(READ, 1); contentValues.put(DATE_RECEIVED, contentValues.getAsLong(DATE_SENT)); List<Attachment> attachments = new LinkedList<>(); for (Attachment attachment : request.getAttachments()) { DatabaseAttachment databaseAttachment = (DatabaseAttachment) attachment; attachments.add( new DatabaseAttachment( databaseAttachment.getAttachmentId(), databaseAttachment.getMmsId(), databaseAttachment.hasData(), databaseAttachment.getContentType(), AttachmentDatabase.TRANSFER_PROGRESS_DONE, databaseAttachment.getSize(), databaseAttachment.getLocation(), databaseAttachment.getKey(), databaseAttachment.getRelay())); } return insertMediaMessage( new MasterSecretUnion(masterSecret), MmsAddresses.forTo(request.getRecipients().toNumberStringList(false)), request.getBody(), attachments, contentValues); } catch (NoSuchMessageException e) { throw new MmsException(e); } }