示例#1
0
  public void setTimestampRead(SyncMessageId messageId) {
    SQLiteDatabase database = databaseHelper.getWritableDatabase();
    Cursor cursor = null;

    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()) {
        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));

            ContentValues contentValues = new ContentValues();
            contentValues.put(READ, 1);

            database.update(
                TABLE_NAME,
                contentValues,
                ID_WHERE,
                new String[] {cursor.getLong(cursor.getColumnIndexOrThrow(ID)) + ""});

            DatabaseFactory.getThreadDatabase(context).updateReadState(threadId);
            notifyConversationListeners(threadId);
          }
        } catch (InvalidNumberException e) {
          Log.w(TAG, e);
        }
      }
    } finally {
      if (cursor != null) cursor.close();
    }
  }
示例#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();
    }
  }