Separate CALL and DIAL actions

Do not decode CALL or DIAL URI (decode raplaces + with space)
This commit is contained in:
Juha Heinanen
2023-05-07 17:23:47 +03:00
parent bf2ba08b37
commit a7ebbb30b2

View File

@ -658,11 +658,9 @@ class MainActivity : AppCompatActivity() {
when (intent?.action) { when (intent?.action) {
ACTION_DIAL, ACTION_CALL, ACTION_VIEW -> ACTION_DIAL, ACTION_CALL, ACTION_VIEW ->
if (BaresipService.isServiceRunning) if (BaresipService.isServiceRunning)
callAction(intent) callAction(intent, if (intent?.action == ACTION_CALL) "call" else "dial")
else else
BaresipService.callActionUri = URLDecoder.decode(intent.data.toString(), "UTF-8") BaresipService.callActionUri = URLDecoder.decode(intent.data.toString(), "UTF-8")
else ->
Log.d(TAG, "Unknown startup action ${intent?.action}")
} }
permissions = if (Build.VERSION.SDK_INT >= 33) permissions = if (Build.VERSION.SDK_INT >= 33)
@ -761,6 +759,9 @@ class MainActivity : AppCompatActivity() {
callUri.setText(BaresipService.uas[aorSpinner.selectedItemPosition].account.resumeUri) callUri.setText(BaresipService.uas[aorSpinner.selectedItemPosition].account.resumeUri)
callButton.performClick() callButton.performClick()
} }
"dial" -> {
callUri.setText(BaresipService.uas[aorSpinner.selectedItemPosition].account.resumeUri)
}
"call transfer", "transfer show", "transfer accept" -> "call transfer", "transfer show", "transfer accept" ->
handleServiceEvent("$resumeAction,$resumeUri", handleServiceEvent("$resumeAction,$resumeUri",
arrayListOf(resumeCall!!.ua.uap, resumeCall!!.callp)) arrayListOf(resumeCall!!.ua.uap, resumeCall!!.callp))
@ -833,7 +834,7 @@ class MainActivity : AppCompatActivity() {
when (intent.action) { when (intent.action) {
ACTION_DIAL, ACTION_CALL, ACTION_VIEW -> { ACTION_DIAL, ACTION_CALL, ACTION_VIEW -> {
callAction(intent) callAction(intent, if (intent.action == ACTION_CALL) "call" else "dial")
} }
else -> { else -> {
val action = intent.getStringExtra("action") val action = intent.getStringExtra("action")
@ -845,15 +846,15 @@ class MainActivity : AppCompatActivity() {
} }
} }
private fun callAction(intent: Intent) { private fun callAction(intent: Intent, action: String) {
if (Call.inCall() || BaresipService.uas.size == 0) if (Call.inCall() || BaresipService.uas.size == 0)
return return
val uri: Uri? = intent.data val uri: Uri? = intent.data
Log.d(TAG, "callAction to $uri") Log.d(TAG, "Action $action to $uri")
if (uri != null) { if (uri != null) {
when (uri.scheme) { when (uri.scheme) {
"sip" -> { "sip" -> {
val uriStr = URLDecoder.decode(uri.toString(), "UTF-8") val uriStr = uri.toString()
var ua = UserAgent.ofDomain(Utils.uriHostPart(uriStr)) var ua = UserAgent.ofDomain(Utils.uriHostPart(uriStr))
if (ua == null && BaresipService.uas.size > 0) if (ua == null && BaresipService.uas.size > 0)
ua = BaresipService.uas[0] ua = BaresipService.uas[0]
@ -862,12 +863,11 @@ class MainActivity : AppCompatActivity() {
return return
} }
spinToAor(ua.account.aor) spinToAor(ua.account.aor)
resumeAction = "call" resumeAction = action
ua.account.resumeUri = uriStr ua.account.resumeUri = uriStr
} }
"tel" -> { "tel" -> {
val uriStr = URLDecoder.decode(uri.toString(), "UTF-8") val uriStr = uri.toString().filterNot{setOf('-', ' ', '(', ')').contains(it)}
.filterNot{setOf('-', ' ', '(', ')').contains(it)}
var account: Account? = null var account: Account? = null
for (a in Account.accounts()) for (a in Account.accounts())
if (a.telProvider != "") { if (a.telProvider != "") {
@ -879,7 +879,7 @@ class MainActivity : AppCompatActivity() {
return return
} }
spinToAor(account.aor) spinToAor(account.aor)
resumeAction = "call" resumeAction = action
account.resumeUri = uriStr account.resumeUri = uriStr
} }
else -> { else -> {
@ -902,7 +902,7 @@ class MainActivity : AppCompatActivity() {
getString(R.string.no_network)) getString(R.string.no_network))
return return
} }
"call" -> { "call", "dial" -> {
if (Call.inCall()) { if (Call.inCall()) {
Toast.makeText(applicationContext, getString(R.string.call_already_active), Toast.makeText(applicationContext, getString(R.string.call_already_active),
Toast.LENGTH_SHORT).show() Toast.LENGTH_SHORT).show()