Improved checking if there already is an active call
This commit is contained in:
@@ -65,9 +65,7 @@ import androidx.core.content.ContextCompat
|
||||
import androidx.core.graphics.drawable.IconCompat
|
||||
import androidx.core.net.toUri
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.media.AudioAttributesCompat
|
||||
import androidx.media.AudioFocusRequestCompat
|
||||
import androidx.media.AudioManagerCompat
|
||||
import com.tutpro.baresip.Utils.toCircle
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -804,18 +802,14 @@ class BaresipService: Service() {
|
||||
"incoming call" -> {
|
||||
val peerUri = ev[1]
|
||||
val bevent = ev[2].toLong()
|
||||
val blockUnknown = ua.account.blockUnknown && Contact.contactName(peerUri) == peerUri
|
||||
val toastMsg = if (Call.inCall())
|
||||
val toastMsg = if (Call.isAnyCallActive(applicationContext))
|
||||
String.format(getString(R.string.call_auto_rejected),
|
||||
Utils.friendlyUri(this, peerUri, ua.account))
|
||||
else if (blockUnknown)
|
||||
else if (ua.account.blockUnknown && Contact.contactName(peerUri) == peerUri)
|
||||
String.format(getString(R.string.call_blocked),
|
||||
Utils.friendlyUri(this, peerUri, ua.account))
|
||||
else if (!Utils.checkPermissions(this, arrayOf(RECORD_AUDIO)))
|
||||
getString(R.string.no_calls)
|
||||
else if (!requestAudioFocus(applicationContext))
|
||||
// request fails if there is an active telephony call
|
||||
getString(R.string.audio_focus_denied)
|
||||
else
|
||||
""
|
||||
if (toastMsg != "") {
|
||||
@@ -823,7 +817,7 @@ class BaresipService: Service() {
|
||||
Api.sip_treply(callp, 486, "Busy Here")
|
||||
Api.bevent_stop(bevent)
|
||||
toast(toastMsg)
|
||||
if (blockUnknown) {
|
||||
if (toastMsg.contains(getString(R.string.call_blocked))) {
|
||||
if (ua.account.callHistory)
|
||||
Blocked(
|
||||
ua.account.aor,
|
||||
@@ -2110,30 +2104,5 @@ class BaresipService: Service() {
|
||||
Log.d(TAG, "Added service event ${event.event}")
|
||||
}
|
||||
}
|
||||
|
||||
fun requestAudioFocus(ctx: Context): Boolean {
|
||||
Log.d(TAG, "Requesting audio focus")
|
||||
if (audioFocusRequest != null) {
|
||||
Log.d(TAG, "Already focused")
|
||||
return true
|
||||
}
|
||||
val am = ctx.getSystemService(AUDIO_SERVICE) as AudioManager
|
||||
val attributes = AudioAttributesCompat.Builder()
|
||||
.setUsage(AudioAttributesCompat.USAGE_VOICE_COMMUNICATION)
|
||||
.setContentType(AudioAttributesCompat.CONTENT_TYPE_SPEECH)
|
||||
.build()
|
||||
audioFocusRequest = AudioFocusRequestCompat.Builder(AudioManagerCompat.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE)
|
||||
.setAudioAttributes(attributes)
|
||||
.setOnAudioFocusChangeListener { }
|
||||
.build()
|
||||
if (AudioManagerCompat.requestAudioFocus(am, audioFocusRequest!!) == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
|
||||
Log.d(TAG, "requestAudioFocus granted")
|
||||
} else {
|
||||
Log.w(TAG, "requestAudioFocus denied")
|
||||
audioFocusRequest = null
|
||||
}
|
||||
return audioFocusRequest != null
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user