- 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
@@ -552,13 +552,12 @@ class MainActivity : AppCompatActivity() {
"message show", "message reply" -> "message show", "message reply" ->
handleServiceEvent(resumeAction, arrayListOf(resumeUap, resumeUri)) handleServiceEvent(resumeAction, arrayListOf(resumeUap, resumeUri))
else -> { else -> {
if (BaresipService.activities.isNotEmpty())
restoreActivities()
if (UserAgent.uas().size > 0) {
val incomingCall = Call.incomingCall() val incomingCall = Call.incomingCall()
if (incomingCall != null) { if (incomingCall != null) {
spinToAor(incomingCall.ua.account.aor) spinToAor(incomingCall.ua.account.aor)
} else { } else {
restoreActivities()
if (UserAgent.uas().size > 0) {
val currentPosition = aorSpinner.selectedItemPosition val currentPosition = aorSpinner.selectedItemPosition
if (currentPosition == -1) { if (currentPosition == -1) {
if (Call.calls().size > 0) if (Call.calls().size > 0)
@@ -569,9 +568,10 @@ class MainActivity : AppCompatActivity() {
aorSpinner.setSelection(currentPosition) aorSpinner.setSelection(currentPosition)
} }
} }
uaAdapter.notifyDataSetChanged()
showCall(UserAgent.uas()[aorSpinner.selectedItemPosition])
} }
uaAdapter.notifyDataSetChanged()
if (UserAgent.uas().size > 0)
showCall(UserAgent.uas()[aorSpinner.selectedItemPosition])
} }
} }
resumeAction = "" resumeAction = ""
@@ -669,10 +669,11 @@ class MainActivity : AppCompatActivity() {
} else { } else {
Log.d("Baresip", "Reordering to front") Log.d("Baresip", "Reordering to front")
val i = Intent(applicationContext, MainActivity::class.java) 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("action", "call show")
i.putExtra("callp", callp) i.putExtra("callp", callp)
startActivity(i) startActivity(i)
} }
} }
"call established" -> { "call established" -> {
@@ -803,7 +804,6 @@ class MainActivity : AppCompatActivity() {
"${getString(R.string.call_closed)}: $param", "${getString(R.string.call_closed)}: $param",
Toast.LENGTH_LONG).show() Toast.LENGTH_LONG).show()
} }
if (BaresipService.activities.isNotEmpty())
restoreActivities() restoreActivities()
} }
"message show", "message reply" -> { "message show", "message reply" -> {
@@ -861,7 +861,7 @@ class MainActivity : AppCompatActivity() {
} }
override fun onDestroy() { override fun onDestroy() {
Log.d("Baresip", "Destroyed") Log.d("Baresip", "Main onDestroy")
super.onDestroy() super.onDestroy()
} }
@@ -873,8 +873,11 @@ class MainActivity : AppCompatActivity() {
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
val i: Intent val i: Intent
when (item.itemId) { when (item.itemId) {
R.id.speakerIcon -> { R.id.speakerIcon -> {
if (BaresipService.speakerPhone) if (BaresipService.speakerPhone)
item.setIcon(R.drawable.speaker_off) item.setIcon(R.drawable.speaker_off)
@@ -888,10 +891,12 @@ class MainActivity : AppCompatActivity() {
baresipService.setAction("ToggleSpeaker") baresipService.setAction("ToggleSpeaker")
startService(baresipService) startService(baresipService)
} }
R.id.config -> { R.id.config -> {
i = Intent(this, ConfigActivity::class.java) i = Intent(this, ConfigActivity::class.java)
startActivityForResult(i, CONFIG_CODE) startActivityForResult(i, CONFIG_CODE)
} }
R.id.accounts -> { R.id.accounts -> {
i = Intent(this, AccountsActivity::class.java) i = Intent(this, AccountsActivity::class.java)
val b = Bundle() val b = Bundle()
@@ -902,20 +907,24 @@ class MainActivity : AppCompatActivity() {
i.putExtras(b) i.putExtras(b)
startActivityForResult(i, ACCOUNTS_CODE) startActivityForResult(i, ACCOUNTS_CODE)
} }
R.id.backup -> { R.id.backup -> {
if (Utils.requestPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE, if (Utils.requestPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE,
BACKUP_PERMISSION_REQUEST_CODE)) BACKUP_PERMISSION_REQUEST_CODE))
askPassword(getString(R.string.encrypt_password)) askPassword(getString(R.string.encrypt_password))
} }
R.id.restore -> { R.id.restore -> {
if (Utils.requestPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE, if (Utils.requestPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE,
RESTORE_PERMISSION_REQUEST_CODE)) RESTORE_PERMISSION_REQUEST_CODE))
askPassword(getString(R.string.decrypt_password)) askPassword(getString(R.string.decrypt_password))
} }
R.id.about -> { R.id.about -> {
i = Intent(this, AboutActivity::class.java) i = Intent(this, AboutActivity::class.java)
startActivityForResult(i, ABOUT_CODE) startActivityForResult(i, ABOUT_CODE)
} }
R.id.restart, R.id.quit -> { R.id.restart, R.id.quit -> {
quitRestart(item.itemId == R.id.restart) quitRestart(item.itemId == R.id.restart)
} }
@@ -923,6 +932,71 @@ class MainActivity : AppCompatActivity() {
return true 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>, override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>,
grantResults: IntArray) { grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults) super.onRequestPermissionsResult(requestCode, permissions, grantResults)
@@ -1115,71 +1189,6 @@ class MainActivity : AppCompatActivity() {
restartDialog.create().show() 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) { private fun spinToAor(aor: String) {
for (account_index in UserAgent.uas().indices) for (account_index in UserAgent.uas().indices)
if (UserAgent.uas()[account_index].account.aor == aor) { if (UserAgent.uas()[account_index].account.aor == aor) {
@@ -1373,7 +1382,8 @@ class MainActivity : AppCompatActivity() {
} }
private fun restoreActivities() { 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(",") val activity = BaresipService.activities[0].split(",")
BaresipService.activities.removeAt(0) BaresipService.activities.removeAt(0)
when (activity[0]) { when (activity[0]) {