From a556557881c1f631747f2a50780017c58e33adf5 Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 9 Sep 2024 11:20:50 +0200 Subject: [PATCH] Timeline : remove the encrypted history banner for now. --- .../components/TimelineItemVirtualRow.kt | 3 - .../TimelineEncryptedHistoryBannerView.kt | 61 ---------- .../virtual/TimelineItemVirtualFactory.kt | 2 - ...eItemEncryptedHistoryBannerVirtualModel.kt | 12 -- .../item/virtual/VirtualTimelineItem.kt | 2 - .../libraries/matrix/impl/RustMatrixClient.kt | 2 - .../matrix/impl/room/RustMatrixRoom.kt | 7 +- .../matrix/impl/room/RustRoomFactory.kt | 2 - .../matrix/impl/timeline/RustTimeline.kt | 11 -- .../HasEncryptionHistoryBanner.kt | 17 --- .../LoadingIndicatorsPostProcessor.kt | 3 +- .../RoomBeginningPostProcessor.kt | 1 - .../TimelineEncryptedHistoryPostProcessor.kt | 55 --------- .../RoomBeginningPostProcessorTest.kt | 11 -- ...melineEncryptedHistoryPostProcessorTest.kt | 114 ------------------ ...al_EncryptedHistoryBannerView_Day_0_en.png | 3 - ..._EncryptedHistoryBannerView_Night_0_en.png | 3 - 17 files changed, 3 insertions(+), 306 deletions(-) delete mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineEncryptedHistoryBannerView.kt delete mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemEncryptedHistoryBannerVirtualModel.kt delete mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/HasEncryptionHistoryBanner.kt delete mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessor.kt delete mode 100644 libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessorTest.kt delete mode 100644 tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_Day_0_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_Night_0_en.png diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt index a39c2d81e5..7ff428223b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt @@ -16,14 +16,12 @@ import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Modifier import io.element.android.features.messages.impl.timeline.TimelineEvents import io.element.android.features.messages.impl.timeline.TimelineRoomInfo -import io.element.android.features.messages.impl.timeline.components.virtual.TimelineEncryptedHistoryBannerView import io.element.android.features.messages.impl.timeline.components.virtual.TimelineItemDaySeparatorView import io.element.android.features.messages.impl.timeline.components.virtual.TimelineItemReadMarkerView import io.element.android.features.messages.impl.timeline.components.virtual.TimelineItemRoomBeginningView import io.element.android.features.messages.impl.timeline.components.virtual.TimelineLoadingMoreIndicator import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemDaySeparatorModel -import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemEncryptedHistoryBannerVirtualModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLastForwardIndicatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingIndicatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemReadMarkerModel @@ -40,7 +38,6 @@ fun TimelineItemVirtualRow( when (virtual.model) { is TimelineItemDaySeparatorModel -> TimelineItemDaySeparatorView(virtual.model) TimelineItemReadMarkerModel -> TimelineItemReadMarkerView() - is TimelineItemEncryptedHistoryBannerVirtualModel -> TimelineEncryptedHistoryBannerView() TimelineItemRoomBeginningModel -> TimelineItemRoomBeginningView(roomName = timelineRoomInfo.name) is TimelineItemLoadingIndicatorModel -> { TimelineLoadingMoreIndicator(virtual.model.direction) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineEncryptedHistoryBannerView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineEncryptedHistoryBannerView.kt deleted file mode 100644 index fecaf85dd8..0000000000 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineEncryptedHistoryBannerView.kt +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2023, 2024 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only - * Please see LICENSE in the repository root for full details. - */ - -package io.element.android.features.messages.impl.timeline.components.virtual - -import androidx.compose.foundation.background -import androidx.compose.foundation.border -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp -import io.element.android.compound.theme.ElementTheme -import io.element.android.compound.tokens.generated.CompoundIcons -import io.element.android.features.messages.impl.R -import io.element.android.libraries.designsystem.preview.ElementPreview -import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.components.Icon - -@Composable -fun TimelineEncryptedHistoryBannerView( - modifier: Modifier = Modifier, -) { - Row( - modifier = modifier - .padding(start = 16.dp, end = 16.dp, top = 24.dp, bottom = 32.dp) - .clip(MaterialTheme.shapes.small) - .border(1.dp, ElementTheme.colors.borderInfoSubtle, MaterialTheme.shapes.small) - .background(ElementTheme.colors.bgInfoSubtle) - .padding(16.dp), - horizontalArrangement = Arrangement.spacedBy(16.dp), - ) { - Icon( - modifier = Modifier.size(20.dp), - imageVector = CompoundIcons.InfoSolid(), - contentDescription = null, - tint = ElementTheme.colors.iconInfoPrimary - ) - Text( - text = stringResource(R.string.screen_room_encrypted_history_banner), - style = ElementTheme.typography.fontBodyMdMedium, - color = ElementTheme.colors.textInfoPrimary - ) - } -} - -@PreviewsDayNight -@Composable -internal fun EncryptedHistoryBannerViewPreview() = ElementPreview { - TimelineEncryptedHistoryBannerView() -} diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt index bced11b56b..8a3c5e2caf 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt @@ -8,7 +8,6 @@ package io.element.android.features.messages.impl.timeline.factories.virtual import io.element.android.features.messages.impl.timeline.model.TimelineItem -import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemEncryptedHistoryBannerVirtualModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLastForwardIndicatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingIndicatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemReadMarkerModel @@ -34,7 +33,6 @@ class TimelineItemVirtualFactory @Inject constructor( return when (val inner = virtual) { is VirtualTimelineItem.DayDivider -> daySeparatorFactory.create(inner) is VirtualTimelineItem.ReadMarker -> TimelineItemReadMarkerModel - is VirtualTimelineItem.EncryptedHistoryBanner -> TimelineItemEncryptedHistoryBannerVirtualModel is VirtualTimelineItem.RoomBeginning -> TimelineItemRoomBeginningModel is VirtualTimelineItem.LoadingIndicator -> TimelineItemLoadingIndicatorModel( direction = inner.direction, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemEncryptedHistoryBannerVirtualModel.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemEncryptedHistoryBannerVirtualModel.kt deleted file mode 100644 index 10e741b676..0000000000 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemEncryptedHistoryBannerVirtualModel.kt +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright 2023, 2024 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only - * Please see LICENSE in the repository root for full details. - */ - -package io.element.android.features.messages.impl.timeline.model.virtual - -data object TimelineItemEncryptedHistoryBannerVirtualModel : TimelineItemVirtualModel { - override val type: String = "TimelineItemEncryptedHistoryBannerVirtualModel" -} diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt index f267188bce..98d6d9fc76 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt @@ -16,8 +16,6 @@ sealed interface VirtualTimelineItem { data object ReadMarker : VirtualTimelineItem - data object EncryptedHistoryBanner : VirtualTimelineItem - data object RoomBeginning : VirtualTimelineItem data object LastForwardIndicator : VirtualTimelineItem diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index afdb9e9946..b7fb6d1566 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -87,7 +87,6 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import kotlinx.coroutines.withTimeout -import org.matrix.rustcomponents.sdk.BackupState import org.matrix.rustcomponents.sdk.Client import org.matrix.rustcomponents.sdk.ClientException import org.matrix.rustcomponents.sdk.IgnoredUsersListener @@ -179,7 +178,6 @@ class RustMatrixClient( systemClock = clock, roomContentForwarder = RoomContentForwarder(innerRoomListService), roomSyncSubscriber = roomSyncSubscriber, - isKeyBackupEnabled = { client.encryption().use { it.backupState() == BackupState.ENABLED } }, getSessionData = { sessionStore.getSession(sessionId.value)!! }, ) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index 86aaa982d3..1f5ffe7eef 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -89,7 +89,6 @@ import org.matrix.rustcomponents.sdk.Timeline as InnerTimeline @OptIn(ExperimentalCoroutinesApi::class) class RustMatrixRoom( override val sessionId: SessionId, - private val isKeyBackupEnabled: Boolean, private val roomListItem: RoomListItem, private val innerRoom: InnerRoom, innerTimeline: InnerTimeline, @@ -652,16 +651,14 @@ class RustMatrixRoom( ): Timeline { val timelineCoroutineScope = roomCoroutineScope.childScope(coroutineDispatchers.main, "TimelineScope-$roomId-$timeline") return RustTimeline( - isKeyBackupEnabled = isKeyBackupEnabled, mode = mode, matrixRoom = this, + inner = timeline, systemClock = systemClock, coroutineScope = timelineCoroutineScope, dispatcher = roomDispatcher, - lastLoginTimestamp = sessionData.loginTimestamp, - onNewSyncedEvent = onNewSyncedEvent, roomContentForwarder = roomContentForwarder, - inner = timeline, + onNewSyncedEvent = onNewSyncedEvent, ) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomFactory.kt index 01924b0f92..8db2c498ef 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomFactory.kt @@ -46,7 +46,6 @@ class RustRoomFactory( private val roomListService: RoomListService, private val innerRoomListService: InnerRoomListService, private val roomSyncSubscriber: RoomSyncSubscriber, - private val isKeyBackupEnabled: suspend () -> Boolean, private val getSessionData: suspend () -> SessionData, ) { @OptIn(ExperimentalCoroutinesApi::class) @@ -109,7 +108,6 @@ class RustRoomFactory( val liveTimeline = roomReferences.fullRoom.timeline() RustMatrixRoom( sessionId = sessionId, - isKeyBackupEnabled = isKeyBackupEnabled(), roomListItem = roomReferences.roomListItem, innerRoom = roomReferences.fullRoom, innerTimeline = liveTimeline, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt index f349a79ca5..f48af8d3a3 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt @@ -40,7 +40,6 @@ import io.element.android.libraries.matrix.impl.timeline.item.virtual.VirtualTim import io.element.android.libraries.matrix.impl.timeline.postprocessor.LastForwardIndicatorsPostProcessor import io.element.android.libraries.matrix.impl.timeline.postprocessor.LoadingIndicatorsPostProcessor import io.element.android.libraries.matrix.impl.timeline.postprocessor.RoomBeginningPostProcessor -import io.element.android.libraries.matrix.impl.timeline.postprocessor.TimelineEncryptedHistoryPostProcessor import io.element.android.libraries.matrix.impl.timeline.reply.InReplyToMapper import io.element.android.libraries.matrix.impl.util.MessageEventContent import io.element.android.services.toolbox.api.systemclock.SystemClock @@ -70,7 +69,6 @@ import org.matrix.rustcomponents.sdk.use import timber.log.Timber import uniffi.matrix_sdk_ui.LiveBackPaginationStatus import java.io.File -import java.util.Date import org.matrix.rustcomponents.sdk.Timeline as InnerTimeline private const val PAGINATION_SIZE = 50 @@ -79,11 +77,9 @@ class RustTimeline( private val inner: InnerTimeline, mode: Timeline.Mode, systemClock: SystemClock, - isKeyBackupEnabled: Boolean, private val matrixRoom: MatrixRoom, private val coroutineScope: CoroutineScope, private val dispatcher: CoroutineDispatcher, - lastLoginTimestamp: Date?, private val roomContentForwarder: RoomContentForwarder, onNewSyncedEvent: () -> Unit, ) : Timeline { @@ -107,12 +103,6 @@ class RustTimeline( timelineItems = _timelineItems, timelineItemFactory = timelineItemMapper, ) - private val encryptedHistoryPostProcessor = TimelineEncryptedHistoryPostProcessor( - lastLoginTimestamp = lastLoginTimestamp, - isRoomEncrypted = matrixRoom.isEncrypted, - isKeyBackupEnabled = isKeyBackupEnabled, - dispatcher = dispatcher, - ) private val timelineItemsSubscriber = TimelineItemsSubscriber( timeline = inner, timelineCoroutineScope = coroutineScope, @@ -219,7 +209,6 @@ class RustTimeline( ) { timelineItems, hasMoreToLoadBackward, hasMoreToLoadForward, isInit -> withContext(dispatcher) { timelineItems - .process { items -> encryptedHistoryPostProcessor.process(items) } .process { items -> roomBeginningPostProcessor.process( items = items, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/HasEncryptionHistoryBanner.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/HasEncryptionHistoryBanner.kt deleted file mode 100644 index 57058a17ea..0000000000 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/HasEncryptionHistoryBanner.kt +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2024 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only - * Please see LICENSE in the repository root for full details. - */ - -package io.element.android.libraries.matrix.impl.timeline.postprocessor - -import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem -import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem - -internal fun List.hasEncryptionHistoryBanner(): Boolean { - val firstItem = firstOrNull() - return firstItem is MatrixTimelineItem.Virtual && - firstItem.virtual is VirtualTimelineItem.EncryptedHistoryBanner -} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt index 41ac1bbc2a..a4aa6bf05a 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt @@ -19,11 +19,10 @@ class LoadingIndicatorsPostProcessor(private val systemClock: SystemClock) { hasMoreToLoadBackward: Boolean, hasMoreToLoadForward: Boolean, ): List { - val shouldAddBackwardLoadingIndicator = hasMoreToLoadBackward && !items.hasEncryptionHistoryBanner() val shouldAddForwardLoadingIndicator = hasMoreToLoadForward && items.isNotEmpty() val currentTimestamp = systemClock.epochMillis() return buildList { - if (shouldAddBackwardLoadingIndicator) { + if (hasMoreToLoadBackward) { val backwardLoadingIndicator = MatrixTimelineItem.Virtual( uniqueId = UniqueId("BackwardLoadingIndicator"), virtual = VirtualTimelineItem.LoadingIndicator( diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt index d6e6ee95a7..2fb41a745c 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt @@ -36,7 +36,6 @@ class RoomBeginningPostProcessor(private val mode: Timeline.Mode) { } private fun processForRoom(items: List): List { - if (items.hasEncryptionHistoryBanner()) return items val roomBeginningItem = createRoomBeginningItem() return listOf(roomBeginningItem) + items } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessor.kt deleted file mode 100644 index c9846db104..0000000000 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessor.kt +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2023, 2024 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only - * Please see LICENSE in the repository root for full details. - */ - -package io.element.android.libraries.matrix.impl.timeline.postprocessor - -import io.element.android.libraries.matrix.api.core.UniqueId -import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem -import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem -import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.withContext -import timber.log.Timber -import java.util.Date - -internal val encryptedHistoryBannerId = UniqueId("EncryptedHistoryBannerId") - -class TimelineEncryptedHistoryPostProcessor( - private val dispatcher: CoroutineDispatcher, - private val lastLoginTimestamp: Date?, - private val isRoomEncrypted: Boolean, - private val isKeyBackupEnabled: Boolean, -) { - suspend fun process(items: List): List = withContext(dispatcher) { - Timber.d("Process on Thread=${Thread.currentThread()}") - if (!isRoomEncrypted || isKeyBackupEnabled || lastLoginTimestamp == null) return@withContext items - replaceWithEncryptionHistoryBannerIfNeeded(items) - } - - private fun replaceWithEncryptionHistoryBannerIfNeeded(list: List): List { - var lastEncryptedHistoryBannerIndex = -1 - for ((i, item) in list.withIndex()) { - if (isItemEncryptionHistory(item)) { - lastEncryptedHistoryBannerIndex = i - } - } - return if (lastEncryptedHistoryBannerIndex >= 0) { - val sublist = list.drop(lastEncryptedHistoryBannerIndex + 1).toMutableList() - sublist.add(0, MatrixTimelineItem.Virtual(encryptedHistoryBannerId, VirtualTimelineItem.EncryptedHistoryBanner)) - sublist - } else { - list - } - } - - private fun isItemEncryptionHistory(item: MatrixTimelineItem): Boolean { - if ((item as? MatrixTimelineItem.Virtual)?.virtual is VirtualTimelineItem.EncryptedHistoryBanner) { - return true - } - val timestamp = (item as? MatrixTimelineItem.Event)?.event?.timestamp ?: return false - return timestamp <= lastLoginTimestamp!!.time - } -} diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessorTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessorTest.kt index 8040a5f18d..db93b86142 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessorTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessorTest.kt @@ -15,7 +15,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.MembershipCha import io.element.android.libraries.matrix.api.timeline.item.event.OtherState import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent import io.element.android.libraries.matrix.api.timeline.item.event.StateContent -import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem import io.element.android.libraries.matrix.test.A_USER_ID import io.element.android.libraries.matrix.test.A_USER_ID_2 import io.element.android.libraries.matrix.test.timeline.aMessageContent @@ -70,16 +69,6 @@ class RoomBeginningPostProcessorTest { ) } - @Test - fun `processor will not add beginning of room item if it's not a DM and EncryptedHistoryBanner item is found`() { - val timelineItems = listOf( - MatrixTimelineItem.Virtual(UniqueId("EncryptedHistoryBanner"), VirtualTimelineItem.EncryptedHistoryBanner), - ) - val processor = RoomBeginningPostProcessor(Timeline.Mode.LIVE) - val processedItems = processor.process(timelineItems, isDm = false, hasMoreToLoadBackwards = false) - assertThat(processedItems).isEqualTo(timelineItems) - } - @Test fun `processor won't remove items if it's not at the start of the timeline`() { val timelineItems = listOf( diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessorTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessorTest.kt deleted file mode 100644 index 0d80bdec46..0000000000 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessorTest.kt +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2023, 2024 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only - * Please see LICENSE in the repository root for full details. - */ - -package io.element.android.libraries.matrix.impl.timeline.postprocessor - -import com.google.common.truth.Truth.assertThat -import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem -import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem -import io.element.android.libraries.matrix.test.A_UNIQUE_ID -import io.element.android.libraries.matrix.test.timeline.anEventTimelineItem -import kotlinx.coroutines.test.StandardTestDispatcher -import kotlinx.coroutines.test.TestScope -import kotlinx.coroutines.test.runTest -import org.junit.Test -import java.util.Date - -class TimelineEncryptedHistoryPostProcessorTest { - private val defaultLastLoginTimestamp = Date(1_689_061_264L) - - @Test - fun `given an unencrypted room, nothing is done`() = runTest { - val processor = createPostProcessor(isRoomEncrypted = false) - val items = listOf( - MatrixTimelineItem.Event(A_UNIQUE_ID, anEventTimelineItem()) - ) - assertThat(processor.process(items)).isSameInstanceAs(items) - } - - @Test - fun `given an encrypted room, and key backup enabled, nothing is done`() = runTest { - val processor = createPostProcessor(isKeyBackupEnabled = true) - val items = listOf( - MatrixTimelineItem.Event(A_UNIQUE_ID, anEventTimelineItem()) - ) - assertThat(processor.process(items)).isSameInstanceAs(items) - } - - @Test - fun `given a null lastLoginTimestamp, nothing is done`() = runTest { - val processor = createPostProcessor(lastLoginTimestamp = null) - val items = listOf( - MatrixTimelineItem.Event(A_UNIQUE_ID, anEventTimelineItem()) - ) - assertThat(processor.process(items)).isSameInstanceAs(items) - } - - @Test - fun `given an empty list, nothing is done`() = runTest { - val processor = createPostProcessor() - val items = emptyList() - assertThat(processor.process(items)).isSameInstanceAs(items) - } - - @Test - fun `given a list with no items before lastLoginTimestamp, nothing is done`() = runTest { - val processor = createPostProcessor() - val items = listOf( - MatrixTimelineItem.Event(A_UNIQUE_ID, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time + 1)) - ) - assertThat(processor.process(items)).isSameInstanceAs(items) - } - - @Test - fun `given a list with an item with equal timestamp as lastLoginTimestamp, it's replaced`() = runTest { - val processor = createPostProcessor() - val items = listOf( - MatrixTimelineItem.Event(A_UNIQUE_ID, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time)) - ) - assertThat(processor.process(items)) - .isEqualTo(listOf(MatrixTimelineItem.Virtual(encryptedHistoryBannerId, VirtualTimelineItem.EncryptedHistoryBanner))) - } - - @Test - fun `given a list with an item with a lower timestamp than lastLoginTimestamp, it's replaced`() = runTest { - val processor = createPostProcessor() - val items = listOf( - MatrixTimelineItem.Event(A_UNIQUE_ID, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time - 1)) - ) - assertThat(processor.process(items)).isEqualTo( - listOf(MatrixTimelineItem.Virtual(encryptedHistoryBannerId, VirtualTimelineItem.EncryptedHistoryBanner)) - ) - } - - @Test - fun `given a list with several with lower or equal timestamps than lastLoginTimestamp, then they're replaced`() = runTest { - val processor = createPostProcessor() - val items = listOf( - MatrixTimelineItem.Event(A_UNIQUE_ID, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time - 1)), - MatrixTimelineItem.Event(A_UNIQUE_ID, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time)), - MatrixTimelineItem.Event(A_UNIQUE_ID, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time + 1)), - ) - assertThat(processor.process(items)).isEqualTo( - listOf( - MatrixTimelineItem.Virtual(encryptedHistoryBannerId, VirtualTimelineItem.EncryptedHistoryBanner), - MatrixTimelineItem.Event(A_UNIQUE_ID, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time + 1)) - ) - ) - } - - private fun TestScope.createPostProcessor( - lastLoginTimestamp: Date? = defaultLastLoginTimestamp, - isRoomEncrypted: Boolean = true, - isKeyBackupEnabled: Boolean = false, - ) = TimelineEncryptedHistoryPostProcessor( - lastLoginTimestamp = lastLoginTimestamp, - isRoomEncrypted = isRoomEncrypted, - isKeyBackupEnabled = isKeyBackupEnabled, - dispatcher = StandardTestDispatcher(testScheduler) - ) -} diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_Day_0_en.png deleted file mode 100644 index 0e2296e251..0000000000 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_Day_0_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:47c6681e3cf56d3229953b7c34b6f1d531c492d23f4dffe77e2a12fbdbf44261 -size 11892 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_Night_0_en.png deleted file mode 100644 index 70416e47dc..0000000000 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_Night_0_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:985b87b568e34b16d132a5cde5781e99edc81be4ef53c5b6e67ca75472266f99 -size 11436