diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index 4a82cc3b..b16c9cc9 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -76,7 +76,6 @@ class MainActivity : AppCompatActivity() { private var speakerIcon: MenuItem? = null private lateinit var swipeRefresh: SwipeRefreshLayout private lateinit var requestPermissionLauncher: ActivityResultLauncher - private lateinit var accountsRequest: ActivityResultLauncher private lateinit var chatRequests: ActivityResultLauncher private lateinit var configRequest: ActivityResultLauncher @@ -85,6 +84,8 @@ class MainActivity : AppCompatActivity() { private lateinit var contactsRequest: ActivityResultLauncher private lateinit var callsRequest: ActivityResultLauncher + private var callHandler: Handler = Handler(Looper.getMainLooper()) + private var callRunnable: Runnable? = null private var downloadsInputUri: Uri? = null private var downloadsOutputUri: Uri? = null @@ -328,6 +329,13 @@ class MainActivity : AppCompatActivity() { hangupButton.setOnClickListener { val ua = BaresipService.uas[aorSpinner.selectedItemPosition] + if (callRunnable != null && callHandler.hasCallbacks(callRunnable!!)) { + callHandler.removeCallbacks(callRunnable!!) + callRunnable = null + am.mode = AudioManager.MODE_NORMAL + showCall(ua) + return@setOnClickListener + } val aor = ua.account.aor val uaCalls = ua.calls() if (uaCalls.size > 0) { @@ -1758,18 +1766,21 @@ class MainActivity : AppCompatActivity() { ) } else { callUri.isFocusable = false - if (!call(ua, uri)) { - callButton.visibility = View.VISIBLE - callButton.isEnabled = true - hangupButton.visibility = View.INVISIBLE - hangupButton.isEnabled = false - } else { - uaAdapter.notifyDataSetChanged() - callButton.visibility = View.INVISIBLE - callButton.isEnabled = false - hangupButton.visibility = View.VISIBLE - hangupButton.isEnabled = true + am.mode = AudioManager.MODE_IN_COMMUNICATION + uaAdapter.notifyDataSetChanged() + callButton.visibility = View.INVISIBLE + callButton.isEnabled = false + hangupButton.visibility = View.VISIBLE + hangupButton.isEnabled = true + callRunnable = Runnable { + if (!call(ua, uri)) { + callButton.visibility = View.VISIBLE + callButton.isEnabled = true + hangupButton.visibility = View.INVISIBLE + hangupButton.isEnabled = false + } } + callHandler.postDelayed(callRunnable!!, 1000) } } else { val latest = NewCallHistory.aorLatestHistory(aor)