mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 16:10:00 +00:00
Revert screen recomposition fixes
This commit is contained in:
+1
-12
@@ -51,7 +51,6 @@ import io.element.android.libraries.matrix.api.core.asEventId
|
|||||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||||
import io.element.android.libraries.matrix.api.room.powerlevels.permissionsAsState
|
import io.element.android.libraries.matrix.api.room.powerlevels.permissionsAsState
|
||||||
import io.element.android.libraries.matrix.api.room.roomMembers
|
import io.element.android.libraries.matrix.api.room.roomMembers
|
||||||
import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem
|
|
||||||
import io.element.android.libraries.matrix.api.timeline.ReceiptType
|
import io.element.android.libraries.matrix.api.timeline.ReceiptType
|
||||||
import io.element.android.libraries.matrix.api.timeline.Timeline
|
import io.element.android.libraries.matrix.api.timeline.Timeline
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.TimelineItemEventOrigin
|
import io.element.android.libraries.matrix.api.timeline.item.event.TimelineItemEventOrigin
|
||||||
@@ -255,25 +254,15 @@ class TimelinePresenter(
|
|||||||
}
|
}
|
||||||
.launchIn(this)
|
.launchIn(this)
|
||||||
|
|
||||||
var previousItems: List<MatrixTimelineItem>? = null
|
|
||||||
combine(timelineController.timelineItems(), room.membersStateFlow) { items, membersState ->
|
combine(timelineController.timelineItems(), room.membersStateFlow) { items, membersState ->
|
||||||
val roomMembers = membersState.roomMembers().orEmpty()
|
|
||||||
if (previousItems !== items) {
|
|
||||||
previousItems = items
|
|
||||||
val parent = analyticsService.getLongRunningTransaction(DisplayFirstTimelineItems)
|
val parent = analyticsService.getLongRunningTransaction(DisplayFirstTimelineItems)
|
||||||
val transaction = parent?.startChild("timelineItemsFactory.replaceWith", "Processing timeline items")
|
val transaction = parent?.startChild("timelineItemsFactory.replaceWith", "Processing timeline items")
|
||||||
transaction?.putExtraData(AnalyticsUserData.TIMELINE_ITEM_COUNT, items.count().toString())
|
transaction?.putExtraData(AnalyticsUserData.TIMELINE_ITEM_COUNT, items.count().toString())
|
||||||
timelineItemsFactory.replaceWith(
|
timelineItemsFactory.replaceWith(
|
||||||
timelineItems = items,
|
timelineItems = items,
|
||||||
roomMembers = roomMembers
|
roomMembers = membersState.roomMembers().orEmpty()
|
||||||
)
|
)
|
||||||
transaction?.finish()
|
transaction?.finish()
|
||||||
} else {
|
|
||||||
timelineItemsFactory.updateRoomMembers(
|
|
||||||
timelineItems = items,
|
|
||||||
roomMembers = roomMembers
|
|
||||||
)
|
|
||||||
}
|
|
||||||
items
|
items
|
||||||
}
|
}
|
||||||
.onEach(redactedVoiceMessageManager::onEachMatrixTimelineItem)
|
.onEach(redactedVoiceMessageManager::onEachMatrixTimelineItem)
|
||||||
|
|||||||
-39
@@ -72,45 +72,6 @@ class TimelineItemsFactory(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Lightweight update that only refreshes member-derived data (e.g., read receipt display names)
|
|
||||||
* on cached items without rebuilding the diff cache or creating new items.
|
|
||||||
* Skips emission if no cached items have member-dependent state.
|
|
||||||
*/
|
|
||||||
suspend fun updateRoomMembers(
|
|
||||||
timelineItems: List<MatrixTimelineItem>,
|
|
||||||
roomMembers: List<RoomMember>,
|
|
||||||
) = withContext(dispatchers.computation) {
|
|
||||||
lock.withLock {
|
|
||||||
var hasUpdates = false
|
|
||||||
val updatedStates = ArrayList<TimelineItem>()
|
|
||||||
for (index in diffCache.indices().reversed()) {
|
|
||||||
val cacheItem = diffCache.get(index)
|
|
||||||
if (cacheItem is TimelineItem.Event && roomMembers.isNotEmpty()) {
|
|
||||||
val updatedItem = eventItemFactory.update(
|
|
||||||
timelineItem = cacheItem,
|
|
||||||
receivedMatrixTimelineItem = timelineItems[index] as MatrixTimelineItem.Event,
|
|
||||||
roomMembers = roomMembers
|
|
||||||
)
|
|
||||||
diffCache[index] = updatedItem
|
|
||||||
hasUpdates = true
|
|
||||||
updatedStates.add(updatedItem)
|
|
||||||
} else if (cacheItem != null) {
|
|
||||||
updatedStates.add(cacheItem)
|
|
||||||
} else {
|
|
||||||
buildAndCacheItem(timelineItems, index, roomMembers)?.also { timelineItemState ->
|
|
||||||
updatedStates.add(timelineItemState)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (hasUpdates) {
|
|
||||||
val result = timelineItemGrouper.group(updatedStates).toImmutableList()
|
|
||||||
val filteredResult = filterEmptyDaySeparators(result)
|
|
||||||
_timelineItems.emit(filteredResult)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private suspend fun buildAndEmitTimelineItemStates(
|
private suspend fun buildAndEmitTimelineItemStates(
|
||||||
timelineItems: List<MatrixTimelineItem>,
|
timelineItems: List<MatrixTimelineItem>,
|
||||||
roomMembers: List<RoomMember>,
|
roomMembers: List<RoomMember>,
|
||||||
|
|||||||
Reference in New Issue
Block a user