diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java index 25abddec7b..bd05c0a7a7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java @@ -383,6 +383,24 @@ public class SmsDatabase extends MessagingDatabase { } protected Optional insertMessageInbox(IncomingTextMessage message, long type, long serverTimestamp, boolean runIncrement, boolean runThreadUpdate) { + Recipient recipient = Recipient.from(context, message.getSender(), true); + + Recipient groupRecipient; + + if (message.getGroupId() == null) { + groupRecipient = null; + } else { + groupRecipient = Recipient.from(context, message.getGroupId(), true); + } + + boolean unread = (Util.isDefaultSmsProvider(context) || + message.isSecureMessage() || message.isGroup() || message.isCallInfo()); + + long threadId; + + if (groupRecipient == null) threadId = DatabaseComponent.get(context).threadDatabase().getOrCreateThreadIdFor(recipient); + else threadId = DatabaseComponent.get(context).threadDatabase().getOrCreateThreadIdFor(groupRecipient); + if (message.isSecureMessage()) { type |= Types.SECURE_MESSAGE_BIT; } else if (message.isGroup()) { @@ -396,40 +414,11 @@ public class SmsDatabase extends MessagingDatabase { CallMessageType callMessageType = message.getCallType(); if (callMessageType != null) { - switch (callMessageType) { - case CALL_OUTGOING: - type |= Types.OUTGOING_CALL_TYPE; - break; - case CALL_INCOMING: - type |= Types.INCOMING_CALL_TYPE; - break; - case CALL_MISSED: - type |= Types.MISSED_CALL_TYPE; - break; - case CALL_FIRST_MISSED: - type |= Types.FIRST_MISSED_CALL_TYPE; - break; - } + long callMessageTypeMask = getCallMessageTypeMask(callMessageType); + type |= callMessageTypeMask; + deleteInfoMessages(threadId, callMessageTypeMask); } - Recipient recipient = Recipient.from(context, message.getSender(), true); - - Recipient groupRecipient; - - if (message.getGroupId() == null) { - groupRecipient = null; - } else { - groupRecipient = Recipient.from(context, message.getGroupId(), true); - } - - boolean unread = (Util.isDefaultSmsProvider(context) || - message.isSecureMessage() || message.isGroup() || message.isCallInfo()); - - long threadId; - - if (groupRecipient == null) threadId = DatabaseComponent.get(context).threadDatabase().getOrCreateThreadIdFor(recipient); - else threadId = DatabaseComponent.get(context).threadDatabase().getOrCreateThreadIdFor(groupRecipient); - ContentValues values = new ContentValues(6); values.put(ADDRESS, message.getSender().serialize()); values.put(ADDRESS_DEVICE_ID, message.getSenderDeviceId()); @@ -479,6 +468,25 @@ public class SmsDatabase extends MessagingDatabase { } } + private long getCallMessageTypeMask(CallMessageType callMessageType) { + long typeMask = 0; + switch (callMessageType) { + case CALL_OUTGOING: + typeMask = Types.OUTGOING_CALL_TYPE; + break; + case CALL_INCOMING: + typeMask = Types.INCOMING_CALL_TYPE; + break; + case CALL_MISSED: + typeMask = Types.MISSED_CALL_TYPE; + break; + case CALL_FIRST_MISSED: + typeMask = Types.FIRST_MISSED_CALL_TYPE; + break; + } + return typeMask; + } + public Optional insertMessageInbox(IncomingTextMessage message, boolean runIncrement, boolean runThreadUpdate) { return insertMessageInbox(message, Types.BASE_INBOX_TYPE, 0, runIncrement, runThreadUpdate); } @@ -618,6 +626,12 @@ public class SmsDatabase extends MessagingDatabase { return getMessage(messageId); } + public void deleteInfoMessages(long threadId, long type) { + String where = THREAD_ID + " = ? AND (" + TYPE + " & " + type + ") <> 0"; + int updated = getWritableDatabase().delete(TABLE_NAME, where, new String[] {threadId+""}); + notifyConversationListeners(threadId); + } + private boolean isDuplicate(IncomingTextMessage message, long threadId) { SQLiteDatabase database = databaseHelper.getReadableDatabase(); Cursor cursor = database.query(TABLE_NAME, null, DATE_SENT + " = ? AND " + ADDRESS + " = ? AND " + THREAD_ID + " = ?",