Support scheduled voice notes.

Resolves #13957
This commit is contained in:
Sagar
2025-01-31 19:47:58 +05:30
committed by Michelle Tang
parent da5c8ff6ea
commit 52c8dfc998
6 changed files with 54 additions and 21 deletions

View File

@@ -1840,7 +1840,8 @@ class ConversationFragment :
slide: Slide? = null,
contacts: List<Contact> = emptyList(),
quote: QuoteModel? = null,
clearCompose: Boolean = true
clearCompose: Boolean = true,
scheduledDate: Long = -1
) {
sendMessage(
slideDeck = slide?.let { SlideDeck().apply { addSlide(slide) } },
@@ -1852,7 +1853,8 @@ class ConversationFragment :
messageToEdit = null,
quote = quote,
linkPreviews = emptyList(),
bypassPreSendSafetyNumberCheck = true
bypassPreSendSafetyNumberCheck = true,
scheduledDate = scheduledDate
)
}
@@ -1892,19 +1894,24 @@ class ConversationFragment :
}
if (inputPanel.isRecordingInLockedMode) {
inputPanel.releaseRecordingLock()
inputPanel.releaseRecordingLockAndSend()
return
}
if (slideDeck == null) {
val voiceNote: DraftTable.Draft? = draftViewModel.voiceNoteDraft
if (voiceNote != null) {
sendMessageWithoutComposeInput(slide = AudioSlide.createFromVoiceNoteDraft(voiceNote), clearCompose = true)
sendMessageWithoutComposeInput(
slide = AudioSlide.createFromVoiceNoteDraft(voiceNote),
quote = quote,
clearCompose = true,
scheduledDate = scheduledDate
)
return
}
}
if (body.isNullOrBlank() && slideDeck?.containsMediaSlide() != true && preUploadResults.isEmpty() && contacts.isEmpty()) {
if (body.isBlank() && slideDeck?.containsMediaSlide() != true && preUploadResults.isEmpty() && contacts.isEmpty()) {
Log.i(TAG, "Unable to send due to empty message")
toast(R.string.ConversationActivity_message_is_empty_exclamation)
return
@@ -3970,6 +3977,10 @@ class ConversationFragment :
}
override fun onSendScheduled() {
if (inputPanel.isRecordingInLockedMode) {
inputPanel.onSaveRecordDraft()
}
ScheduleMessageContextMenu.show(sendButton, (requireView() as ViewGroup)) { time ->
if (time == -1L) {
showSchedule(childFragmentManager)
@@ -3978,10 +3989,6 @@ class ConversationFragment :
}
}
}
override fun canSchedule(): Boolean {
return !(inputPanel.isRecordingInLockedMode || draftViewModel.voiceNoteDraft != null)
}
}
private inner class ComposeTextEventsListener :
@@ -4126,6 +4133,11 @@ class ConversationFragment :
voiceMessageRecordingDelegate.onRecorderCanceled(byUser)
}
override fun onRecorderSaveDraft() {
voiceMessageRecordingDelegate.onRecordSaveDraft()
inputPanel.voiceNoteDraft = draftViewModel.voiceNoteDraft
}
override fun onRecorderPermissionRequired() {
Permissions
.with(this@ConversationFragment)

View File

@@ -69,6 +69,12 @@ class VoiceMessageRecordingDelegate(
}
}
fun onRecordSaveDraft() {
voiceRecorderWakeLock.release()
vibrateAndResetOrientation(50)
session?.saveDraft()
}
@Suppress("DEPRECATION")
private fun vibrateAndResetOrientation(milliseconds: Long) {
val activity = fragment.activity