Call transfer improvements
This commit is contained in:
@@ -551,6 +551,9 @@ class BaresipService: Service() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
"call outgoing" -> {
|
"call outgoing" -> {
|
||||||
|
val call = Call.ofCallp(callp) ?: return
|
||||||
|
if (call.status == "transferring")
|
||||||
|
break
|
||||||
stopMediaPlayer()
|
stopMediaPlayer()
|
||||||
if (am.mode != AudioManager.MODE_IN_COMMUNICATION)
|
if (am.mode != AudioManager.MODE_IN_COMMUNICATION)
|
||||||
am.mode = AudioManager.MODE_IN_COMMUNICATION
|
am.mode = AudioManager.MODE_IN_COMMUNICATION
|
||||||
@@ -761,6 +764,7 @@ class BaresipService: Service() {
|
|||||||
}
|
}
|
||||||
"transfer failed" -> {
|
"transfer failed" -> {
|
||||||
Log.d(TAG, "AoR $aor call $callp transfer failed: ${ev[1]}")
|
Log.d(TAG, "AoR $aor call $callp transfer failed: ${ev[1]}")
|
||||||
|
stopMediaPlayer()
|
||||||
val call = Call.ofCallp(callp)
|
val call = Call.ofCallp(callp)
|
||||||
if (call == null)
|
if (call == null)
|
||||||
Log.w(TAG, "Call $callp with failed transfer is not found")
|
Log.w(TAG, "Call $callp with failed transfer is not found")
|
||||||
|
|||||||
@@ -921,12 +921,12 @@ class MainActivity : AppCompatActivity() {
|
|||||||
callsButton.setImageResource(R.drawable.calls_missed)
|
callsButton.setImageResource(R.drawable.calls_missed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"call incoming" -> {
|
"call incoming", "call outgoing" -> {
|
||||||
val callp = params[1]
|
val callp = params[1]
|
||||||
if (BaresipService.isMainVisible) {
|
if (BaresipService.isMainVisible) {
|
||||||
if (aor != aorSpinner.tag)
|
if (aor != aorSpinner.tag)
|
||||||
spinToAor(aor)
|
spinToAor(aor)
|
||||||
showCall(ua)
|
showCall(ua, Call.ofCallp(callp))
|
||||||
} else {
|
} else {
|
||||||
Log.d(TAG, "Reordering to front")
|
Log.d(TAG, "Reordering to front")
|
||||||
val i = Intent(applicationContext, MainActivity::class.java)
|
val i = Intent(applicationContext, MainActivity::class.java)
|
||||||
@@ -1018,9 +1018,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
target))
|
target))
|
||||||
setPositiveButton(getString(R.string.yes)) { dialog, _ ->
|
setPositiveButton(getString(R.string.yes)) { dialog, _ ->
|
||||||
if (call in Call.calls())
|
if (call in Call.calls())
|
||||||
Api.ua_hangup(uap, callp, 0, "")
|
acceptTransfer(ua, call, ev[1])
|
||||||
call(ua, ev[1])
|
|
||||||
showCall(ua)
|
|
||||||
dialog.dismiss()
|
dialog.dismiss()
|
||||||
}
|
}
|
||||||
setNegativeButton(getString(R.string.no)) { dialog, _ ->
|
setNegativeButton(getString(R.string.no)) { dialog, _ ->
|
||||||
@@ -1570,25 +1568,19 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Currently transfer is implemented by first closing existing call and the making the new one
|
private fun acceptTransfer(ua: UserAgent, call: Call, uri: String) {
|
||||||
@Suppress("UNUSED")
|
|
||||||
private fun transfer(ua: UserAgent, call: Call, uri: String) {
|
|
||||||
val newCallp = Api.ua_call_alloc(ua.uap, call.callp, Api.VIDMODE_OFF)
|
val newCallp = Api.ua_call_alloc(ua.uap, call.callp, Api.VIDMODE_OFF)
|
||||||
if (newCallp != "") {
|
if (newCallp != "") {
|
||||||
Log.d(TAG, "Adding outgoing call ${ua.uap}/$newCallp/$uri")
|
Log.d(TAG, "Adding outgoing call ${ua.uap}/$newCallp/$uri")
|
||||||
val newCall = Call(newCallp, ua, uri, "out", "transferring",
|
val newCall = Call(newCallp, ua, uri, "out", "transferring",
|
||||||
Utils.dtmfWatcher(newCallp))
|
Utils.dtmfWatcher(newCallp))
|
||||||
newCall.add()
|
newCall.add()
|
||||||
Api.ua_hangup(ua.uap, call.callp, 0, "")
|
|
||||||
// Api.call_stop_audio(call.callp)
|
|
||||||
val err = newCall.connect(uri)
|
val err = newCall.connect(uri)
|
||||||
if (err == 0) {
|
if (err == 0) {
|
||||||
newCall.startAudio()
|
|
||||||
if (ua.account.aor != aorSpinner.tag)
|
if (ua.account.aor != aorSpinner.tag)
|
||||||
spinToAor(ua.account.aor)
|
spinToAor(ua.account.aor)
|
||||||
showCall(ua)
|
showCall(ua)
|
||||||
} else {
|
} else {
|
||||||
call.startAudio()
|
|
||||||
Log.w(TAG, "call_connect $newCallp failed with error $err")
|
Log.w(TAG, "call_connect $newCallp failed with error $err")
|
||||||
call.notifySipfrag(500, "Call Error")
|
call.notifySipfrag(500, "Call Error")
|
||||||
}
|
}
|
||||||
@@ -1656,7 +1648,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showCall(ua: UserAgent) {
|
private fun showCall(ua: UserAgent, showCall: Call? = null) {
|
||||||
if (Call.uaCalls(ua, "").size == 0) {
|
if (Call.uaCalls(ua, "").size == 0) {
|
||||||
swipeRefresh.isEnabled = true
|
swipeRefresh.isEnabled = true
|
||||||
callTitle.text = getString(R.string.outgoing_call_to_dots)
|
callTitle.text = getString(R.string.outgoing_call_to_dots)
|
||||||
@@ -1684,11 +1676,11 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
swipeRefresh.isEnabled = false
|
swipeRefresh.isEnabled = false
|
||||||
val call = Call.uaCalls(ua, "")[0]
|
val call = showCall ?: Call.uaCalls(ua, "")[0]
|
||||||
callUri.isFocusable = false
|
callUri.isFocusable = false
|
||||||
imm.hideSoftInputFromWindow(callUri.windowToken, 0)
|
imm.hideSoftInputFromWindow(callUri.windowToken, 0)
|
||||||
when (call.status) {
|
when (call.status) {
|
||||||
"outgoing" -> {
|
"outgoing", "transferring" -> {
|
||||||
callTitle.text = getString(R.string.outgoing_call_to_dots)
|
callTitle.text = getString(R.string.outgoing_call_to_dots)
|
||||||
callUri.setText(Utils.friendlyUri(ContactsActivity.contactName(call.peerUri),
|
callUri.setText(Utils.friendlyUri(ContactsActivity.contactName(call.peerUri),
|
||||||
Utils.aorDomain(ua.account.aor)))
|
Utils.aorDomain(ua.account.aor)))
|
||||||
|
|||||||
Reference in New Issue
Block a user