Improved checking if there already is an active call
This commit is contained in:
@ -863,17 +863,15 @@ class BaresipService: Service() {
|
|||||||
"incoming call" -> {
|
"incoming call" -> {
|
||||||
val peerUri = ev[1]
|
val peerUri = ev[1]
|
||||||
val bevent = ev[2].toLong()
|
val bevent = ev[2].toLong()
|
||||||
val blockUnknown = ua.account.blockUnknown && Contact.contactName(peerUri) == peerUri
|
val toastMsg = if (Call.isAnyCallActive(applicationContext))
|
||||||
val toastMsg = if (Call.inCall())
|
|
||||||
String.format(getString(R.string.call_auto_rejected),
|
String.format(getString(R.string.call_auto_rejected),
|
||||||
Utils.friendlyUri(this, peerUri, ua.account))
|
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),
|
String.format(getString(R.string.call_blocked),
|
||||||
Utils.friendlyUri(this, peerUri, ua.account))
|
Utils.friendlyUri(this, peerUri, ua.account))
|
||||||
else if (!Utils.checkPermissions(this, arrayOf(RECORD_AUDIO)))
|
else if (!Utils.checkPermissions(this, arrayOf(RECORD_AUDIO)))
|
||||||
getString(R.string.no_calls)
|
getString(R.string.no_calls)
|
||||||
else if (!requestAudioFocus(applicationContext))
|
else if (!requestAudioFocus(applicationContext))
|
||||||
// request fails if there is an active telephony call
|
|
||||||
getString(R.string.audio_focus_denied)
|
getString(R.string.audio_focus_denied)
|
||||||
else
|
else
|
||||||
""
|
""
|
||||||
@ -882,7 +880,7 @@ class BaresipService: Service() {
|
|||||||
Api.sip_treply(callp, 486, "Busy Here")
|
Api.sip_treply(callp, 486, "Busy Here")
|
||||||
Api.bevent_stop(bevent)
|
Api.bevent_stop(bevent)
|
||||||
toast(toastMsg)
|
toast(toastMsg)
|
||||||
if (blockUnknown) {
|
if (toastMsg.contains(getString(R.string.call_blocked))) {
|
||||||
if (ua.account.callHistory)
|
if (ua.account.callHistory)
|
||||||
Blocked(
|
Blocked(
|
||||||
ua.account.aor,
|
ua.account.aor,
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
package com.tutpro.baresip
|
package com.tutpro.baresip
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.media.AudioManager
|
||||||
import androidx.compose.runtime.MutableState
|
import androidx.compose.runtime.MutableState
|
||||||
import androidx.compose.runtime.mutableIntStateOf
|
import androidx.compose.runtime.mutableIntStateOf
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
@ -143,5 +145,12 @@ class Call(val callp: Long, val ua: UserAgent, val peerUri: String, val dir: Str
|
|||||||
return BaresipService.calls.isNotEmpty()
|
return BaresipService.calls.isNotEmpty()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun isAnyCallActive(ctx: Context): Boolean {
|
||||||
|
// Check SIP calls managed by baresip
|
||||||
|
if (inCall()) return true
|
||||||
|
// MODE_IN_CALL indicates a PSTN call is active
|
||||||
|
val am = ctx.getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
||||||
|
return am.mode == AudioManager.MODE_IN_CALL
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2037,10 +2037,10 @@ private fun makeCall(ctx: Context, viewModel: ViewModel, uriText: String, confer
|
|||||||
alertMessage.value = String.format(ctx.getString(R.string.invalid_sip_or_tel_uri), uri)
|
alertMessage.value = String.format(ctx.getString(R.string.invalid_sip_or_tel_uri), uri)
|
||||||
showAlert.value = true
|
showAlert.value = true
|
||||||
}
|
}
|
||||||
|
else if (Call.isAnyCallActive(ctx))
|
||||||
|
Toast.makeText(ctx, R.string.call_already_active, Toast.LENGTH_SHORT).show()
|
||||||
else if (!BaresipService.requestAudioFocus(ctx))
|
else if (!BaresipService.requestAudioFocus(ctx))
|
||||||
Toast.makeText(ctx, R.string.audio_focus_denied, Toast.LENGTH_SHORT).show()
|
Toast.makeText(ctx, R.string.audio_focus_denied, Toast.LENGTH_SHORT).show()
|
||||||
else if (Call.calls().any { it.ua.account.aor != ua.account.aor })
|
|
||||||
Toast.makeText(ctx, R.string.call_already_active, Toast.LENGTH_SHORT).show()
|
|
||||||
else {
|
else {
|
||||||
viewModel.dialerState.callButtonsEnabled.value = false
|
viewModel.dialerState.callButtonsEnabled.value = false
|
||||||
if (Build.VERSION.SDK_INT < 31) {
|
if (Build.VERSION.SDK_INT < 31) {
|
||||||
|
|||||||
Reference in New Issue
Block a user