- 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" ->
|
"message show", "message reply" ->
|
||||||
handleServiceEvent(resumeAction, arrayListOf(resumeUap, resumeUri))
|
handleServiceEvent(resumeAction, arrayListOf(resumeUap, resumeUri))
|
||||||
else -> {
|
else -> {
|
||||||
if (BaresipService.activities.isNotEmpty())
|
val incomingCall = Call.incomingCall()
|
||||||
|
if (incomingCall != null) {
|
||||||
|
spinToAor(incomingCall.ua.account.aor)
|
||||||
|
} else {
|
||||||
restoreActivities()
|
restoreActivities()
|
||||||
if (UserAgent.uas().size > 0) {
|
if (UserAgent.uas().size > 0) {
|
||||||
val incomingCall = Call.incomingCall()
|
|
||||||
if (incomingCall != null) {
|
|
||||||
spinToAor(incomingCall.ua.account.aor)
|
|
||||||
} else {
|
|
||||||
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,8 +804,7 @@ 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" -> {
|
||||||
val peer = params[1]
|
val peer = params[1]
|
||||||
@@ -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]) {
|
||||||
|
|||||||
Reference in New Issue
Block a user