- Improved handling of incoming call when app or main activity is not visible.
This commit is contained in:
@ -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]) {
|
||||
|
||||
Reference in New Issue
Block a user