diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/voice/RetryableInitAudioSink.kt b/app/src/main/java/org/thoughtcrime/securesms/components/voice/RetryableInitAudioSink.kt index 699437d537..fe3098c37d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/voice/RetryableInitAudioSink.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/voice/RetryableInitAudioSink.kt @@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.components.voice import android.content.Context import androidx.annotation.OptIn import androidx.media3.common.util.UnstableApi -import androidx.media3.exoplayer.audio.AudioCapabilities import androidx.media3.exoplayer.audio.AudioSink import androidx.media3.exoplayer.audio.DefaultAudioSink import org.signal.core.util.logging.Log @@ -19,12 +18,9 @@ class RetryableInitAudioSink( context: Context, enableFloatOutput: Boolean, enableAudioTrackPlaybackParams: Boolean, - enableOffload: Boolean, - val delegate: AudioSink = DefaultAudioSink.Builder() - .setAudioCapabilities(AudioCapabilities.getCapabilities(context)) + val delegate: AudioSink = DefaultAudioSink.Builder(context) .setEnableFloatOutput(enableFloatOutput) .setEnableAudioTrackPlaybackParams(enableAudioTrackPlaybackParams) - .setOffloadMode(if (enableOffload) DefaultAudioSink.OFFLOAD_MODE_ENABLED_GAPLESS_REQUIRED else DefaultAudioSink.OFFLOAD_MODE_DISABLED) .build() ) : AudioSink by delegate { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlayer.kt b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlayer.kt index c2823f1745..184f7a3e46 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlayer.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlayer.kt @@ -20,7 +20,7 @@ import org.thoughtcrime.securesms.video.exo.SignalMediaSourceFactory @OptIn(UnstableApi::class) class VoiceNotePlayer @JvmOverloads constructor( context: Context, - private val internalPlayer: ExoPlayer = ExoPlayer.Builder(context) + internalPlayer: ExoPlayer = ExoPlayer.Builder(context) .setRenderersFactory(WorkaroundRenderersFactory(context)) .setMediaSourceFactory(SignalMediaSourceFactory(context)) .setLoadControl( @@ -35,13 +35,6 @@ class VoiceNotePlayer @JvmOverloads constructor( setAudioAttributes(AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MUSIC).setUsage(C.USAGE_MEDIA).build(), true) } - /** - * Required to expose this because this is unique to [ExoPlayer], not the generic [androidx.media3.common.Player] interface. - */ - fun setAudioAttributes(audioAttributes: AudioAttributes, handleAudioFocus: Boolean) { - internalPlayer.setAudioAttributes(audioAttributes, handleAudioFocus) - } - override fun seekTo(windowIndex: Int, positionMs: Long) { super.seekTo(windowIndex, positionMs) @@ -66,7 +59,8 @@ class VoiceNotePlayer @JvmOverloads constructor( */ @OptIn(androidx.media3.common.util.UnstableApi::class) class WorkaroundRenderersFactory(val context: Context) : DefaultRenderersFactory(context) { - override fun buildAudioSink(context: Context, enableFloatOutput: Boolean, enableAudioTrackPlaybackParams: Boolean, enableOffload: Boolean): AudioSink? { - return RetryableInitAudioSink(context, enableFloatOutput, enableAudioTrackPlaybackParams, enableOffload) + + override fun buildAudioSink(context: Context, enableFloatOutput: Boolean, enableAudioTrackPlaybackParams: Boolean): AudioSink { + return RetryableInitAudioSink(context, enableFloatOutput, enableAudioTrackPlaybackParams) } } diff --git a/dependencies.gradle.kts b/dependencies.gradle.kts index 9af3680625..c0a0decdd5 100644 --- a/dependencies.gradle.kts +++ b/dependencies.gradle.kts @@ -9,7 +9,7 @@ dependencyResolutionManagement { version("androidx-camera", "1.3.0-rc01") version("androidx-fragment", "1.6.1") version("androidx-lifecycle", "2.6.1") - version("androidx-media3", "1.1.0") + version("androidx-media3", "1.2.1") version("androidx-navigation", "2.6.0") version("androidx-window", "1.0.0") version("exoplayer", "2.19.0") @@ -67,6 +67,8 @@ dependencyResolutionManagement { library("androidx-media3-exoplayer", "androidx.media3", "media3-exoplayer").versionRef("androidx-media3") library("androidx-media3-session", "androidx.media3", "media3-session").versionRef("androidx-media3") library("androidx-media3-ui", "androidx.media3", "media3-ui").versionRef("androidx-media3") + library("androidx-media3-decoder", "androidx.media3", "media3-decoder").versionRef("androidx-media3") + library("androidx-media3-common", "androidx.media3", "media3-common").versionRef("androidx-media3") library("androidx-multidex", "androidx.multidex:multidex:2.0.1") library("androidx-navigation-fragment-ktx", "androidx.navigation", "navigation-fragment-ktx").versionRef("androidx-navigation") library("androidx-navigation-ui-ktx", "androidx.navigation", "navigation-ui-ktx").versionRef("androidx-navigation") diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index f03ee07ffd..5a643a2fae 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -1025,6 +1025,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1301,76 +1309,76 @@ https://docs.gradle.org/current/userguide/dependency_verification.html - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + +