Skip to content

Commit 0b238b0

Browse files
fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.6.18 (#4894)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jorge Martín <[email protected]>
1 parent 7bde9bc commit 0b238b0

File tree

23 files changed

+193
-89
lines changed

23 files changed

+193
-89
lines changed

features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationPresenter.kt

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ import io.element.android.libraries.architecture.Presenter
2626
import io.element.android.libraries.core.meta.BuildMeta
2727
import io.element.android.libraries.matrix.api.room.JoinedRoom
2828
import io.element.android.libraries.matrix.api.room.location.AssetType
29+
import io.element.android.libraries.matrix.api.room.message.ReplyParameters
30+
import io.element.android.libraries.matrix.api.room.message.replyInThread
31+
import io.element.android.libraries.matrix.ui.messages.reply.eventId
32+
import io.element.android.libraries.textcomposer.model.MessageComposerMode
2933
import io.element.android.services.analytics.api.AnalyticsService
3034
import kotlinx.coroutines.launch
3135
import javax.inject.Inject
@@ -98,6 +102,18 @@ class SendLocationPresenter @Inject constructor(
98102
event: SendLocationEvents.SendLocation,
99103
mode: SendLocationState.Mode,
100104
) {
105+
val replyMode = messageComposerContext.composerMode as? MessageComposerMode.Reply
106+
val replyParams = replyMode?.replyToDetails?.let { details ->
107+
if (replyMode.inThread) {
108+
replyInThread(details.eventId())
109+
} else {
110+
ReplyParameters(
111+
inReplyToEventId = details.eventId(),
112+
enforceThreadReply = false,
113+
replyWithinThread = false
114+
)
115+
}
116+
}
101117
when (mode) {
102118
SendLocationState.Mode.PinLocation -> {
103119
val geoUri = event.cameraPosition.toGeoUri()
@@ -106,7 +122,8 @@ class SendLocationPresenter @Inject constructor(
106122
geoUri = geoUri,
107123
description = null,
108124
zoomLevel = MapDefaults.DEFAULT_ZOOM.toInt(),
109-
assetType = AssetType.PIN
125+
assetType = AssetType.PIN,
126+
replyParameters = replyParams,
110127
)
111128
analyticsService.capture(
112129
Composer(
@@ -124,7 +141,8 @@ class SendLocationPresenter @Inject constructor(
124141
geoUri = geoUri,
125142
description = null,
126143
zoomLevel = MapDefaults.DEFAULT_ZOOM.toInt(),
127-
assetType = AssetType.SENDER
144+
assetType = AssetType.SENDER,
145+
replyParameters = replyParams,
128146
)
129147
analyticsService.capture(
130148
Composer(

features/location/impl/src/test/kotlin/io/element/android/features/location/impl/send/SendLocationPresenterTest.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import io.element.android.features.location.impl.common.permissions.PermissionsS
2222
import io.element.android.features.messages.test.FakeMessageComposerContext
2323
import io.element.android.libraries.matrix.api.room.JoinedRoom
2424
import io.element.android.libraries.matrix.api.room.location.AssetType
25+
import io.element.android.libraries.matrix.api.room.message.ReplyParameters
2526
import io.element.android.libraries.matrix.api.timeline.item.event.toEventOrTransactionId
2627
import io.element.android.libraries.matrix.test.AN_EVENT_ID
2728
import io.element.android.libraries.matrix.test.core.aBuildMeta
@@ -263,7 +264,7 @@ class SendLocationPresenterTest {
263264

264265
@Test
265266
fun `share sender location`() = runTest {
266-
val sendLocationResult = lambdaRecorder<String, String, String?, Int?, AssetType?, Result<Unit>> { _, _, _, _, _ ->
267+
val sendLocationResult = lambdaRecorder<String, String, String?, Int?, AssetType?, ReplyParameters?, Result<Unit>> { _, _, _, _, _, _ ->
267268
Result.success(Unit)
268269
}
269270
val joinedRoom = FakeJoinedRoom(
@@ -310,6 +311,7 @@ class SendLocationPresenterTest {
310311
value(null),
311312
value(15),
312313
value(AssetType.SENDER),
314+
value(null),
313315
)
314316

315317
assertThat(fakeAnalyticsService.capturedEvents.size).isEqualTo(1)
@@ -326,7 +328,7 @@ class SendLocationPresenterTest {
326328

327329
@Test
328330
fun `share pin location`() = runTest {
329-
val sendLocationResult = lambdaRecorder<String, String, String?, Int?, AssetType?, Result<Unit>> { _, _, _, _, _ ->
331+
val sendLocationResult = lambdaRecorder<String, String, String?, Int?, AssetType?, ReplyParameters?, Result<Unit>> { _, _, _, _, _, _ ->
330332
Result.success(Unit)
331333
}
332334
val joinedRoom = FakeJoinedRoom(
@@ -373,6 +375,7 @@ class SendLocationPresenterTest {
373375
value(null),
374376
value(15),
375377
value(AssetType.PIN),
378+
value(null),
376379
)
377380

378381
assertThat(fakeAnalyticsService.capturedEvents.size).isEqualTo(1)
@@ -389,7 +392,7 @@ class SendLocationPresenterTest {
389392

390393
@Test
391394
fun `composer context passes through analytics`() = runTest {
392-
val sendLocationResult = lambdaRecorder<String, String, String?, Int?, AssetType?, Result<Unit>> { _, _, _, _, _ ->
395+
val sendLocationResult = lambdaRecorder<String, String, String?, Int?, AssetType?, ReplyParameters?, Result<Unit>> { _, _, _, _, _, _ ->
393396
Result.success(Unit)
394397
}
395398
val joinedRoom = FakeJoinedRoom(

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/ComposerDraftService.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@
88
package io.element.android.features.messages.impl.draft
99

1010
import io.element.android.libraries.matrix.api.core.RoomId
11+
import io.element.android.libraries.matrix.api.core.ThreadId
1112
import io.element.android.libraries.matrix.api.room.draft.ComposerDraft
1213

1314
interface ComposerDraftService {
14-
suspend fun loadDraft(roomId: RoomId, isVolatile: Boolean): ComposerDraft?
15-
suspend fun updateDraft(roomId: RoomId, draft: ComposerDraft?, isVolatile: Boolean)
15+
suspend fun loadDraft(roomId: RoomId, threadRoot: ThreadId?, isVolatile: Boolean): ComposerDraft?
16+
suspend fun updateDraft(roomId: RoomId, threadRoot: ThreadId?, draft: ComposerDraft?, isVolatile: Boolean)
1617
}

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/ComposerDraftStore.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@
88
package io.element.android.features.messages.impl.draft
99

1010
import io.element.android.libraries.matrix.api.core.RoomId
11+
import io.element.android.libraries.matrix.api.core.ThreadId
1112
import io.element.android.libraries.matrix.api.room.draft.ComposerDraft
1213

1314
interface ComposerDraftStore {
14-
suspend fun loadDraft(roomId: RoomId): ComposerDraft?
15-
suspend fun updateDraft(roomId: RoomId, draft: ComposerDraft?)
15+
suspend fun loadDraft(roomId: RoomId, threadRoot: ThreadId?): ComposerDraft?
16+
suspend fun updateDraft(roomId: RoomId, threadRoot: ThreadId?, draft: ComposerDraft?)
1617
}

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ package io.element.android.features.messages.impl.draft
1010
import com.squareup.anvil.annotations.ContributesBinding
1111
import io.element.android.libraries.di.RoomScope
1212
import io.element.android.libraries.matrix.api.core.RoomId
13+
import io.element.android.libraries.matrix.api.core.ThreadId
1314
import io.element.android.libraries.matrix.api.room.draft.ComposerDraft
1415
import javax.inject.Inject
1516

@@ -18,12 +19,12 @@ class DefaultComposerDraftService @Inject constructor(
1819
private val volatileComposerDraftStore: VolatileComposerDraftStore,
1920
private val matrixComposerDraftStore: MatrixComposerDraftStore,
2021
) : ComposerDraftService {
21-
override suspend fun loadDraft(roomId: RoomId, isVolatile: Boolean): ComposerDraft? {
22-
return getStore(isVolatile).loadDraft(roomId)
22+
override suspend fun loadDraft(roomId: RoomId, threadRoot: ThreadId?, isVolatile: Boolean): ComposerDraft? {
23+
return getStore(isVolatile).loadDraft(roomId, threadRoot)
2324
}
2425

25-
override suspend fun updateDraft(roomId: RoomId, draft: ComposerDraft?, isVolatile: Boolean) {
26-
getStore(isVolatile).updateDraft(roomId, draft)
26+
override suspend fun updateDraft(roomId: RoomId, threadRoot: ThreadId?, draft: ComposerDraft?, isVolatile: Boolean) {
27+
getStore(isVolatile).updateDraft(roomId, threadRoot, draft)
2728
}
2829

2930
private fun getStore(isVolatile: Boolean): ComposerDraftStore {

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/MatrixComposerDraftStore.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package io.element.android.features.messages.impl.draft
99

1010
import io.element.android.libraries.matrix.api.MatrixClient
1111
import io.element.android.libraries.matrix.api.core.RoomId
12+
import io.element.android.libraries.matrix.api.core.ThreadId
1213
import io.element.android.libraries.matrix.api.room.draft.ComposerDraft
1314
import timber.log.Timber
1415
import javax.inject.Inject
@@ -20,26 +21,26 @@ import javax.inject.Inject
2021
class MatrixComposerDraftStore @Inject constructor(
2122
private val client: MatrixClient,
2223
) : ComposerDraftStore {
23-
override suspend fun loadDraft(roomId: RoomId): ComposerDraft? {
24+
override suspend fun loadDraft(roomId: RoomId, threadRoot: ThreadId?): ComposerDraft? {
2425
return client.getRoom(roomId)?.use { room ->
25-
room.loadComposerDraft()
26+
room.loadComposerDraft(threadRoot)
2627
.onFailure {
2728
Timber.e(it, "Failed to load composer draft for room $roomId")
2829
}
2930
.onSuccess { draft ->
30-
room.clearComposerDraft()
31+
room.clearComposerDraft(threadRoot)
3132
Timber.d("Loaded composer draft for room $roomId : $draft")
3233
}
3334
.getOrNull()
3435
}
3536
}
3637

37-
override suspend fun updateDraft(roomId: RoomId, draft: ComposerDraft?) {
38+
override suspend fun updateDraft(roomId: RoomId, threadRoot: ThreadId?, draft: ComposerDraft?) {
3839
client.getRoom(roomId)?.use { room ->
3940
val updateDraftResult = if (draft == null) {
40-
room.clearComposerDraft()
41+
room.clearComposerDraft(threadRoot)
4142
} else {
42-
room.saveComposerDraft(draft)
43+
room.saveComposerDraft(draft, threadRoot)
4344
}
4445
updateDraftResult
4546
.onFailure {

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/VolatileComposerDraftStore.kt

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
package io.element.android.features.messages.impl.draft
99

1010
import io.element.android.libraries.matrix.api.core.RoomId
11+
import io.element.android.libraries.matrix.api.core.ThreadId
1112
import io.element.android.libraries.matrix.api.room.draft.ComposerDraft
1213
import javax.inject.Inject
1314

@@ -17,18 +18,20 @@ import javax.inject.Inject
1718
* Currently it's used to store draft message when moving to edit mode.
1819
*/
1920
class VolatileComposerDraftStore @Inject constructor() : ComposerDraftStore {
20-
private val drafts: MutableMap<RoomId, ComposerDraft> = mutableMapOf()
21+
private val drafts: MutableMap<String, ComposerDraft> = mutableMapOf()
2122

22-
override suspend fun loadDraft(roomId: RoomId): ComposerDraft? {
23+
override suspend fun loadDraft(roomId: RoomId, threadRoot: ThreadId?): ComposerDraft? {
24+
val key = threadRoot?.value ?: roomId.value
2325
// Remove the draft from the map when it is loaded
24-
return drafts.remove(roomId)
26+
return drafts.remove(key)
2527
}
2628

27-
override suspend fun updateDraft(roomId: RoomId, draft: ComposerDraft?) {
29+
override suspend fun updateDraft(roomId: RoomId, threadRoot: ThreadId?, draft: ComposerDraft?) {
30+
val key = threadRoot?.value ?: roomId.value
2831
if (draft == null) {
29-
drafts.remove(roomId)
32+
drafts.remove(key)
3033
} else {
31-
drafts[roomId] = draft
34+
drafts[key] = draft
3235
}
3336
}
3437
}

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,12 @@ class MessageComposerPresenter @AssistedInject constructor(
219219
)
220220

221221
LaunchedEffect(Unit) {
222-
val draft = draftService.loadDraft(room.roomId, isVolatile = false)
222+
val draft = draftService.loadDraft(
223+
roomId = room.roomId,
224+
// TODO support threads in composer
225+
threadRoot = null,
226+
isVolatile = false
227+
)
223228
if (draft != null) {
224229
applyDraft(draft, markdownTextEditorState, richTextEditorState)
225230
}
@@ -539,7 +544,9 @@ class MessageComposerPresenter @AssistedInject constructor(
539544
draftService.updateDraft(
540545
roomId = room.roomId,
541546
draft = draft,
542-
isVolatile = isVolatile
547+
isVolatile = isVolatile,
548+
// TODO support threads in composer
549+
threadRoot = null,
543550
)
544551
}
545552

@@ -700,7 +707,12 @@ class MessageComposerPresenter @AssistedInject constructor(
700707
fromEdit: Boolean,
701708
) {
702709
// Use the volatile draft only when coming from edit mode otherwise.
703-
val draft = draftService.loadDraft(room.roomId, isVolatile = true).takeIf { fromEdit }
710+
val draft = draftService.loadDraft(
711+
roomId = room.roomId,
712+
// TODO support threads in composer
713+
threadRoot = null,
714+
isVolatile = true
715+
).takeIf { fromEdit }
704716
if (draft != null) {
705717
applyDraft(draft, markdownTextEditorState, richTextEditorState)
706718
} else {

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ internal fun MessageShield.toText(): String {
8080
is MessageShield.UnverifiedIdentity -> CommonStrings.event_shield_reason_unverified_identity
8181
is MessageShield.SentInClear -> CommonStrings.event_shield_reason_sent_in_clear
8282
is MessageShield.VerificationViolation -> CommonStrings.event_shield_reason_previously_verified
83+
is MessageShield.MismatchedSender -> CommonStrings.event_shield_mismatched_sender
8384
}
8485
)
8586
}
@@ -91,7 +92,8 @@ internal fun MessageShield.toIcon(): ImageVector {
9192
is MessageShield.UnknownDevice,
9293
is MessageShield.UnsignedDevice,
9394
is MessageShield.UnverifiedIdentity,
94-
is MessageShield.VerificationViolation -> CompoundIcons.HelpSolid()
95+
is MessageShield.VerificationViolation,
96+
is MessageShield.MismatchedSender -> CompoundIcons.HelpSolid()
9597
is MessageShield.SentInClear -> CompoundIcons.LockOff()
9698
}
9799
}
@@ -122,6 +124,9 @@ internal fun MessageShieldViewPreview() {
122124
MessageShieldView(
123125
shield = MessageShield.VerificationViolation(false)
124126
)
127+
MessageShieldView(
128+
shield = MessageShield.MismatchedSender(false)
129+
)
125130
}
126131
}
127132
}

features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/draft/FakeComposerDraftService.kt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,22 @@
88
package io.element.android.features.messages.impl.draft
99

1010
import io.element.android.libraries.matrix.api.core.RoomId
11+
import io.element.android.libraries.matrix.api.core.ThreadId
1112
import io.element.android.libraries.matrix.api.room.draft.ComposerDraft
1213

1314
class FakeComposerDraftService : ComposerDraftService {
14-
var loadDraftLambda: (RoomId, Boolean) -> ComposerDraft? = { _, _ -> null }
15-
override suspend fun loadDraft(roomId: RoomId, isVolatile: Boolean): ComposerDraft? = loadDraftLambda(roomId, isVolatile)
15+
var loadDraftLambda: (RoomId, ThreadId?, Boolean) -> ComposerDraft? = { _, _, _ -> null }
16+
override suspend fun loadDraft(
17+
roomId: RoomId,
18+
threadRoot: ThreadId?,
19+
isVolatile: Boolean
20+
): ComposerDraft? = loadDraftLambda(roomId, threadRoot, isVolatile)
1621

17-
var saveDraftLambda: (RoomId, ComposerDraft?, Boolean) -> Unit = { _, _, _ -> }
18-
override suspend fun updateDraft(roomId: RoomId, draft: ComposerDraft?, isVolatile: Boolean) = saveDraftLambda(roomId, draft, isVolatile)
22+
var saveDraftLambda: (RoomId, ThreadId?, ComposerDraft?, Boolean) -> Unit = { _, _, _, _ -> }
23+
override suspend fun updateDraft(
24+
roomId: RoomId,
25+
threadRoot: ThreadId?,
26+
draft: ComposerDraft?,
27+
isVolatile: Boolean
28+
) = saveDraftLambda(roomId, threadRoot, draft, isVolatile)
1929
}

0 commit comments

Comments
 (0)