diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java index 4d1bf97df..16abe806f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java @@ -190,10 +190,10 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns public abstract @NonNull Reader getAllStoriesFor(@NonNull RecipientId recipientId); public abstract @NonNull MessageId getStoryId(@NonNull RecipientId authorId, long sentTimestamp) throws NoSuchMessageException; public abstract int getNumberOfStoryReplies(long parentStoryId); + public abstract long getUnreadStoryThreadCount(); public abstract boolean containsStories(long threadId); public abstract boolean hasSelfReplyInStory(long parentStoryId); public abstract @NonNull Cursor getStoryReplies(long parentStoryId); - public abstract long getUnreadStoryCount(); public abstract @Nullable Long getOldestStorySendTimestamp(); public abstract int deleteStoriesOlderThan(long timestamp); public abstract @NonNull StoryViewState getStoryViewState(@NonNull RecipientId recipientId); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java index e51ae6cce..72bc45a16 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java @@ -649,6 +649,24 @@ public class MmsDatabase extends MessageDatabase { throw new NoSuchMessageException("No story sent at " + sentTimestamp); } + @Override + public long getUnreadStoryThreadCount() { + SQLiteDatabase db = getReadableDatabase(); + String query = "SELECT DISTINCT " + ThreadDatabase.RECIPIENT_ID + "\n" + + "FROM " + TABLE_NAME + "\n" + + "JOIN " + ThreadDatabase.TABLE_NAME + "\n" + + "ON " + TABLE_NAME + "." + THREAD_ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.ID + "\n" + + "WHERE " + IS_STORY_CLAUSE + " AND (" + getOutgoingTypeClause() + ") = 0 AND " + VIEWED_RECEIPT_COUNT + " = 0"; + + try (Cursor cursor = db.rawQuery(query, null)) { + if (cursor != null) { + return cursor.getCount(); + } + } + + return 0; + } + @Override public @NonNull List getOrderedStoryRecipientsAndIds() { SQLiteDatabase db = getReadableDatabase(); @@ -697,16 +715,6 @@ public class MmsDatabase extends MessageDatabase { return rawQuery(where, whereArgs, true, 0); } - @Override - public long getUnreadStoryCount() { - String[] columns = new String[]{"COUNT(*)"}; - String where = IS_STORY_CLAUSE + " AND NOT (" + getOutgoingTypeClause() + ") AND " + VIEWED_RECEIPT_COUNT + " = 0"; - - try (Cursor cursor = getReadableDatabase().query(TABLE_NAME, columns, where, null, null, null, null, null)) { - return cursor != null && cursor.moveToFirst() ? cursor.getInt(0) : 0; - } - } - @Override public int getNumberOfStoryReplies(long parentStoryId) { SQLiteDatabase db = databaseHelper.getSignalReadableDatabase(); 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 dacc55b00..e7b4011a1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java @@ -1426,6 +1426,11 @@ public class SmsDatabase extends MessageDatabase { throw new UnsupportedOperationException(); } + @Override + public long getUnreadStoryThreadCount() { + throw new UnsupportedOperationException(); + } + @Override public boolean containsStories(long threadId) { throw new UnsupportedOperationException(); @@ -1441,11 +1446,6 @@ public class SmsDatabase extends MessageDatabase { throw new UnsupportedOperationException(); } - @Override - public long getUnreadStoryCount() { - throw new UnsupportedOperationException(); - } - @Override public @Nullable Long getOldestStorySendTimestamp() { throw new UnsupportedOperationException(); 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 87c98d04e..dcdbafd93 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java @@ -724,29 +724,6 @@ 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 d7df813ec..72f215967 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,24 +11,24 @@ class ConversationListTabRepository { fun getNumberOfUnreadConversations(): Observable { return Observable.create { val listener = DatabaseObserver.Observer { - it.onNext(SignalDatabase.threads.tabBarUnreadCount) + it.onNext(SignalDatabase.threads.unreadThreadCount) } ApplicationDependencies.getDatabaseObserver().registerConversationListObserver(listener) it.setCancellable { ApplicationDependencies.getDatabaseObserver().unregisterObserver(listener) } - it.onNext(SignalDatabase.threads.tabBarUnreadCount) + it.onNext(SignalDatabase.threads.unreadThreadCount) }.subscribeOn(Schedulers.io()) } fun getNumberOfUnseenStories(): Observable { return Observable.create { val listener = DatabaseObserver.Observer { - it.onNext(SignalDatabase.mms.unreadStoryCount) + it.onNext(SignalDatabase.mms.unreadStoryThreadCount) } ApplicationDependencies.getDatabaseObserver().registerConversationListObserver(listener) it.setCancellable { ApplicationDependencies.getDatabaseObserver().unregisterObserver(listener) } - it.onNext(SignalDatabase.mms.unreadStoryCount) + it.onNext(SignalDatabase.mms.unreadStoryThreadCount) }.subscribeOn(Schedulers.io()) } }