Prevent sharing and clear drafts when entering disabled send conversations.
This commit is contained in:
parent
850515b363
commit
636b5a4ba6
3 changed files with 28 additions and 6 deletions
|
@ -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 {
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue