Trigger VoiceBroadcast recording actions

This commit is contained in:
Florian Renaud 2022-10-13 23:45:49 +02:00
parent ad2bf8d1ce
commit 3ad245db8b
4 changed files with 52 additions and 15 deletions

View File

@ -16,8 +16,8 @@
package im.vector.app.features.voicebroadcast.usecase package im.vector.app.features.voicebroadcast.usecase
import im.vector.app.features.home.room.detail.composer.AudioMessageHelper
import im.vector.app.features.voicebroadcast.STATE_ROOM_VOICE_BROADCAST_INFO import im.vector.app.features.voicebroadcast.STATE_ROOM_VOICE_BROADCAST_INFO
import im.vector.app.features.voicebroadcast.VoiceBroadcastRecorder
import im.vector.app.features.voicebroadcast.model.MessageVoiceBroadcastInfoContent import im.vector.app.features.voicebroadcast.model.MessageVoiceBroadcastInfoContent
import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState
import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent
@ -32,7 +32,7 @@ import javax.inject.Inject
class PauseVoiceBroadcastUseCase @Inject constructor( class PauseVoiceBroadcastUseCase @Inject constructor(
private val session: Session, private val session: Session,
private val audioMessageHelper: AudioMessageHelper, private val voiceBroadcastRecorder: VoiceBroadcastRecorder?,
) { ) {
suspend fun execute(roomId: String): Result<Unit> = runCatching { suspend fun execute(roomId: String): Result<Unit> = runCatching {
@ -66,6 +66,6 @@ class PauseVoiceBroadcastUseCase @Inject constructor(
} }
private fun pauseRecording() { private fun pauseRecording() {
audioMessageHelper.pauseRecording() voiceBroadcastRecorder?.pauseRecord()
} }
} }

View File

@ -16,8 +16,8 @@
package im.vector.app.features.voicebroadcast.usecase package im.vector.app.features.voicebroadcast.usecase
import im.vector.app.features.home.room.detail.composer.AudioMessageHelper
import im.vector.app.features.voicebroadcast.STATE_ROOM_VOICE_BROADCAST_INFO import im.vector.app.features.voicebroadcast.STATE_ROOM_VOICE_BROADCAST_INFO
import im.vector.app.features.voicebroadcast.VoiceBroadcastRecorder
import im.vector.app.features.voicebroadcast.model.MessageVoiceBroadcastInfoContent import im.vector.app.features.voicebroadcast.model.MessageVoiceBroadcastInfoContent
import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState
import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent
@ -32,7 +32,7 @@ import javax.inject.Inject
class ResumeVoiceBroadcastUseCase @Inject constructor( class ResumeVoiceBroadcastUseCase @Inject constructor(
private val session: Session, private val session: Session,
private val audioMessageHelper: AudioMessageHelper, private val voiceBroadcastRecorder: VoiceBroadcastRecorder?,
) { ) {
suspend fun execute(roomId: String): Result<Unit> = runCatching { suspend fun execute(roomId: String): Result<Unit> = runCatching {
@ -71,6 +71,6 @@ class ResumeVoiceBroadcastUseCase @Inject constructor(
} }
private fun resumeRecording() { private fun resumeRecording() {
audioMessageHelper.resumeRecording() voiceBroadcastRecorder?.resumeRecord()
} }
} }

View File

@ -16,22 +16,33 @@
package im.vector.app.features.voicebroadcast.usecase package im.vector.app.features.voicebroadcast.usecase
import im.vector.app.features.home.room.detail.composer.AudioMessageHelper import android.content.Context
import android.os.Build
import androidx.core.content.FileProvider
import im.vector.app.core.resources.BuildMeta
import im.vector.app.features.attachments.toContentAttachmentData
import im.vector.app.features.voicebroadcast.STATE_ROOM_VOICE_BROADCAST_INFO import im.vector.app.features.voicebroadcast.STATE_ROOM_VOICE_BROADCAST_INFO
import im.vector.app.features.voicebroadcast.VoiceBroadcastRecorder
import im.vector.app.features.voicebroadcast.model.MessageVoiceBroadcastInfoContent import im.vector.app.features.voicebroadcast.model.MessageVoiceBroadcastInfoContent
import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState
import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent
import im.vector.lib.multipicker.utils.toMultiPickerAudioType
import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.query.QueryStringValue
import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.events.model.RelationType
import org.matrix.android.sdk.api.session.events.model.toContent import org.matrix.android.sdk.api.session.events.model.toContent
import org.matrix.android.sdk.api.session.getRoom import org.matrix.android.sdk.api.session.getRoom
import org.matrix.android.sdk.api.session.room.Room import org.matrix.android.sdk.api.session.room.Room
import org.matrix.android.sdk.api.session.room.model.relation.RelationDefaultContent
import timber.log.Timber import timber.log.Timber
import java.io.File
import javax.inject.Inject import javax.inject.Inject
class StartVoiceBroadcastUseCase @Inject constructor( class StartVoiceBroadcastUseCase @Inject constructor(
private val session: Session, private val session: Session,
private val audioMessageHelper: AudioMessageHelper, private val voiceBroadcastRecorder: VoiceBroadcastRecorder?,
private val context: Context,
private val buildMeta: BuildMeta,
) { ) {
suspend fun execute(roomId: String): Result<Unit> = runCatching { suspend fun execute(roomId: String): Result<Unit> = runCatching {
@ -55,7 +66,7 @@ class StartVoiceBroadcastUseCase @Inject constructor(
private suspend fun startVoiceBroadcast(room: Room) { private suspend fun startVoiceBroadcast(room: Room) {
Timber.d("## StartVoiceBroadcastUseCase: Send new voice broadcast info state event") Timber.d("## StartVoiceBroadcastUseCase: Send new voice broadcast info state event")
room.stateService().sendStateEvent( val eventId = room.stateService().sendStateEvent(
eventType = STATE_ROOM_VOICE_BROADCAST_INFO, eventType = STATE_ROOM_VOICE_BROADCAST_INFO,
stateKey = session.myUserId, stateKey = session.myUserId,
body = MessageVoiceBroadcastInfoContent( body = MessageVoiceBroadcastInfoContent(
@ -64,10 +75,33 @@ class StartVoiceBroadcastUseCase @Inject constructor(
).toContent() ).toContent()
) )
startRecording(room) startRecording(room, eventId)
} }
private fun startRecording(room: Room) { private fun startRecording(room: Room, eventId: String) {
audioMessageHelper.startRecording(room.roomId) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
voiceBroadcastRecorder?.listener = VoiceBroadcastRecorder.Listener { file ->
sendVoiceFile(room, file, eventId)
}
voiceBroadcastRecorder?.startRecord(room.roomId)
}
}
private fun sendVoiceFile(room: Room, voiceMessageFile: File, referenceEventId: String) {
val outputFileUri = FileProvider.getUriForFile(
context,
buildMeta.applicationId + ".fileProvider",
voiceMessageFile,
"Voice message.${voiceMessageFile.extension}"
)
val audioType = outputFileUri.toMultiPickerAudioType(context) ?: return
if (audioType.duration > 1000) {
room.sendService().sendMedia(
attachment = audioType.toContentAttachmentData(isVoiceMessage = true),
compressBeforeSending = false,
roomIds = emptySet(),
relatesTo = RelationDefaultContent(RelationType.REFERENCE, referenceEventId)
)
}
} }
} }

View File

@ -16,8 +16,9 @@
package im.vector.app.features.voicebroadcast.usecase package im.vector.app.features.voicebroadcast.usecase
import im.vector.app.features.home.room.detail.composer.AudioMessageHelper import android.os.Build
import im.vector.app.features.voicebroadcast.STATE_ROOM_VOICE_BROADCAST_INFO import im.vector.app.features.voicebroadcast.STATE_ROOM_VOICE_BROADCAST_INFO
import im.vector.app.features.voicebroadcast.VoiceBroadcastRecorder
import im.vector.app.features.voicebroadcast.model.MessageVoiceBroadcastInfoContent import im.vector.app.features.voicebroadcast.model.MessageVoiceBroadcastInfoContent
import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState
import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent
@ -32,7 +33,7 @@ import javax.inject.Inject
class StopVoiceBroadcastUseCase @Inject constructor( class StopVoiceBroadcastUseCase @Inject constructor(
private val session: Session, private val session: Session,
private val audioMessageHelper: AudioMessageHelper, private val voiceBroadcastRecorder: VoiceBroadcastRecorder?,
) { ) {
suspend fun execute(roomId: String): Result<Unit> = runCatching { suspend fun execute(roomId: String): Result<Unit> = runCatching {
@ -67,6 +68,8 @@ class StopVoiceBroadcastUseCase @Inject constructor(
} }
private fun stopRecording() { private fun stopRecording() {
audioMessageHelper.stopRecording() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
voiceBroadcastRecorder?.stopRecord()
}
} }
} }