diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java index 096e48a5f7..223c525a5c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java @@ -254,6 +254,13 @@ public class MmsSmsDatabase extends Database { DatabaseFactory.getMmsDatabase(context).getMessageCountForThread(threadId, beforeTime); } + public int getConversationCountForThreadSummary(long threadId) { + int count = DatabaseFactory.getSmsDatabase(context).getMessageCountForThreadSummary(threadId); + count += DatabaseFactory.getMmsDatabase(context).getMessageCountForThread(threadId); + + return count; + } + public int getInsecureSentCount(long threadId) { int count = DatabaseFactory.getSmsDatabase(context).getInsecureMessagesSentForThread(threadId); count += DatabaseFactory.getMmsDatabase(context).getInsecureMessagesSentForThread(threadId); 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 e419c95cee..97a351bd59 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java @@ -48,6 +48,7 @@ import org.thoughtcrime.securesms.sms.IncomingTextMessage; import org.thoughtcrime.securesms.sms.OutgoingTextMessage; import org.thoughtcrime.securesms.util.Base64; import org.thoughtcrime.securesms.util.JsonUtils; +import org.thoughtcrime.securesms.util.SqlUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.whispersystems.libsignal.util.guava.Optional; @@ -226,6 +227,26 @@ public class SmsDatabase extends MessagingDatabase { } } + public int getMessageCountForThreadSummary(long threadId) { + SQLiteDatabase db = databaseHelper.getReadableDatabase(); + + String[] cols = { "COUNT(*)" }; + String query = THREAD_ID + " = ? AND (NOT " + TYPE + " & ? AND TYPE != ?)"; + long type = Types.END_SESSION_BIT | Types.KEY_EXCHANGE_IDENTITY_UPDATE_BIT | Types.KEY_EXCHANGE_IDENTITY_VERIFIED_BIT; + String[] args = SqlUtil.buildArgs(threadId, type, Types.PROFILE_CHANGE_TYPE); + + try (Cursor cursor = db.query(TABLE_NAME, cols, query, args, null, null, null)) { + if (cursor != null && cursor.moveToFirst()) { + int count = cursor.getInt(0); + if (count > 0) { + return getMessageCountForThread(threadId); + } + } + } + + return 0; + } + public int getMessageCountForThread(long threadId) { SQLiteDatabase db = databaseHelper.getReadableDatabase(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java index 7e7ef0e3d4..7a210bb538 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java @@ -887,7 +887,7 @@ public class ThreadDatabase extends Database { public boolean update(long threadId, boolean unarchive, boolean allowDeletion) { MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context); - long count = mmsSmsDatabase.getConversationCount(threadId); + long count = mmsSmsDatabase.getConversationCountForThreadSummary(threadId); if (count == 0) { if (allowDeletion) {