/*protected Pair<long, long> updateMessageBodyAndType(long messageId, String body, long maskOff, long maskOn) * { * SQLiteDatabase db = databaseHelper.getWritableDatabase(); * db.execSQL("UPDATE " + TABLE_NAME + " SET " + BODY + " = ?, " + * TYPE + " = (" + TYPE + " & " + (MessageTypes.TOTAL_MASK - maskOff) + " | " + maskOn + ") " + * "WHERE " + ID + " = ?", * new String[] { body, messageId + "" }); * * long threadId = getThreadIdForMessage(messageId); * * DatabaseFactory.getThreadDatabase().update(threadId); * notifyConversationListeners(threadId); * //notifyConversationListListeners(); * * return new Pair<long, long>(messageId, threadId); * } * * public Pair<long, long> copyMessageInbox(long messageId) * { * Reader reader = readerFor(getMessage(messageId)); * SmsMessageRecord record = reader.getNext(); * * ContentValues contentValues = new ContentValues(); * contentValues.put(TYPE, (record.getType() & ~MessageTypes.BASE_TYPE_MASK) | MessageTypes.BASE_INBOX_TYPE); * contentValues.put(ADDRESS, record.getIndividualRecipient().getNumber()); * contentValues.put(ADDRESS_DEVICE_ID, record.getRecipientDeviceId()); * contentValues.put(DATE_RECEIVED, System.currentTimeMillis()); * contentValues.put(DATE_SENT, record.getDateSent()); * contentValues.put(PROTOCOL, 31337); * contentValues.put(READ, 0); * contentValues.put(BODY, record.getBody().getBody()); * contentValues.put(THREAD_ID, record.getThreadId()); * * SQLiteDatabase db = databaseHelper.getWritableDatabase(); * long newMessageId = db.insert(TABLE_NAME, null, contentValues); * * DatabaseFactory.getThreadDatabase(context).update(record.getThreadId()); * notifyConversationListeners(record.getThreadId()); * * jobManager.add(new TrimThreadJob(context, record.getThreadId())); * reader.close(); * * return new Pair<>(newMessageId, record.getThreadId()); * } */ protected Pair <long, long> insertMessageInbox(IncomingTextMessage message, long type) { if (message.isPreKeyBundle()) { type |= MessageTypes.KEY_EXCHANGE_BIT | MessageTypes.KEY_EXCHANGE_BUNDLE_BIT; } else if (message.isSecureMessage()) { type |= MessageTypes.SECURE_MESSAGE_BIT; } /*else if (message.isGroup()) TODO: GROUP enable * { * type |= MessageTypes.SECURE_MESSAGE_BIT; * if (((IncomingGroupMessage)message).isUpdate()) type |= MessageTypes.GROUP_UPDATE_BIT; * else if (((IncomingGroupMessage)message).isQuit()) type |= MessageTypes.GROUP_QUIT_BIT; * }*/ else if (message.isEndSession()) { type |= MessageTypes.SECURE_MESSAGE_BIT; type |= MessageTypes.END_SESSION_BIT; } if (message.isPush()) { type |= MessageTypes.PUSH_MESSAGE_BIT; } Recipients recipients; if (message.getSender() != null) { recipients = RecipientFactory.getRecipientsFromString(message.getSender(), true); } else { //Log.w(TAG, "Sender is null, returning unknown recipient"); recipients = new Recipients(Recipient.getUnknownRecipient()); } Recipients groupRecipients; if (message.getGroupId() == null) { groupRecipients = null; } else { groupRecipients = RecipientFactory.getRecipientsFromString(message.getGroupId(), true); } bool unread = /*org.thoughtcrime.securesms.util.Util.isDefaultSmsProvider() ||*/ message.isSecureMessage() || message.isPreKeyBundle(); long threadId; if (groupRecipients == null) { threadId = DatabaseFactory.getThreadDatabase().GetThreadIdForRecipients(recipients); // TODO CHECK } else { threadId = DatabaseFactory.getThreadDatabase().GetThreadIdForRecipients(groupRecipients); } /*ContentValues values = new ContentValues(6); * values.put(ADDRESS, message.getSender()); * values.put(ADDRESS_DEVICE_ID, message.getSenderDeviceId()); * values.put(DATE_RECEIVED, System.currentTimeMillis()); * values.put(DATE_SENT, message.getSentTimestampMillis()); * values.put(PROTOCOL, message.getProtocol()); * values.put(READ, unread ? 0 : 1); * * if (!TextUtils.isEmpty(message.getPseudoSubject())) * values.put(SUBJECT, message.getPseudoSubject()); * * values.put(REPLY_PATH_PRESENT, message.isReplyPathPresent()); * values.put(SERVICE_CENTER, message.getServiceCenterAddress()); * values.put(BODY, message.getMessageBody()); * values.put(TYPE, type); * values.put(THREAD_ID, threadId);*/ var insert = new Message() { Address = message.getSender(), AddressDeviceId = message.getSenderDeviceId(), DateReceived = TimeUtil.GetDateTimeMillis(), // force precision to millis not to ticks DateSent = TimeUtil.GetDateTime(message.getSentTimestampMillis()), Read = !unread, Body = message.getMessageBody(), Type = type, ThreadId = threadId }; long rows = conn.Insert(insert); long messageId = insert.MessageId; if (unread) { DatabaseFactory.getThreadDatabase().SetUnread(threadId); } DatabaseFactory.getThreadDatabase().Refresh(threadId); notifyConversationListeners(threadId); //jobManager.add(new TrimThreadJob(context, threadId)); // TODO return(new Pair <long, long>(messageId, threadId)); }