From a456db9fc34c1900a863ffceb0d60464cef92966 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Sun, 8 May 2022 21:07:25 +0300 Subject: [PATCH] Fixed playing of ringtone in some devices/Android versions --- .../com/tutpro/baresip/BaresipService.kt | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt index f13da57f..ec6ef224 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt @@ -49,7 +49,6 @@ class BaresipService: Service() { internal lateinit var intent: Intent internal lateinit var am: AudioManager - internal lateinit var rt: Ringtone private lateinit var nt: Ringtone private lateinit var nm: NotificationManager private lateinit var snb: NotificationCompat.Builder @@ -65,6 +64,7 @@ class BaresipService: Service() { private lateinit var hotSpotReceiver: BroadcastReceiver private lateinit var contentObserver: ContentObserver + private var rt: Ringtone? = null private var rtTimer: Timer? = null private var audioFocusRequest: AudioFocusRequestCompat? = null private var origVolume = mutableMapOf() @@ -89,9 +89,6 @@ class BaresipService: Service() { filesPath = filesDir.absolutePath am = getSystemService(Context.AUDIO_SERVICE) as AudioManager - val rtUri = RingtoneManager.getActualDefaultRingtoneUri(applicationContext, - RingtoneManager.TYPE_RINGTONE) - rt = RingtoneManager.getRingtone(applicationContext, rtUri) val ntUri = RingtoneManager.getActualDefaultRingtoneUri(applicationContext, RingtoneManager.TYPE_NOTIFICATION) @@ -1195,16 +1192,22 @@ class BaresipService: Service() { private fun startRinging() { requestAudioFocus(AudioAttributes.CONTENT_TYPE_MUSIC) am.mode = AudioManager.MODE_RINGTONE + + if (rt == null) { + val rtUri = RingtoneManager.getActualDefaultRingtoneUri(applicationContext, + RingtoneManager.TYPE_RINGTONE) + rt = RingtoneManager.getRingtone(applicationContext, rtUri) + } if (VERSION.SDK_INT >= 28) { - rt.isLooping = true - rt.play() + rt!!.isLooping = true + rt!!.play() } else { - rt.play() + rt!!.play() rtTimer = Timer() rtTimer!!.scheduleAtFixedRate(object : TimerTask() { override fun run() { - if (!rt.isPlaying) { - rt.play() + if (rt != null && !rt!!.isPlaying) { + rt!!.play() } } }, 1000, 1000) @@ -1214,11 +1217,14 @@ class BaresipService: Service() { private fun stopRinging() { if (am.mode == AudioManager.MODE_RINGTONE) abandonAudioFocus() - if ((VERSION.SDK_INT < 28) && (rtTimer != null)) { + if (VERSION.SDK_INT < 28 && rtTimer != null) { rtTimer!!.cancel() rtTimer = null } - rt.stop() + if (rt != null) { + rt!!.stop() + rt = null + } } private fun playRingBack() {