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 12d4d355b6..2a15f5a945 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java @@ -724,6 +724,29 @@ public class ThreadDatabase extends Database { return positions; } + public long getTabBarUnreadCount() { + String[] countProjection = SqlUtil.buildArgs("COUNT(*)"); + String[] sumProjection = SqlUtil.buildArgs("SUM(" + UNREAD_COUNT + ")"); + String where = ARCHIVED + " = 0 AND " + MEANINGFUL_MESSAGES + " != 0 AND " + READ + " = ?"; + String[] countArgs = SqlUtil.buildArgs(ReadStatus.FORCED_UNREAD.serialize()); + String[] sumArgs = SqlUtil.buildArgs(ReadStatus.UNREAD.serialize()); + long total = 0; + + try (Cursor cursor = getReadableDatabase().query(TABLE_NAME, countProjection, where, countArgs, null, null, null)) { + if (cursor != null && cursor.moveToFirst()) { + total += cursor.getLong(0); + } + } + + try (Cursor cursor = getReadableDatabase().query(TABLE_NAME, sumProjection, where, sumArgs, null, null, null)) { + if (cursor != null && cursor.moveToFirst()) { + total += cursor.getLong(0); + } + } + + return total; + } + public Cursor getArchivedConversationList(long offset, long limit) { return getConversationList("1", offset, limit); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabRepository.kt index 79176482ea..d7df813ecf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabRepository.kt @@ -11,12 +11,12 @@ class ConversationListTabRepository { fun getNumberOfUnreadConversations(): Observable { return Observable.create { val listener = DatabaseObserver.Observer { - it.onNext(SignalDatabase.threads.unreadThreadCount) + it.onNext(SignalDatabase.threads.tabBarUnreadCount) } ApplicationDependencies.getDatabaseObserver().registerConversationListObserver(listener) it.setCancellable { ApplicationDependencies.getDatabaseObserver().unregisterObserver(listener) } - it.onNext(SignalDatabase.threads.unreadThreadCount) + it.onNext(SignalDatabase.threads.tabBarUnreadCount) }.subscribeOn(Schedulers.io()) }