Merge branch 'feature/bma/optimizeLazyColumn' into develop

This commit is contained in:
Benoit Marty 2022-11-23 18:08:44 +01:00
commit cddd039156
3 changed files with 32 additions and 3 deletions

6
docs/usefulLinks.md Normal file
View file

@ -0,0 +1,6 @@
### Jetpack Compose
https://developer.android.com/jetpack/compose/mental-model
https://android.googlesource.com/platform/frameworks/support/+/androidx-main/compose/docs/compose-api-guidelines.md#api-guidelines-for-jetpack-compose

View file

@ -10,7 +10,7 @@ import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.ExperimentalMaterialApi
@ -230,7 +230,11 @@ fun TimelineItems(
verticalArrangement = Arrangement.Bottom, verticalArrangement = Arrangement.Bottom,
reverseLayout = true reverseLayout = true
) { ) {
itemsIndexed(timelineItems) { index, timelineItem -> items(
items = timelineItems,
contentType = { timelineItem -> timelineItem.contentType() },
key = { timelineItem -> timelineItem.key() },
) { timelineItem ->
TimelineItemRow( TimelineItemRow(
timelineItem = timelineItem, timelineItem = timelineItem,
onClick = onClick, onClick = onClick,
@ -245,6 +249,20 @@ fun TimelineItems(
} }
} }
private fun MessagesTimelineItemState.key(): String {
return when (this) {
is MessagesTimelineItemState.MessageEvent -> id
is MessagesTimelineItemState.Virtual -> id
}
}
private fun MessagesTimelineItemState.contentType(): Int {
return when (this) {
is MessagesTimelineItemState.MessageEvent -> 0
is MessagesTimelineItemState.Virtual -> 1
}
}
@Composable @Composable
fun TimelineItemRow( fun TimelineItemRow(

View file

@ -122,7 +122,10 @@ fun RoomListContent(
.nestedScroll(nestedScrollConnection), .nestedScroll(nestedScrollConnection),
state = lazyListState, state = lazyListState,
) { ) {
items(roomSummaries) { room -> items(
items = roomSummaries,
contentType = { room -> room.contentType() },
) { room ->
RoomSummaryRow(room = room, onClick = ::onRoomClicked) RoomSummaryRow(room = room, onClick = ::onRoomClicked)
} }
} }
@ -134,6 +137,8 @@ fun RoomListContent(
} }
} }
private fun RoomListRoomSummary.contentType() = isPlaceholder
private fun LazyListState.isScrolled(): Boolean { private fun LazyListState.isScrolled(): Boolean {
return firstVisibleItemIndex > 0 || firstVisibleItemScrollOffset > 0 return firstVisibleItemIndex > 0 || firstVisibleItemScrollOffset > 0
} }