From 32edfacc011c5767a928222921bfc8796ac3d3b0 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Sun, 3 May 2020 11:06:14 +0300 Subject: [PATCH] - Properly handle pausing/resuming from/to account, accounts, and calls activities. --- .../com/tutpro/baresip/AccountActivity.kt | 41 +++++++----- .../com/tutpro/baresip/AccountsActivity.kt | 37 +++++++---- .../com/tutpro/baresip/CallsActivity.kt | 35 ++++++----- .../kotlin/com/tutpro/baresip/MainActivity.kt | 63 +++++++++---------- 4 files changed, 101 insertions(+), 75 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt index 1fb7b318..b29e367c 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt @@ -196,6 +196,8 @@ class AccountActivity : AppCompatActivity() { defaultCheck = findViewById(R.id.Default) as CheckBox defaultCheck.isChecked = uaIndex == 0 + supportActionBar?.setDisplayHomeAsUpEnabled(true) + } override fun onCreateOptionsMenu(menu: Menu): Boolean { @@ -209,10 +211,8 @@ class AccountActivity : AppCompatActivity() { override fun onOptionsItemSelected(item: MenuItem): Boolean { - if (BaresipService.activities.indexOf("account,$accp") == -1) return true - - val intent = Intent() - intent.putExtra("aor", aor) + if (BaresipService.activities.indexOf("account,$accp") == -1) + return true when (item.itemId) { @@ -458,30 +458,32 @@ class AccountActivity : AppCompatActivity() { if (regCheck.isChecked && !((acc.authUser != "") && (acc.authPass == ""))) 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 -> - setResult(Activity.RESULT_CANCELED, intent) + android.R.id.home -> { + onBackPressed() + return true + } } - BaresipService.activities.remove("account,$accp") - finish() - - return true + return super.onOptionsItemSelected(item) } override fun onBackPressed() { - BaresipService.activities.remove("account,$accp") - val intent = Intent() - intent.putExtra("aor", aor) - setResult(Activity.RESULT_CANCELED, intent) - finish() + returnResult(Activity.RESULT_CANCELED) super.onBackPressed() + } + override fun onPause() { + /* Without this, data is null at MainActivity onActivityResult */ + returnResult(Activity.RESULT_CANCELED) + super.onPause() } 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) { if (account_set_auth_pass(acc.accp, ap) == 0) { acc.authPass = account_auth_pass(acc.accp) diff --git a/app/src/main/kotlin/com/tutpro/baresip/AccountsActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/AccountsActivity.kt index 98dfe1c6..3f06859b 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/AccountsActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/AccountsActivity.kt @@ -22,13 +22,15 @@ import java.util.ArrayList class AccountsActivity : AppCompatActivity() { internal lateinit var alAdapter: AccountListAdapter + internal lateinit var aor: String public override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_accounts) - Utils.addActivity("accounts") + aor = intent.getStringExtra("aor")!! + Utils.addActivity("accounts,$aor") val listView = findViewById(R.id.accounts) as ListView generateAccounts() @@ -126,22 +128,24 @@ class AccountsActivity : AppCompatActivity() { override fun onOptionsItemSelected(item: MenuItem): Boolean { - if (BaresipService.activities.indexOf("accounts") == -1) + if (BaresipService.activities.indexOf("accounts,$aor") == -1) return true when (item.itemId) { + R.id.help -> { Utils.alertView(this@AccountsActivity, getString(R.string.new_account), getString(R.string.accounts_help)) + return true } + android.R.id.home -> { - BaresipService.activities.remove("accounts") - val i = Intent() - setResult(RESULT_OK, i) - finish() + onBackPressed() + return true } } - return true + + return super.onOptionsItemSelected(item) } @@ -151,13 +155,24 @@ class AccountsActivity : AppCompatActivity() { } override fun onBackPressed() { - BaresipService.activities.remove("accounts") - val i = Intent() - setResult(Activity.RESULT_OK, i) - finish() + BaresipService.activities.remove("accounts,$aor") + returnResult() 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 { var accounts = ArrayList() diff --git a/app/src/main/kotlin/com/tutpro/baresip/CallsActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/CallsActivity.kt index 38116d82..d8f2d243 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/CallsActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/CallsActivity.kt @@ -130,16 +130,10 @@ class CallsActivity : AppCompatActivity() { invalidateOptionsMenu() } - override fun onPause() { - - CallHistory.save() - super.onPause() - - } - 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) { @@ -158,33 +152,42 @@ class CallsActivity : AppCompatActivity() { dialog.dismiss() } deleteDialog.create().show() + return true } R.id.history_on_off -> { account.callHistory = !account.callHistory invalidateOptionsMenu() AccountsActivity.saveAccounts() + return true } android.R.id.home -> { - BaresipService.activities.remove("calls,$aor") - val i = Intent() - setResult(Activity.RESULT_CANCELED, i) - finish() + onBackPressed() + return true } } - return true + return super.onOptionsItemSelected(item) } override fun onBackPressed() { - BaresipService.activities.remove("calls,$aor") + returnResult() + super.onBackPressed() + } + + override fun onPause() { + CallHistory.save() + returnResult() + super.onPause() + } + + private fun returnResult() { val i = Intent() + i.putExtra("aor", aor) setResult(Activity.RESULT_CANCELED, i) finish() - super.onBackPressed() - } override fun onPrepareOptionsMenu(menu: Menu): Boolean { diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index ea891197..dea369e2 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -146,12 +146,15 @@ class MainActivity : AppCompatActivity() { aorSpinner.setOnTouchListener { view, event -> if (event.action == MotionEvent.ACTION_DOWN) { 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) true } else { if ((event.x - view.left) < 100) { - val i = Intent(this, AccountActivity::class.java) + val i = Intent(this@MainActivity, AccountActivity::class.java) val b = Bundle() b.putString("accp", UserAgent.uas()[aorSpinner.selectedItemPosition].account.accp) i.putExtras(b) @@ -527,10 +530,6 @@ class MainActivity : AppCompatActivity() { Log.d("Baresip", "Main resumed with action '$resumeAction'") visible = true when (resumeAction) { - "accounts" -> { - val i = Intent(this, AccountsActivity::class.java) - startActivityForResult(i, ACCOUNTS_CODE) - } "call show" -> handleServiceEvent("call incoming", arrayListOf(resumeCall!!.ua.uap, resumeCall!!.callp)) @@ -553,7 +552,8 @@ class MainActivity : AppCompatActivity() { "message show", "message reply" -> handleServiceEvent(resumeAction, arrayListOf(resumeUap, resumeUri)) else -> { - if (!BaresipService.activities.isEmpty()) restoreActivities() + if (BaresipService.activities.isNotEmpty()) + restoreActivities() if (UserAgent.uas().size > 0) { val incomingCall = Call.incomingCall() if (incomingCall != null) { @@ -803,7 +803,8 @@ class MainActivity : AppCompatActivity() { "${getString(R.string.call_closed)}: $param", Toast.LENGTH_LONG).show() } - if (!BaresipService.activities.isEmpty()) restoreActivities() + if (BaresipService.activities.isNotEmpty()) + restoreActivities() } "message show", "message reply" -> { val peer = params[1] @@ -893,6 +894,12 @@ class MainActivity : AppCompatActivity() { } R.id.accounts -> { 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) } R.id.backup -> { @@ -1112,19 +1119,16 @@ class MainActivity : AppCompatActivity() { super.onActivityResult(requestCode, resultCode, data) + Log.d("Baresip", "onActivity result $requestCode $resultCode") + if (data != null) Log.d("Baresip", "aor = ${data.getStringExtra("aor")}") + when (requestCode) { ACCOUNTS_CODE -> { - uaAdapter.notifyDataSetChanged() - if (UserAgent.uas().size > 0) { - if ((aorSpinner.selectedItemPosition == -1) || - (aorSpinner.selectedItemPosition >= UserAgent.uas().size)) - aorSpinner.setSelection(0) - else - updateIcons(UserAgent.uas()[aorSpinner.selectedItemPosition].account) - } else { - aorSpinner.setSelection(-1) - } + 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) @@ -1163,19 +1167,7 @@ class MainActivity : AppCompatActivity() { } CALLS_CODE -> { - val acc = UserAgent.uas()[aorSpinner.selectedItemPosition].account - 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 - } - } + spinToAor(data!!.getStringExtra("aor")!!) callsButton.setImageResource(R.drawable.calls) } @@ -1192,8 +1184,12 @@ class MainActivity : AppCompatActivity() { for (account_index in UserAgent.uas().indices) if (UserAgent.uas()[account_index].account.aor == aor) { 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 { @@ -1391,6 +1387,9 @@ class MainActivity : AppCompatActivity() { } "accounts" -> { val i = Intent(this, AccountsActivity::class.java) + val b = Bundle() + b.putString("aor", activity[1]) + i.putExtras(b) startActivityForResult(i, ACCOUNTS_CODE) } "account" -> {