- Properly handle pausing/resuming from/to account, accounts, and calls

activities.
This commit is contained in:
Juha Heinanen
2020-05-03 11:06:14 +03:00
parent 8e06325785
commit 32edfacc01
4 changed files with 101 additions and 75 deletions
@@ -196,6 +196,8 @@ class AccountActivity : AppCompatActivity() {
defaultCheck = findViewById(R.id.Default) as CheckBox defaultCheck = findViewById(R.id.Default) as CheckBox
defaultCheck.isChecked = uaIndex == 0 defaultCheck.isChecked = uaIndex == 0
supportActionBar?.setDisplayHomeAsUpEnabled(true)
} }
override fun onCreateOptionsMenu(menu: Menu): Boolean { override fun onCreateOptionsMenu(menu: Menu): Boolean {
@@ -209,10 +211,8 @@ class AccountActivity : AppCompatActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (BaresipService.activities.indexOf("account,$accp") == -1) return true if (BaresipService.activities.indexOf("account,$accp") == -1)
return true
val intent = Intent()
intent.putExtra("aor", aor)
when (item.itemId) { when (item.itemId) {
@@ -458,30 +458,32 @@ class AccountActivity : AppCompatActivity() {
if (regCheck.isChecked && !((acc.authUser != "") && (acc.authPass == ""))) if (regCheck.isChecked && !((acc.authUser != "") && (acc.authPass == "")))
Api.ua_register(ua.uap) Api.ua_register(ua.uap)
setResult(Activity.RESULT_OK, intent) BaresipService.activities.remove("account,$accp")
returnResult(Activity.RESULT_OK)
return true
} }
android.R.id.home -> android.R.id.home -> {
setResult(Activity.RESULT_CANCELED, intent) onBackPressed()
return true
}
} }
BaresipService.activities.remove("account,$accp") return super.onOptionsItemSelected(item)
finish()
return true
} }
override fun onBackPressed() { override fun onBackPressed() {
BaresipService.activities.remove("account,$accp") BaresipService.activities.remove("account,$accp")
val intent = Intent() returnResult(Activity.RESULT_CANCELED)
intent.putExtra("aor", aor)
setResult(Activity.RESULT_CANCELED, intent)
finish()
super.onBackPressed() super.onBackPressed()
}
override fun onPause() {
/* Without this, data is null at MainActivity onActivityResult */
returnResult(Activity.RESULT_CANCELED)
super.onPause()
} }
fun onClick(v: View) { fun onClick(v: View) {
@@ -541,6 +543,13 @@ class AccountActivity : AppCompatActivity() {
} }
} }
private fun returnResult(code: Int) {
val i = Intent()
i.putExtra("aor", aor)
setResult(code, i)
finish()
}
private fun setAuthPass(acc: Account, ap: String) { private fun setAuthPass(acc: Account, ap: String) {
if (account_set_auth_pass(acc.accp, ap) == 0) { if (account_set_auth_pass(acc.accp, ap) == 0) {
acc.authPass = account_auth_pass(acc.accp) acc.authPass = account_auth_pass(acc.accp)
@@ -22,13 +22,15 @@ import java.util.ArrayList
class AccountsActivity : AppCompatActivity() { class AccountsActivity : AppCompatActivity() {
internal lateinit var alAdapter: AccountListAdapter internal lateinit var alAdapter: AccountListAdapter
internal lateinit var aor: String
public override fun onCreate(savedInstanceState: Bundle?) { public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_accounts) setContentView(R.layout.activity_accounts)
Utils.addActivity("accounts") aor = intent.getStringExtra("aor")!!
Utils.addActivity("accounts,$aor")
val listView = findViewById(R.id.accounts) as ListView val listView = findViewById(R.id.accounts) as ListView
generateAccounts() generateAccounts()
@@ -126,22 +128,24 @@ class AccountsActivity : AppCompatActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (BaresipService.activities.indexOf("accounts") == -1) if (BaresipService.activities.indexOf("accounts,$aor") == -1)
return true return true
when (item.itemId) { when (item.itemId) {
R.id.help -> { R.id.help -> {
Utils.alertView(this@AccountsActivity, getString(R.string.new_account), Utils.alertView(this@AccountsActivity, getString(R.string.new_account),
getString(R.string.accounts_help)) getString(R.string.accounts_help))
return true
} }
android.R.id.home -> { android.R.id.home -> {
BaresipService.activities.remove("accounts") onBackPressed()
val i = Intent() return true
setResult(RESULT_OK, i)
finish()
} }
} }
return true
return super.onOptionsItemSelected(item)
} }
@@ -151,13 +155,24 @@ class AccountsActivity : AppCompatActivity() {
} }
override fun onBackPressed() { override fun onBackPressed() {
BaresipService.activities.remove("accounts") BaresipService.activities.remove("accounts,$aor")
val i = Intent() returnResult()
setResult(Activity.RESULT_OK, i)
finish()
super.onBackPressed() super.onBackPressed()
} }
override fun onPause() {
/* Without this, data is null at MainActivity onActivityResult */
returnResult()
super.onPause()
}
private fun returnResult() {
val i = Intent()
i.putExtra("aor", aor)
setResult(Activity.RESULT_CANCELED, i)
finish()
}
companion object { companion object {
var accounts = ArrayList<AccountRow>() var accounts = ArrayList<AccountRow>()
@@ -130,16 +130,10 @@ class CallsActivity : AppCompatActivity() {
invalidateOptionsMenu() invalidateOptionsMenu()
} }
override fun onPause() {
CallHistory.save()
super.onPause()
}
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (BaresipService.activities.indexOf("calls,$aor") == -1) return true if (BaresipService.activities.indexOf("calls,$aor") == -1)
return true
when (item.itemId) { when (item.itemId) {
@@ -158,33 +152,42 @@ class CallsActivity : AppCompatActivity() {
dialog.dismiss() dialog.dismiss()
} }
deleteDialog.create().show() deleteDialog.create().show()
return true
} }
R.id.history_on_off -> { R.id.history_on_off -> {
account.callHistory = !account.callHistory account.callHistory = !account.callHistory
invalidateOptionsMenu() invalidateOptionsMenu()
AccountsActivity.saveAccounts() AccountsActivity.saveAccounts()
return true
} }
android.R.id.home -> { android.R.id.home -> {
BaresipService.activities.remove("calls,$aor") onBackPressed()
val i = Intent() return true
setResult(Activity.RESULT_CANCELED, i)
finish()
} }
} }
return true return super.onOptionsItemSelected(item)
} }
override fun onBackPressed() { override fun onBackPressed() {
BaresipService.activities.remove("calls,$aor") BaresipService.activities.remove("calls,$aor")
returnResult()
super.onBackPressed()
}
override fun onPause() {
CallHistory.save()
returnResult()
super.onPause()
}
private fun returnResult() {
val i = Intent() val i = Intent()
i.putExtra("aor", aor)
setResult(Activity.RESULT_CANCELED, i) setResult(Activity.RESULT_CANCELED, i)
finish() finish()
super.onBackPressed()
} }
override fun onPrepareOptionsMenu(menu: Menu): Boolean { override fun onPrepareOptionsMenu(menu: Menu): Boolean {
@@ -146,12 +146,15 @@ class MainActivity : AppCompatActivity() {
aorSpinner.setOnTouchListener { view, event -> aorSpinner.setOnTouchListener { view, event ->
if (event.action == MotionEvent.ACTION_DOWN) { if (event.action == MotionEvent.ACTION_DOWN) {
if (aorSpinner.selectedItemPosition == -1) { if (aorSpinner.selectedItemPosition == -1) {
val i = Intent(this, AccountsActivity::class.java) val i = Intent(this@MainActivity, AccountsActivity::class.java)
val b = Bundle()
b.putString("aor", "")
i.putExtras(b)
startActivityForResult(i, ACCOUNTS_CODE) startActivityForResult(i, ACCOUNTS_CODE)
true true
} else { } else {
if ((event.x - view.left) < 100) { if ((event.x - view.left) < 100) {
val i = Intent(this, AccountActivity::class.java) val i = Intent(this@MainActivity, AccountActivity::class.java)
val b = Bundle() val b = Bundle()
b.putString("accp", UserAgent.uas()[aorSpinner.selectedItemPosition].account.accp) b.putString("accp", UserAgent.uas()[aorSpinner.selectedItemPosition].account.accp)
i.putExtras(b) i.putExtras(b)
@@ -527,10 +530,6 @@ class MainActivity : AppCompatActivity() {
Log.d("Baresip", "Main resumed with action '$resumeAction'") Log.d("Baresip", "Main resumed with action '$resumeAction'")
visible = true visible = true
when (resumeAction) { when (resumeAction) {
"accounts" -> {
val i = Intent(this, AccountsActivity::class.java)
startActivityForResult(i, ACCOUNTS_CODE)
}
"call show" -> "call show" ->
handleServiceEvent("call incoming", handleServiceEvent("call incoming",
arrayListOf(resumeCall!!.ua.uap, resumeCall!!.callp)) arrayListOf(resumeCall!!.ua.uap, resumeCall!!.callp))
@@ -553,7 +552,8 @@ 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.isEmpty()) restoreActivities() if (BaresipService.activities.isNotEmpty())
restoreActivities()
if (UserAgent.uas().size > 0) { if (UserAgent.uas().size > 0) {
val incomingCall = Call.incomingCall() val incomingCall = Call.incomingCall()
if (incomingCall != null) { if (incomingCall != null) {
@@ -803,7 +803,8 @@ 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.isEmpty()) restoreActivities() if (BaresipService.activities.isNotEmpty())
restoreActivities()
} }
"message show", "message reply" -> { "message show", "message reply" -> {
val peer = params[1] val peer = params[1]
@@ -893,6 +894,12 @@ class MainActivity : AppCompatActivity() {
} }
R.id.accounts -> { R.id.accounts -> {
i = Intent(this, AccountsActivity::class.java) i = Intent(this, AccountsActivity::class.java)
val b = Bundle()
if (aorSpinner.selectedItemPosition != -1)
b.putString("aor", UserAgent.uas()[aorSpinner.selectedItemPosition].account.aor)
else
b.putString("aor", "")
i.putExtras(b)
startActivityForResult(i, ACCOUNTS_CODE) startActivityForResult(i, ACCOUNTS_CODE)
} }
R.id.backup -> { R.id.backup -> {
@@ -1112,19 +1119,16 @@ class MainActivity : AppCompatActivity() {
super.onActivityResult(requestCode, resultCode, data) super.onActivityResult(requestCode, resultCode, data)
Log.d("Baresip", "onActivity result $requestCode $resultCode")
if (data != null) Log.d("Baresip", "aor = ${data.getStringExtra("aor")}")
when (requestCode) { when (requestCode) {
ACCOUNTS_CODE -> { ACCOUNTS_CODE -> {
uaAdapter.notifyDataSetChanged() val aor = data!!.getStringExtra("aor")!!
if (UserAgent.uas().size > 0) { spinToAor(aor)
if ((aorSpinner.selectedItemPosition == -1) || if (aorSpinner.selectedItemPosition != -1)
(aorSpinner.selectedItemPosition >= UserAgent.uas().size)) updateIcons(UserAgent.uas()[aorSpinner.selectedItemPosition].account)
aorSpinner.setSelection(0)
else
updateIcons(UserAgent.uas()[aorSpinner.selectedItemPosition].account)
} else {
aorSpinner.setSelection(-1)
}
if (BaresipService.isServiceRunning) { if (BaresipService.isServiceRunning) {
baresipService.setAction("UpdateNotification") baresipService.setAction("UpdateNotification")
startService(baresipService) startService(baresipService)
@@ -1163,19 +1167,7 @@ class MainActivity : AppCompatActivity() {
} }
CALLS_CODE -> { CALLS_CODE -> {
val acc = UserAgent.uas()[aorSpinner.selectedItemPosition].account spinToAor(data!!.getStringExtra("aor")!!)
if (resultCode == RESULT_OK) {
if (data != null) {
val peerUri = data.getStringExtra("peer_uri")!!
callUri.setText(Utils.friendlyUri(ContactsActivity.contactName(peerUri),
Utils.aorDomain(Utils.aorDomain(acc.aor))))
}
}
if (resultCode == RESULT_CANCELED) {
if (CallHistory.aorHistorySize(acc.aor) == 0) {
holdButton.visibility = View.INVISIBLE
}
}
callsButton.setImageResource(R.drawable.calls) callsButton.setImageResource(R.drawable.calls)
} }
@@ -1192,8 +1184,12 @@ class MainActivity : AppCompatActivity() {
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) {
aorSpinner.setSelection(account_index) aorSpinner.setSelection(account_index)
break return
} }
if (UserAgent.uas().isNotEmpty())
aorSpinner.setSelection(0)
else
aorSpinner.setSelection(-1)
} }
private fun call(ua: UserAgent, uri: String, status: String): Boolean { private fun call(ua: UserAgent, uri: String, status: String): Boolean {
@@ -1391,6 +1387,9 @@ class MainActivity : AppCompatActivity() {
} }
"accounts" -> { "accounts" -> {
val i = Intent(this, AccountsActivity::class.java) val i = Intent(this, AccountsActivity::class.java)
val b = Bundle()
b.putString("aor", activity[1])
i.putExtras(b)
startActivityForResult(i, ACCOUNTS_CODE) startActivityForResult(i, ACCOUNTS_CODE)
} }
"account" -> { "account" -> {