Prevent sharing and clear drafts when entering disabled send conversations.

This commit is contained in:
Cody Henthorne 2024-09-12 17:02:24 -04:00
parent 850515b363
commit 636b5a4ba6
3 changed files with 28 additions and 6 deletions

View file

@ -115,9 +115,9 @@ class DraftViewModel @JvmOverloads constructor(
}
}
fun onSendComplete(threadId: Long = store.state.threadId) {
fun clearDraft() {
repository.deleteVoiceNoteDraftData(store.state.voiceNoteDraft)
store.update { saveDraftsIfChanged(it, it.copyAndClearDrafts(threadId)) }
store.update { saveDraftsIfChanged(it, it.copyAndClearDrafts(store.state.threadId)) }
}
private fun saveDraftsIfChanged(oldState: DraftState, newState: DraftState): DraftState {

View file

@ -1072,8 +1072,13 @@ class ConversationFragment :
this::handleReplyToMessage
).attachToRecyclerView(binding.conversationItemRecycler)
draftViewModel.loadShareOrDraftData(shareDataTimestampViewModel.timestamp)
.subscribeBy { data -> handleShareOrDraftData(data) }
viewModel
.inputReadyState
.flatMapMaybe { inputReadyState ->
draftViewModel.loadShareOrDraftData(shareDataTimestampViewModel.timestamp)
.map { inputReadyState to it }
}
.subscribeBy { (inputReadyState, data) -> handleShareOrDraftData(inputReadyState, data) }
.addTo(disposables)
disposables.add(
@ -1519,9 +1524,18 @@ class ConversationFragment :
}
}
private fun handleShareOrDraftData(data: ShareOrDraftData) {
private fun handleShareOrDraftData(inputReadyState: InputReadyState, data: ShareOrDraftData) {
shareDataTimestampViewModel.timestamp = args.shareDataTimestamp
if (inputReadyState.isAnnouncementGroup == true && inputReadyState.isAdmin == false) {
Toast.makeText(requireContext(), R.string.MultiselectForwardFragment__only_admins_can_send_messages_to_this_group, Toast.LENGTH_SHORT).show()
draftViewModel.clearDraft()
return
} else if (inputReadyState.shouldClearDraft()) {
draftViewModel.clearDraft()
return
}
when (data) {
is ShareOrDraftData.SendKeyboardImage -> sendMessageWithoutComposeInput(slide = data.slide, clearCompose = false)
is ShareOrDraftData.SendSticker -> sendMessageWithoutComposeInput(slide = data.slide, clearCompose = true)
@ -1960,7 +1974,7 @@ class ConversationFragment :
updateLinkPreviewState()
draftViewModel.onSendComplete()
draftViewModel.clearDraft()
inputPanel.exitEditMessageMode()

View file

@ -34,6 +34,14 @@ class InputReadyState(
!conversationRecipient.isReleaseNotes
}
fun shouldClearDraft(): Boolean {
return isActiveGroup == false ||
isRequestingMember == true ||
(isAnnouncementGroup == true && isAdmin == false) ||
conversationRecipient.isReleaseNotes ||
shouldShowInviteToSignal()
}
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false