diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/MmsDatabaseTest_stories.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/MmsDatabaseTest_stories.kt index aafbf618ec..afe5c5fdb5 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/MmsDatabaseTest_stories.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/MmsDatabaseTest_stories.kt @@ -138,4 +138,57 @@ class MmsDatabaseTest_stories { // THEN assertEquals(randomizedOrderedIds.reversed(), resultOrderedIds) } + + @Test + fun given15Stories_whenIGetOrderedStoryRecipientsAndIds_thenIExpectUnviewedThenInterspersedViewedAndSelfSendsAllDescending() { + val myStoryThread = SignalDatabase.threads.getOrCreateThreadIdFor(myStory) + + val unviewedIds: List = (0 until 5).map { + Thread.sleep(5) + MmsHelper.insert( + IncomingMediaMessage( + from = recipients[it], + sentTimeMillis = System.currentTimeMillis(), + serverTimeMillis = 2, + receivedTimeMillis = 2, + storyType = StoryType.STORY_WITH_REPLIES, + ), + -1L + ).get().messageId + } + + val viewedIds: List = (0 until 5).map { + Thread.sleep(5) + MmsHelper.insert( + IncomingMediaMessage( + from = recipients[it], + sentTimeMillis = System.currentTimeMillis(), + serverTimeMillis = 2, + receivedTimeMillis = 2, + storyType = StoryType.STORY_WITH_REPLIES, + ), + -1L + ).get().messageId + } + + val interspersedIds: List = (0 until 10).map { + Thread.sleep(5) + if (it % 2 == 0) { + SignalDatabase.mms.setIncomingMessageViewed(viewedIds[it / 2]) + viewedIds[it / 2] + } else { + MmsHelper.insert( + recipient = myStory, + sentTimeMillis = System.currentTimeMillis(), + storyType = StoryType.STORY_WITH_REPLIES, + threadId = myStoryThread + ) + } + } + + val result = SignalDatabase.mms.orderedStoryRecipientsAndIds + val resultOrderedIds = result.map { it.messageId } + + assertEquals(unviewedIds.reversed() + interspersedIds.reversed(), resultOrderedIds) + } } 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 b676af27a2..b44c2777e6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java @@ -691,9 +691,11 @@ public class MmsDatabase extends MessageDatabase { + "WHERE is_story > 0 AND remote_deleted = 0\n" + "ORDER BY\n" + "is_unread DESC,\n" - + "CASE WHEN is_outgoing = 0 AND viewed_receipt_count = 0 THEN mms.date END DESC,\n" - + "CASE WHEN is_outgoing = 0 AND viewed_receipt_count > 0 THEN receipt_timestamp END DESC,\n" - + "CASE WHEN is_outgoing = 1 THEN mms.date END DESC"; + + "CASE\n" + + "WHEN is_outgoing = 0 AND viewed_receipt_count = 0 THEN mms.date\n" + + "WHEN is_outgoing = 0 AND viewed_receipt_count > 0 THEN receipt_timestamp\n" + + "WHEN is_outgoing = 1 THEN mms.date\n" + + "END DESC"; List results; try (Cursor cursor = db.rawQuery(query, null)) {