- Improved handling of incoming call when app or main activity is not visible.

This commit is contained in:
Juha Heinanen
2020-05-03 15:58:49 +03:00
parent a27c7d67ee
commit 2e114cf15d

View File

@ -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<out String>,
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]) {