From 64e6a2bfaba5aee8448a6e54617fd4b2d60e97c6 Mon Sep 17 00:00:00 2001 From: Florian Renaud Date: Fri, 14 Oct 2022 12:23:02 +0200 Subject: [PATCH] Compute file size from chunk length --- .../voicebroadcast/VoiceBroadcastConstants.kt | 3 +++ .../voicebroadcast/VoiceBroadcastRecorder.kt | 2 ++ .../voicebroadcast/VoiceBroadcastRecorderQ.kt | 7 ++++++- .../model/MessageVoiceBroadcastInfoContent.kt | 2 +- .../usecase/StartVoiceBroadcastUseCase.kt | 16 +++++++--------- 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/voicebroadcast/VoiceBroadcastConstants.kt b/vector/src/main/java/im/vector/app/features/voicebroadcast/VoiceBroadcastConstants.kt index 8c005deb1f..07bd94ca8c 100644 --- a/vector/src/main/java/im/vector/app/features/voicebroadcast/VoiceBroadcastConstants.kt +++ b/vector/src/main/java/im/vector/app/features/voicebroadcast/VoiceBroadcastConstants.kt @@ -20,4 +20,7 @@ object VoiceBroadcastConstants { /** Voice Broadcast State Event. */ const val STATE_ROOM_VOICE_BROADCAST_INFO = "io.element.voice_broadcast_info" + + /** Default voice broadcast chunk duration, in seconds */ + const val DEFAULT_CHUNK_LENGTH = 5 } diff --git a/vector/src/main/java/im/vector/app/features/voicebroadcast/VoiceBroadcastRecorder.kt b/vector/src/main/java/im/vector/app/features/voicebroadcast/VoiceBroadcastRecorder.kt index 916f39106a..2668501a8d 100644 --- a/vector/src/main/java/im/vector/app/features/voicebroadcast/VoiceBroadcastRecorder.kt +++ b/vector/src/main/java/im/vector/app/features/voicebroadcast/VoiceBroadcastRecorder.kt @@ -23,6 +23,8 @@ interface VoiceBroadcastRecorder : VoiceRecorder { var listener: Listener? + fun startRecord(roomId: String, chunkLength: Int) + fun interface Listener { fun onVoiceMessageCreated(file: File) } diff --git a/vector/src/main/java/im/vector/app/features/voicebroadcast/VoiceBroadcastRecorderQ.kt b/vector/src/main/java/im/vector/app/features/voicebroadcast/VoiceBroadcastRecorderQ.kt index 3aaad19a47..fe8222e840 100644 --- a/vector/src/main/java/im/vector/app/features/voicebroadcast/VoiceBroadcastRecorderQ.kt +++ b/vector/src/main/java/im/vector/app/features/voicebroadcast/VoiceBroadcastRecorderQ.kt @@ -28,7 +28,7 @@ class VoiceBroadcastRecorderQ( context: Context, ) : AbstractVoiceRecorderQ(context), VoiceBroadcastRecorder { - private val maxFileSize = 25_000L // 0,025 Mb = 25 Kb ~= 6s + private var maxFileSize = 25_000L // 0,025 Mb = 25 Kb ~= 6s override var listener: VoiceBroadcastRecorder.Listener? = null @@ -49,6 +49,11 @@ class VoiceBroadcastRecorderQ( } } + override fun startRecord(roomId: String, chunkLength: Int) { + maxFileSize = (chunkLength * 0.004166).toLong() // TODO change this approximate conversion + startRecord(roomId) + } + override fun stopRecord() { super.stopRecord() notifyOutputFileCreated() diff --git a/vector/src/main/java/im/vector/app/features/voicebroadcast/model/MessageVoiceBroadcastInfoContent.kt b/vector/src/main/java/im/vector/app/features/voicebroadcast/model/MessageVoiceBroadcastInfoContent.kt index 7e4a3d04be..5044bb5c34 100644 --- a/vector/src/main/java/im/vector/app/features/voicebroadcast/model/MessageVoiceBroadcastInfoContent.kt +++ b/vector/src/main/java/im/vector/app/features/voicebroadcast/model/MessageVoiceBroadcastInfoContent.kt @@ -41,7 +41,7 @@ data class MessageVoiceBroadcastInfoContent( /** The [VoiceBroadcastState] value. **/ @Json(name = "state") val voiceBroadcastStateStr: String = "", /** The length of the voice chunks in seconds. **/ - @Json(name = "chunk_length") val chunkLength: Long? = null, + @Json(name = "chunk_length") val chunkLength: Int? = null, ) : MessageContent { val voiceBroadcastState: VoiceBroadcastState? = VoiceBroadcastState.values() diff --git a/vector/src/main/java/im/vector/app/features/voicebroadcast/usecase/StartVoiceBroadcastUseCase.kt b/vector/src/main/java/im/vector/app/features/voicebroadcast/usecase/StartVoiceBroadcastUseCase.kt index 6be8e27345..64f1dfb317 100644 --- a/vector/src/main/java/im/vector/app/features/voicebroadcast/usecase/StartVoiceBroadcastUseCase.kt +++ b/vector/src/main/java/im/vector/app/features/voicebroadcast/usecase/StartVoiceBroadcastUseCase.kt @@ -17,7 +17,6 @@ package im.vector.app.features.voicebroadcast.usecase 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 @@ -66,25 +65,24 @@ class StartVoiceBroadcastUseCase @Inject constructor( private suspend fun startVoiceBroadcast(room: Room) { Timber.d("## StartVoiceBroadcastUseCase: Send new voice broadcast info state event") + val chunkLength = VoiceBroadcastConstants.DEFAULT_CHUNK_LENGTH // Todo Get the length from the room settings val eventId = room.stateService().sendStateEvent( eventType = VoiceBroadcastConstants.STATE_ROOM_VOICE_BROADCAST_INFO, stateKey = session.myUserId, body = MessageVoiceBroadcastInfoContent( voiceBroadcastStateStr = VoiceBroadcastState.STARTED.value, - chunkLength = 5L, // TODO Get length from voice broadcast settings + chunkLength = chunkLength, ).toContent() ) - startRecording(room, eventId) + startRecording(room, eventId, chunkLength) } - private fun startRecording(room: Room, eventId: String) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - voiceBroadcastRecorder?.listener = VoiceBroadcastRecorder.Listener { file -> - sendVoiceFile(room, file, eventId) - } - voiceBroadcastRecorder?.startRecord(room.roomId) + private fun startRecording(room: Room, eventId: String, chunkLength: Int) { + voiceBroadcastRecorder?.listener = VoiceBroadcastRecorder.Listener { file -> + sendVoiceFile(room, file, eventId) } + voiceBroadcastRecorder?.startRecord(room.roomId, chunkLength) } private fun sendVoiceFile(room: Room, voiceMessageFile: File, referenceEventId: String) {