Skip to content

Commit d34a780

Browse files
authored
Merge pull request #836 from vector-im/feature/fga/update-rust-sdk-0.1.29-again
Update rust sdk to 0.1.29 (new back pagination status api)
2 parents 42dea3e + 9e5a3d1 commit d34a780

File tree

15 files changed

+67
-128
lines changed

15 files changed

+67
-128
lines changed

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import io.element.android.features.messages.impl.timeline.model.TimelineItemReac
2323
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent
2424
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemStateEventContent
2525
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent
26-
import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingModel
2726
import io.element.android.features.messages.impl.timeline.model.virtual.aTimelineItemDaySeparatorModel
2827
import io.element.android.libraries.designsystem.components.avatar.AvatarData
2928
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
@@ -93,15 +92,9 @@ internal fun aTimelineItemList(content: TimelineItemEventContent): ImmutableList
9392
aGroupedEvents(),
9493
// A day separator
9594
aTimelineItemDaySeparator(),
96-
// Loading
97-
aTimelineItemLoading(),
9895
)
9996
}
10097

101-
fun aTimelineItemLoading(): TimelineItem.Virtual {
102-
return TimelineItem.Virtual("virtual_loading", TimelineItemLoadingModel)
103-
}
104-
10598
fun aTimelineItemDaySeparator(): TimelineItem.Virtual {
10699
return TimelineItem.Virtual("virtual_day", aTimelineItemDaySeparatorModel("Today"))
107100
}

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import androidx.compose.foundation.layout.padding
3232
import androidx.compose.foundation.layout.size
3333
import androidx.compose.foundation.lazy.LazyColumn
3434
import androidx.compose.foundation.lazy.LazyListState
35-
import androidx.compose.foundation.lazy.itemsIndexed
35+
import androidx.compose.foundation.lazy.items
3636
import androidx.compose.foundation.lazy.rememberLazyListState
3737
import androidx.compose.foundation.shape.CircleShape
3838
import androidx.compose.material.icons.Icons
@@ -59,6 +59,7 @@ import io.element.android.features.messages.impl.timeline.components.TimelineIte
5959
import io.element.android.features.messages.impl.timeline.components.TimelineItemStateEventRow
6060
import io.element.android.features.messages.impl.timeline.components.TimelineItemVirtualRow
6161
import io.element.android.features.messages.impl.timeline.components.group.GroupHeaderView
62+
import io.element.android.features.messages.impl.timeline.components.virtual.TimelineLoadingMoreIndicator
6263
import io.element.android.features.messages.impl.timeline.model.TimelineItem
6364
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent
6465
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContentProvider
@@ -114,11 +115,11 @@ fun TimelineView(
114115
reverseLayout = true,
115116
contentPadding = PaddingValues(vertical = 8.dp),
116117
) {
117-
itemsIndexed(
118+
items(
118119
items = state.timelineItems,
119-
contentType = { _, timelineItem -> timelineItem.contentType() },
120-
key = { _, timelineItem -> timelineItem.identifier() },
121-
) { index, timelineItem ->
120+
contentType = { timelineItem -> timelineItem.contentType() },
121+
key = { timelineItem -> timelineItem.identifier() },
122+
) { timelineItem ->
122123
TimelineItemRow(
123124
timelineItem = timelineItem,
124125
highlightedItem = state.highlightedEventId?.value,
@@ -132,8 +133,14 @@ fun TimelineView(
132133
onTimestampClicked = onTimestampClicked,
133134
onSwipeToReply = onSwipeToReply,
134135
)
135-
if (index == state.timelineItems.lastIndex) {
136-
onReachedLoadMore()
136+
}
137+
if (state.paginationState.canBackPaginate) {
138+
// Do not use key parameter to avoid wrong positioning
139+
item(contentType = "TimelineLoadingMoreIndicator") {
140+
TimelineLoadingMoreIndicator()
141+
LaunchedEffect(Unit) {
142+
onReachedLoadMore()
143+
}
137144
}
138145
}
139146
}

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,15 @@ import io.element.android.features.messages.impl.timeline.components.virtual.Tim
2222
import io.element.android.features.messages.impl.timeline.components.virtual.TimelineLoadingMoreIndicator
2323
import io.element.android.features.messages.impl.timeline.model.TimelineItem
2424
import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemDaySeparatorModel
25-
import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingModel
25+
import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemReadMarkerModel
2626

2727
@Composable
2828
fun TimelineItemVirtualRow(
2929
virtual: TimelineItem.Virtual,
3030
modifier: Modifier = Modifier
3131
) {
3232
when (virtual.model) {
33-
is TimelineItemLoadingModel -> TimelineLoadingMoreIndicator(modifier)
3433
is TimelineItemDaySeparatorModel -> TimelineItemDaySeparatorView(virtual.model, modifier)
35-
else -> return
34+
TimelineItemReadMarkerModel -> return
3635
}
3736
}

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class TimelineItemsFactory @Inject constructor(
106106
val timelineItemState =
107107
when (val currentTimelineItem = timelineItems[index]) {
108108
is MatrixTimelineItem.Event -> eventItemFactory.create(currentTimelineItem, index, timelineItems)
109-
is MatrixTimelineItem.Virtual -> virtualItemFactory.create(currentTimelineItem, index, timelineItems)
109+
is MatrixTimelineItem.Virtual -> virtualItemFactory.create(currentTimelineItem, index)
110110
MatrixTimelineItem.Other -> null
111111
}
112112
timelineItemsCache[index] = timelineItemState

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@
1717
package io.element.android.features.messages.impl.timeline.factories.virtual
1818

1919
import io.element.android.features.messages.impl.timeline.model.TimelineItem
20-
import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingModel
2120
import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemReadMarkerModel
22-
import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemUnknownVirtualModel
2321
import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemVirtualModel
2422
import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem
2523
import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem
@@ -30,23 +28,19 @@ class TimelineItemVirtualFactory @Inject constructor(
3028
) {
3129

3230
fun create(
33-
currentTimelineItem: MatrixTimelineItem.Virtual,
31+
virtualTimelineItem: MatrixTimelineItem.Virtual,
3432
index: Int,
35-
timelineItems: List<MatrixTimelineItem>,
3633
): TimelineItem.Virtual {
3734
return TimelineItem.Virtual(
3835
id = "virtual_item_$index",
39-
model = currentTimelineItem.computeModel(index)
36+
model = virtualTimelineItem.computeModel()
4037
)
4138
}
4239

43-
private fun MatrixTimelineItem.Virtual.computeModel(index: Int): TimelineItemVirtualModel {
40+
private fun MatrixTimelineItem.Virtual.computeModel(): TimelineItemVirtualModel {
4441
return when (val inner = virtual) {
4542
is VirtualTimelineItem.DayDivider -> daySeparatorFactory.create(inner)
4643
is VirtualTimelineItem.ReadMarker -> TimelineItemReadMarkerModel
47-
is VirtualTimelineItem.LoadingIndicator -> TimelineItemLoadingModel
48-
is VirtualTimelineItem.TimelineStart -> TimelineItemReadMarkerModel
49-
else -> TimelineItemUnknownVirtualModel
5044
}
5145
}
5246
}

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLoadingModel.kt

Lines changed: 0 additions & 21 deletions
This file was deleted.

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemTimelineStartModel.kt

Lines changed: 0 additions & 21 deletions
This file was deleted.

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemUnknownVirtualModel.kt

Lines changed: 0 additions & 21 deletions
This file was deleted.

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" }
145145
appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" }
146146
molecule-runtime = { module = "app.cash.molecule:molecule-runtime", version.ref = "molecule" }
147147
timber = "com.jakewharton.timber:timber:5.0.1"
148-
matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.28"
148+
matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.29"
149149
sqldelight-driver-android = { module = "com.squareup.sqldelight:android-driver", version.ref = "sqldelight" }
150150
sqldelight-driver-jvm = { module = "com.squareup.sqldelight:sqlite-driver", version.ref = "sqldelight" }
151151
sqldelight-coroutines = { module = "com.squareup.sqldelight:coroutines-extensions", version.ref = "sqldelight" }

libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,4 @@ sealed interface VirtualTimelineItem {
2424

2525
object ReadMarker : VirtualTimelineItem
2626

27-
object LoadingIndicator : VirtualTimelineItem
28-
29-
object TimelineStart : VirtualTimelineItem
3027
}

0 commit comments

Comments
 (0)