From cba1caa5be7ed6082dff71bae0019b16e7049d8c Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 26 Aug 2022 11:03:34 -0300 Subject: [PATCH] Add audio focus handling to voice note playback. --- .../components/voice/VoiceNotePlaybackController.kt | 2 +- .../components/voice/VoiceNotePlaybackPreparer.java | 2 +- .../securesms/components/voice/VoiceNotePlayer.kt | 5 ++++- .../components/voice/VoiceNotePlaybackControllerTest.kt | 4 ++-- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackController.kt b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackController.kt index 5584090d7..ef4ad03ed 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackController.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackController.kt @@ -41,7 +41,7 @@ class VoiceNotePlaybackController( } player.playWhenReady = false - player.setAudioAttributes(attributes, false) + player.setAudioAttributes(attributes, true) if (newStreamType == AudioManager.STREAM_VOICE_CALL) { player.playWhenReady = true diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackPreparer.java b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackPreparer.java index b292b4b07..cf06d7fcd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackPreparer.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackPreparer.java @@ -39,7 +39,7 @@ import java.util.stream.Collectors; /** * ExoPlayer Preparer for Voice Notes. This only supports ACTION_PLAY_FROM_URI */ -final class VoiceNotePlaybackPreparer implements MediaSessionConnector.PlaybackPreparer { +final class VoiceNotePlaybackPreparer implements MediaSessionConnector.PlaybackPreparer { private static final String TAG = Log.tag(VoiceNotePlaybackPreparer.class); private static final Executor EXECUTOR = Executors.newSingleThreadExecutor(); 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 e20a83cf3..52796c9b7 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 @@ -5,6 +5,7 @@ import com.google.android.exoplayer2.C import com.google.android.exoplayer2.DefaultLoadControl import com.google.android.exoplayer2.ForwardingPlayer import com.google.android.exoplayer2.SimpleExoPlayer +import com.google.android.exoplayer2.audio.AudioAttributes import org.thoughtcrime.securesms.video.exo.SignalMediaSourceFactory class VoiceNotePlayer @JvmOverloads constructor( @@ -15,7 +16,9 @@ class VoiceNotePlayer @JvmOverloads constructor( DefaultLoadControl.Builder() .setBufferDurationsMs(Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE) .build() - ).build() + ).build().apply { + setAudioAttributes(AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MUSIC).setUsage(C.USAGE_MEDIA).build(), true) + } ) : ForwardingPlayer(internalPlayer) { override fun seekTo(windowIndex: Int, positionMs: Long) { diff --git a/app/src/test/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackControllerTest.kt b/app/src/test/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackControllerTest.kt index df02f3401..c076f0f3f 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackControllerTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackControllerTest.kt @@ -43,7 +43,7 @@ class VoiceNotePlaybackControllerTest { // THEN verify(player).playWhenReady = false - verify(player).setAudioAttributes(expected, false) + verify(player).setAudioAttributes(expected, true) verify(player).playWhenReady = true } @@ -61,7 +61,7 @@ class VoiceNotePlaybackControllerTest { // THEN verify(player).playWhenReady = false - verify(player).setAudioAttributes(expected, false) + verify(player).setAudioAttributes(expected, true) verify(player, Mockito.never()).playWhenReady = true }