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
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+