Skip to content

Commit 32b1b6e

Browse files
authored
Merge pull request #3115 from element-hq/feature/fga/fix_draft_not_cleared
Draft : also clear draft when composer is blank
2 parents 0288605 + 3a610e6 commit 32b1b6e

File tree

5 files changed

+21
-15
lines changed

5 files changed

+21
-15
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@ import io.element.android.libraries.matrix.api.room.draft.ComposerDraft
2121

2222
interface ComposerDraftService {
2323
suspend fun loadDraft(roomId: RoomId): ComposerDraft?
24-
suspend fun saveDraft(roomId: RoomId, draft: ComposerDraft)
24+
suspend fun updateDraft(roomId: RoomId, draft: ComposerDraft?)
2525
}

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,19 @@ class DefaultComposerDraftService @Inject constructor(
4242
}
4343
}
4444

45-
override suspend fun saveDraft(roomId: RoomId, draft: ComposerDraft) {
45+
override suspend fun updateDraft(roomId: RoomId, draft: ComposerDraft?) {
4646
client.getRoom(roomId)?.use { room ->
47-
room.saveComposerDraft(draft)
47+
val updateDraftResult = if (draft == null) {
48+
room.clearComposerDraft()
49+
} else {
50+
room.saveComposerDraft(draft)
51+
}
52+
updateDraftResult
4853
.onFailure {
49-
Timber.e(it, "Failed to save composer draft for room $roomId")
54+
Timber.e(it, "Failed to update composer draft for room $roomId")
5055
}
5156
.onSuccess {
52-
Timber.d("Saved composer draft for room $roomId")
57+
Timber.d("Updated composer draft for room $roomId")
5358
}
5459
}
5560
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -582,16 +582,16 @@ class MessageComposerPresenter @Inject constructor(
582582
}
583583
is MessageComposerMode.Reply -> ComposerDraftType.Reply(mode.eventId)
584584
}
585-
if (draftType == null || markdown.isBlank()) {
586-
return@launch
585+
val composerDraft = if (draftType == null || markdown.isBlank()) {
586+
null
587587
} else {
588-
val composerDraft = ComposerDraft(
588+
ComposerDraft(
589589
draftType = draftType,
590590
htmlText = html,
591591
plainText = markdown,
592592
)
593-
draftService.saveDraft(room.roomId, composerDraft)
594593
}
594+
draftService.updateDraft(room.roomId, composerDraft)
595595
}
596596

597597
private fun CoroutineScope.toggleTextFormatting(

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@ class FakeComposerDraftService : ComposerDraftService {
2323
var loadDraftLambda: (RoomId) -> ComposerDraft? = { null }
2424
override suspend fun loadDraft(roomId: RoomId) = loadDraftLambda(roomId)
2525

26-
var saveDraftLambda: (RoomId, ComposerDraft) -> Unit = { _, _ -> }
27-
override suspend fun saveDraft(roomId: RoomId, draft: ComposerDraft) = saveDraftLambda(roomId, draft)
26+
var saveDraftLambda: (RoomId, ComposerDraft?) -> Unit = { _, _ -> }
27+
override suspend fun updateDraft(roomId: RoomId, draft: ComposerDraft?) = saveDraftLambda(roomId, draft)
2828
}

features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,8 +1176,8 @@ class MessageComposerPresenterTest {
11761176
}
11771177

11781178
@Test
1179-
fun `present - when save draft event is invoked and composer is empty then nothing happens`() = runTest {
1180-
val saveDraftLambda = lambdaRecorder<RoomId, ComposerDraft, Unit> { _, _ -> }
1179+
fun `present - when save draft event is invoked and composer is empty then service is called with null draft`() = runTest {
1180+
val saveDraftLambda = lambdaRecorder<RoomId, ComposerDraft?, Unit> { _, _ -> }
11811181
val composerDraftService = FakeComposerDraftService().apply {
11821182
this.saveDraftLambda = saveDraftLambda
11831183
}
@@ -1189,13 +1189,14 @@ class MessageComposerPresenterTest {
11891189
initialState.eventSink.invoke(MessageComposerEvents.SaveDraft)
11901190
advanceUntilIdle()
11911191
assert(saveDraftLambda)
1192-
.isNeverCalled()
1192+
.isCalledOnce()
1193+
.with(value(A_ROOM_ID), value(null))
11931194
}
11941195
}
11951196

11961197
@Test
11971198
fun `present - when save draft event is invoked and composer is not empty then service is called`() = runTest {
1198-
val saveDraftLambda = lambdaRecorder<RoomId, ComposerDraft, Unit> { _, _ -> }
1199+
val saveDraftLambda = lambdaRecorder<RoomId, ComposerDraft?, Unit> { _, _ -> }
11991200
val composerDraftService = FakeComposerDraftService().apply {
12001201
this.saveDraftLambda = saveDraftLambda
12011202
}

0 commit comments

Comments
 (0)