Esempio n. 1
0
  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;
  }
Esempio n. 2
0
  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);
    }
  }