diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index 064b78b1..f11b5e91 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -552,13 +552,12 @@ class MainActivity : AppCompatActivity() { "message show", "message reply" -> handleServiceEvent(resumeAction, arrayListOf(resumeUap, resumeUri)) else -> { - if (BaresipService.activities.isNotEmpty()) + val incomingCall = Call.incomingCall() + if (incomingCall != null) { + spinToAor(incomingCall.ua.account.aor) + } else { restoreActivities() - if (UserAgent.uas().size > 0) { - val incomingCall = Call.incomingCall() - if (incomingCall != null) { - spinToAor(incomingCall.ua.account.aor) - } else { + if (UserAgent.uas().size > 0) { val currentPosition = aorSpinner.selectedItemPosition if (currentPosition == -1) { if (Call.calls().size > 0) @@ -569,9 +568,10 @@ class MainActivity : AppCompatActivity() { aorSpinner.setSelection(currentPosition) } } - uaAdapter.notifyDataSetChanged() - showCall(UserAgent.uas()[aorSpinner.selectedItemPosition]) } + uaAdapter.notifyDataSetChanged() + if (UserAgent.uas().size > 0) + showCall(UserAgent.uas()[aorSpinner.selectedItemPosition]) } } resumeAction = "" @@ -669,10 +669,11 @@ class MainActivity : AppCompatActivity() { } else { Log.d("Baresip", "Reordering to front") val i = Intent(applicationContext, MainActivity::class.java) - i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) + i.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK i.putExtra("action", "call show") i.putExtra("callp", callp) startActivity(i) + } } "call established" -> { @@ -803,8 +804,7 @@ class MainActivity : AppCompatActivity() { "${getString(R.string.call_closed)}: $param", Toast.LENGTH_LONG).show() } - if (BaresipService.activities.isNotEmpty()) - restoreActivities() + restoreActivities() } "message show", "message reply" -> { val peer = params[1] @@ -861,7 +861,7 @@ class MainActivity : AppCompatActivity() { } override fun onDestroy() { - Log.d("Baresip", "Destroyed") + Log.d("Baresip", "Main onDestroy") super.onDestroy() } @@ -873,8 +873,11 @@ class MainActivity : AppCompatActivity() { } override fun onOptionsItemSelected(item: MenuItem): Boolean { + val i: Intent + when (item.itemId) { + R.id.speakerIcon -> { if (BaresipService.speakerPhone) item.setIcon(R.drawable.speaker_off) @@ -888,10 +891,12 @@ class MainActivity : AppCompatActivity() { baresipService.setAction("ToggleSpeaker") startService(baresipService) } + R.id.config -> { i = Intent(this, ConfigActivity::class.java) startActivityForResult(i, CONFIG_CODE) } + R.id.accounts -> { i = Intent(this, AccountsActivity::class.java) val b = Bundle() @@ -902,20 +907,24 @@ class MainActivity : AppCompatActivity() { i.putExtras(b) startActivityForResult(i, ACCOUNTS_CODE) } + R.id.backup -> { if (Utils.requestPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE, BACKUP_PERMISSION_REQUEST_CODE)) askPassword(getString(R.string.encrypt_password)) } + R.id.restore -> { if (Utils.requestPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE, RESTORE_PERMISSION_REQUEST_CODE)) askPassword(getString(R.string.decrypt_password)) } + R.id.about -> { i = Intent(this, AboutActivity::class.java) startActivityForResult(i, ABOUT_CODE) } + R.id.restart, R.id.quit -> { quitRestart(item.itemId == R.id.restart) } @@ -923,6 +932,71 @@ class MainActivity : AppCompatActivity() { return true } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + + Log.d("Baresip", "onActivity result $requestCode $resultCode $data") + + when (requestCode) { + + ACCOUNTS_CODE -> { + uaAdapter.notifyDataSetChanged() + val aor = data!!.getStringExtra("aor")!! + spinToAor(aor) + if (aorSpinner.selectedItemPosition != -1) + updateIcons(UserAgent.uas()[aorSpinner.selectedItemPosition].account) + if (BaresipService.isServiceRunning) { + baresipService.setAction("UpdateNotification") + startService(baresipService) + } + } + + ACCOUNT_CODE -> { + val aor = data!!.getStringExtra("aor")!! + spinToAor(aor) + val ua = Account.findUa(aor)!! + updateIcons(ua.account) + if (resultCode == Activity.RESULT_OK) + if (aorPasswords.containsKey(aor) && aorPasswords[aor] == "") + askPassword(String.format(getString(R.string.account_password), + Utils.plainAor(aor)), ua) + } + + CONTACTS_CODE -> { + callUri.setAdapter(ArrayAdapter(this, android.R.layout.select_dialog_item, + Contact.contacts().map{Contact -> Contact.name})) + } + + CONFIG_CODE -> { + if ((data != null) && data.hasExtra("restart")) { + val restartDialog = AlertDialog.Builder(this) + restartDialog.setMessage(getString(R.string.config_restart)) + restartDialog.setPositiveButton(getText(R.string.restart)) { dialog, _ -> + dialog.dismiss() + quitRestart(true) + } + restartDialog.setNegativeButton(getText(R.string.cancel)) { dialog, _ -> + dialog.dismiss() + } + restartDialog.create().show() + } + } + + CALLS_CODE -> { + spinToAor(data!!.getStringExtra("aor")!!) + callsButton.setImageResource(R.drawable.calls) + } + + CHATS_CODE, CHAT_CODE -> { + spinToAor(data!!.getStringExtra("aor")!!) + updateIcons(UserAgent.uas()[aorSpinner.selectedItemPosition].account) + } + + ABOUT_CODE -> { } + + } + } + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) @@ -1115,71 +1189,6 @@ class MainActivity : AppCompatActivity() { restartDialog.create().show() } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - - super.onActivityResult(requestCode, resultCode, data) - - when (requestCode) { - - ACCOUNTS_CODE -> { - uaAdapter.notifyDataSetChanged() - val aor = data!!.getStringExtra("aor")!! - spinToAor(aor) - if (aorSpinner.selectedItemPosition != -1) - updateIcons(UserAgent.uas()[aorSpinner.selectedItemPosition].account) - if (BaresipService.isServiceRunning) { - baresipService.setAction("UpdateNotification") - startService(baresipService) - } - } - - ACCOUNT_CODE -> { - val aor = data!!.getStringExtra("aor")!! - spinToAor(aor) - val ua = Account.findUa(aor)!! - updateIcons(ua.account) - if (resultCode == Activity.RESULT_OK) - if (aorPasswords.containsKey(aor) && aorPasswords[aor] == "") - askPassword(String.format(getString(R.string.account_password), - Utils.plainAor(aor)), ua) - } - - CONTACTS_CODE -> { - callUri.setAdapter(ArrayAdapter(this, android.R.layout.select_dialog_item, - Contact.contacts().map{Contact -> Contact.name})) - } - - CONFIG_CODE -> { - if ((data != null) && data.hasExtra("restart")) { - val restartDialog = AlertDialog.Builder(this) - restartDialog.setMessage(getString(R.string.config_restart)) - restartDialog.setPositiveButton(getText(R.string.restart)) { dialog, _ -> - dialog.dismiss() - quitRestart(true) - } - restartDialog.setNegativeButton(getText(R.string.cancel)) { dialog, _ -> - dialog.dismiss() - } - restartDialog.create().show() - } - } - - CALLS_CODE -> { - spinToAor(data!!.getStringExtra("aor")!!) - callsButton.setImageResource(R.drawable.calls) - } - - CHATS_CODE, CHAT_CODE -> { - spinToAor(data!!.getStringExtra("aor")!!) - updateIcons(UserAgent.uas()[aorSpinner.selectedItemPosition].account) - } - - ABOUT_CODE -> { - } - - } - } - private fun spinToAor(aor: String) { for (account_index in UserAgent.uas().indices) if (UserAgent.uas()[account_index].account.aor == aor) { @@ -1373,7 +1382,8 @@ class MainActivity : AppCompatActivity() { } private fun restoreActivities() { - Log.d("Baresip", "Activity stack ${BaresipService.activities.toString()}") + if (BaresipService.activities.isEmpty()) return + Log.d("Baresip", "Activity stack ${BaresipService.activities}") val activity = BaresipService.activities[0].split(",") BaresipService.activities.removeAt(0) when (activity[0]) {