Ensure that ringback and busy tone are played in communication mode

This commit is contained in:
Juha Heinanen
2026-04-19 16:21:49 +03:00
parent 2d9b1b13bf
commit 17b353fa40
@@ -1818,14 +1818,22 @@ class BaresipService: Service() {
private fun playRingBack() { private fun playRingBack() {
if (mediaPlayer == null) { if (mediaPlayer == null) {
val name = "ringback_$toneCountry" val name = "ringback_$toneCountry"
val resourceId = resources.getIdentifier( val resourceId = resources.getIdentifier(name, "raw", packageName)
name,
"raw",
packageName)
if (resourceId != 0) { if (resourceId != 0) {
mediaPlayer = MediaPlayer.create(this, resourceId) val audioAttributes = AudioAttributes.Builder()
mediaPlayer?.isLooping = true .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
mediaPlayer?.start() .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build()
mediaPlayer = MediaPlayer().apply {
setAudioAttributes(audioAttributes)
val afd = resources.openRawResourceFd(resourceId)
setDataSource(afd.fileDescriptor, afd.startOffset, afd.length)
afd.close()
isLooping = true
prepare()
start()
}
} else { } else {
Log.e(TAG, "Ringback tone $name.wav not found") Log.e(TAG, "Ringback tone $name.wav not found")
} }
@@ -1836,17 +1844,25 @@ class BaresipService: Service() {
private fun playBusy() { private fun playBusy() {
if (mediaPlayer == null) { if (mediaPlayer == null) {
val name = "busy_$toneCountry" val name = "busy_$toneCountry"
val resourceId = resources.getIdentifier( val resourceId = resources.getIdentifier(name, "raw", packageName)
name,
"raw",
packageName)
if (resourceId != 0) { if (resourceId != 0) {
mediaPlayer = MediaPlayer.create(this, resourceId) val audioAttributes = AudioAttributes.Builder()
mediaPlayer?.setOnCompletionListener { .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build()
mediaPlayer = MediaPlayer().apply {
setAudioAttributes(audioAttributes)
val afd = resources.openRawResourceFd(resourceId)
setDataSource(afd.fileDescriptor, afd.startOffset, afd.length)
afd.close()
setOnCompletionListener {
stopMediaPlayer() stopMediaPlayer()
ensureCommunicationMode() ensureCommunicationMode()
} }
mediaPlayer?.start() prepare()
start()
}
} else { } else {
Log.e(TAG, "Busy tone $name.wav not found") Log.e(TAG, "Busy tone $name.wav not found")
} }