Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/src/main/kotlin/com/wire/android/di/AppModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import linc.com.amplituda.Amplituda
import com.linc.amplituda.Amplituda
import javax.inject.Named
import javax.inject.Qualifier
import javax.inject.Singleton
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ data class AudioState(
val audioMediaPlayingState: AudioMediaPlayingState,
val currentPositionInMs: Int,
val totalTimeInMs: TotalTimeInMs,
val wavesMask: List<Int>
val wavesMask: List<Int>?
) {
companion object {
val DEFAULT = AudioState(AudioMediaPlayingState.Stopped, 0, TotalTimeInMs.NotKnown, listOf())
val DEFAULT = AudioState(AudioMediaPlayingState.Stopped, 0, TotalTimeInMs.NotKnown, null)
}

// if the back-end returned the total time, we use that, in case it didn't we use what we get from
Expand Down Expand Up @@ -146,7 +146,7 @@ sealed class AudioMediaPlayerStateUpdate(
data class WaveMaskUpdate(
override val conversationId: ConversationId,
override val messageId: String,
val waveMask: List<Int>
val waveMask: List<Int>?
) : AudioMediaPlayerStateUpdate(conversationId, messageId)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,42 @@
*/
package com.wire.android.media.audiomessage

import linc.com.amplituda.Amplituda
import linc.com.amplituda.Cache
import android.content.Context
import dagger.Lazy
import com.linc.amplituda.Amplituda
import com.linc.amplituda.Cache
import dagger.Reusable
import okio.Path
import java.io.File
import javax.inject.Inject
import kotlin.math.roundToInt

@Reusable

Check warning on line 30 in app/src/main/kotlin/com/wire/android/media/audiomessage/AudioWavesMaskHelper.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/media/audiomessage/AudioWavesMaskHelper.kt#L30

Added line #L30 was not covered by tests
class AudioWavesMaskHelper @Inject constructor(
private val amplituda: Amplituda
private val amplituda: Lazy<Amplituda>

Check warning on line 32 in app/src/main/kotlin/com/wire/android/media/audiomessage/AudioWavesMaskHelper.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/media/audiomessage/AudioWavesMaskHelper.kt#L32

Added line #L32 was not covered by tests
) {

lateinit var context: Context

Check warning on line 35 in app/src/main/kotlin/com/wire/android/media/audiomessage/AudioWavesMaskHelper.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/media/audiomessage/AudioWavesMaskHelper.kt#L35

Added line #L35 was not covered by tests
companion object {
private const val WAVES_AMOUNT = 75
private const val WAVE_MAX = 32
}

fun getWaveMask(decodedAssetPath: Path): List<Int> = getWaveMask(File(decodedAssetPath.toString()))
@Suppress("TooGenericExceptionCaught")
private fun getAmplituda(): Amplituda? = try {
amplituda.get()
} catch (e: NullPointerException) {
null

Check warning on line 45 in app/src/main/kotlin/com/wire/android/media/audiomessage/AudioWavesMaskHelper.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/media/audiomessage/AudioWavesMaskHelper.kt#L42-L45

Added lines #L42 - L45 were not covered by tests
}

fun getWaveMask(decodedAssetPath: Path): List<Int>? = getWaveMask(File(decodedAssetPath.toString()))

Check warning on line 48 in app/src/main/kotlin/com/wire/android/media/audiomessage/AudioWavesMaskHelper.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/media/audiomessage/AudioWavesMaskHelper.kt#L48

Added line #L48 was not covered by tests

fun getWaveMask(file: File): List<Int> = amplituda
.processAudio(file, Cache.withParams(Cache.REUSE))
.get()
.amplitudesAsList()
.averageWavesMask()
.equalizeWavesMask()
fun getWaveMask(file: File): List<Int>? = getAmplituda()

Check warning on line 50 in app/src/main/kotlin/com/wire/android/media/audiomessage/AudioWavesMaskHelper.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/media/audiomessage/AudioWavesMaskHelper.kt#L50

Added line #L50 was not covered by tests
?.processAudio(file, Cache.withParams(Cache.REUSE))
?.get()
?.amplitudesAsList()
?.averageWavesMask()
?.equalizeWavesMask()

private fun List<Double>.equalizeWavesMask(): List<Int> {
if (this.isEmpty()) return listOf()
Expand Down Expand Up @@ -76,6 +88,6 @@
}

fun clear() {
amplituda.clearCache()
getAmplituda()?.clearCache()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -184,11 +184,13 @@
audioMediaPlayer.seekTo(position)
audioMediaPlayer.start()

audioMessageStateUpdate.emit(
RecordAudioMediaPlayerStateUpdate.WaveMaskUpdate(
wavesMaskHelper.getWaveMask(audioFile)
wavesMaskHelper.getWaveMask(audioFile)?.let { waveMask ->
audioMessageStateUpdate.emit(
RecordAudioMediaPlayerStateUpdate.WaveMaskUpdate(
waveMask = waveMask

Check warning on line 190 in app/src/main/kotlin/com/wire/android/media/audiomessage/RecordAudioMessagePlayer.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/media/audiomessage/RecordAudioMessagePlayer.kt#L188-L190

Added lines #L188 - L190 were not covered by tests
)
)
)
}

Check warning on line 193 in app/src/main/kotlin/com/wire/android/media/audiomessage/RecordAudioMessagePlayer.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/media/audiomessage/RecordAudioMessagePlayer.kt#L193

Added line #L193 was not covered by tests

audioMessageStateUpdate.emit(
RecordAudioMediaPlayerStateUpdate.RecordAudioMediaPlayingStateUpdate(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -335,12 +335,12 @@ fun SuccessfulAudioMessageContent(
private fun AudioMessageSlider(
audioDuration: AudioDuration,
totalTimeInMs: AudioState.TotalTimeInMs,
waveMask: List<Int>,
waveMask: List<Int>?,
onSliderPositionChange: (Float) -> Unit,
) {
Box(modifier = Modifier.fillMaxWidth()) {
val totalMs = if (totalTimeInMs is AudioState.TotalTimeInMs.Known) totalTimeInMs.value.toFloat() else 0f
val waves = waveMask.ifEmpty { getDefaultWaveMask() }
val waves = waveMask?.ifEmpty { getDefaultWaveMask() } ?: getDefaultWaveMask()
val wavesAmount = waves.size

Row(
Expand Down
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ androidx-biometric = "1.1.0"
androidx-startup = "1.2.0"
androidx-compose-runtime = "1.7.2"
compose-qr = "1.0.1"
amplituda = "2.2.2"
amplituda = "2.3.0"

# Compose
composeBom = "2024.12.01"
Expand Down
Loading