diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallEventCache.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallEventCache.kt index 8c3986b6f1..96546e1188 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallEventCache.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallEventCache.kt @@ -134,7 +134,7 @@ class CallEventCache( } private fun isMissedGroupCall(call: CacheRecord): Boolean { - return call.event == CallTable.Event.GENERIC_GROUP_CALL.code && !call.didLocalUserJoin && !call.isGroupCallActive + return call.type == Type.GROUP_CALL.code && call.event == CallTable.Event.GENERIC_GROUP_CALL.code && !call.didLocalUserJoin && !call.isGroupCallActive } private fun isWithinTimeout(parent: CacheRecord, child: CacheRecord): Boolean { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt index d8ee10d25f..9935d46026 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt @@ -1425,7 +1425,7 @@ class CallTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTabl companion object Deserializer : Serializer { private fun isDisplayedAsMissedCallInUi(call: Call): Boolean { - return call.direction == Direction.INCOMING && (call.event in Event.DISPLAY_AS_MISSED_CALL || (call.event == Event.GENERIC_GROUP_CALL && !call.didLocalUserJoin && !call.isGroupCallActive)) + return call.direction == Direction.INCOMING && (call.event in Event.DISPLAY_AS_MISSED_CALL || (call.type == Type.GROUP_CALL && call.event == Event.GENERIC_GROUP_CALL && !call.didLocalUserJoin && !call.isGroupCallActive)) } fun getMessageType(type: Type, direction: Direction, event: Event): Long { diff --git a/app/src/test/java/org/thoughtcrime/securesms/calls/log/CallEventCacheTest.kt b/app/src/test/java/org/thoughtcrime/securesms/calls/log/CallEventCacheTest.kt index c208e7a799..537db95427 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/calls/log/CallEventCacheTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/calls/log/CallEventCacheTest.kt @@ -286,6 +286,51 @@ class CallEventCacheTest { assertThat(result[2].callLinkPeekInfo).isNull() } + @Test + fun `Given an unjoined call link, when I filter by missed, then I expect nothing`() { + val testData = listOf( + createCacheRecord( + callId = 1, + type = Type.AD_HOC_CALL.code, + event = Event.GENERIC_GROUP_CALL.code + ) + ) + + val filterState = CallEventCache.FilterState(filter = CallLogFilter.MISSED) + val result = CallEventCache.clusterCallEvents(testData, filterState) + assertThat(result).isEmpty() + } + + @Test + fun `Given an unjoined group call, when I filter by missed, then I expect one entry`() { + val testData = listOf( + createCacheRecord( + callId = 1, + type = Type.GROUP_CALL.code, + event = Event.GENERIC_GROUP_CALL.code + ) + ) + + val filterState = CallEventCache.FilterState(filter = CallLogFilter.MISSED) + val result = CallEventCache.clusterCallEvents(testData, filterState) + assertThat(result).size().isEqualTo(1) + } + + @Test + fun `Given a missed call link ring, when I filter by missed, then I expect one entry`() { + val testData = listOf( + createCacheRecord( + callId = 1, + type = Type.AD_HOC_CALL.code, + event = Event.MISSED.code + ) + ) + + val filterState = CallEventCache.FilterState(filter = CallLogFilter.MISSED) + val result = CallEventCache.clusterCallEvents(testData, filterState) + assertThat(result).size().isEqualTo(1) + } + private fun createCacheRecord( callId: Long, peer: Long = 1,