- 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

View File

@ -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)

View File

@ -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<AccountRow>()

View File

@ -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 {

View File

@ -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" -> {