Esempio n. 1
0
  protected long insertMessageOutbox(
      long threadId, OutgoingTextMessage message, long type, boolean forceSms, long date) {
    if (message.isKeyExchange()) type |= Types.KEY_EXCHANGE_BIT;
    else if (message.isSecureMessage()) type |= Types.SECURE_MESSAGE_BIT;
    else if (message.isEndSession()) type |= Types.END_SESSION_BIT;
    if (forceSms) type |= Types.MESSAGE_FORCE_SMS_BIT;

    String address = message.getRecipients().getPrimaryRecipient().getNumber();

    ContentValues contentValues = new ContentValues(6);
    contentValues.put(ADDRESS, PhoneNumberUtils.formatNumber(address));
    contentValues.put(THREAD_ID, threadId);
    contentValues.put(BODY, message.getMessageBody());
    contentValues.put(DATE_RECEIVED, System.currentTimeMillis());
    contentValues.put(DATE_SENT, date);
    contentValues.put(READ, 1);
    contentValues.put(TYPE, type);
    contentValues.put(SUBSCRIPTION_ID, message.getSubscriptionId());
    contentValues.put(EXPIRES_IN, message.getExpiresIn());

    try {
      contentValues.put(
          RECEIPT_COUNT, earlyReceiptCache.remove(date, canonicalizeNumber(context, address)));
    } catch (InvalidNumberException e) {
      Log.w(TAG, e);
    }

    SQLiteDatabase db = databaseHelper.getWritableDatabase();
    long messageId = db.insert(TABLE_NAME, ADDRESS, contentValues);

    DatabaseFactory.getThreadDatabase(context).update(threadId, true);
    notifyConversationListeners(threadId);
    jobManager.add(new TrimThreadJob(context, threadId));

    return messageId;
  }
Esempio n. 2
0
  public void incrementDeliveryReceiptCount(SyncMessageId messageId) {
    SQLiteDatabase database = databaseHelper.getWritableDatabase();
    Cursor cursor = null;
    boolean foundMessage = false;

    try {
      cursor =
          database.query(
              TABLE_NAME,
              new String[] {ID, THREAD_ID, ADDRESS, TYPE},
              DATE_SENT + " = ?",
              new String[] {String.valueOf(messageId.getTimetamp())},
              null,
              null,
              null,
              null);

      while (cursor.moveToNext()) {
        if (Types.isOutgoingMessageType(cursor.getLong(cursor.getColumnIndexOrThrow(TYPE)))) {
          try {
            String theirAddress = canonicalizeNumber(context, messageId.getAddress());
            String ourAddress =
                canonicalizeNumber(
                    context, cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS)));

            if (ourAddress.equals(theirAddress)) {
              long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_ID));

              database.execSQL(
                  "UPDATE "
                      + TABLE_NAME
                      + " SET "
                      + RECEIPT_COUNT
                      + " = "
                      + RECEIPT_COUNT
                      + " + 1 WHERE "
                      + ID
                      + " = ?",
                  new String[] {String.valueOf(cursor.getLong(cursor.getColumnIndexOrThrow(ID)))});

              DatabaseFactory.getThreadDatabase(context).update(threadId, false);
              notifyConversationListeners(threadId);
              foundMessage = true;
            }
          } catch (InvalidNumberException e) {
            Log.w(TAG, e);
          }
        }
      }

      if (!foundMessage) {
        try {
          earlyReceiptCache.increment(
              messageId.getTimetamp(), canonicalizeNumber(context, messageId.getAddress()));
        } catch (InvalidNumberException e) {
          Log.w(TAG, e);
        }
      }

    } finally {
      if (cursor != null) cursor.close();
    }
  }