From a27c7d67eec7fb2f44b08fcbc01bade0cba83512 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Sun, 3 May 2020 14:03:36 +0300 Subject: [PATCH] - Properly handle pausing of chats and chats activities. --- .../com/tutpro/baresip/AccountActivity.kt | 4 +- .../kotlin/com/tutpro/baresip/ChatActivity.kt | 70 +++++++++---------- .../com/tutpro/baresip/ChatsActivity.kt | 36 +++++----- .../kotlin/com/tutpro/baresip/MainActivity.kt | 5 +- 4 files changed, 55 insertions(+), 60 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt index b29e367c..fdb76863 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt @@ -47,6 +47,8 @@ class AccountActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_account) + supportActionBar?.setDisplayHomeAsUpEnabled(true) + accp = intent.getStringExtra("accp")!! Utils.addActivity("account,$accp") @@ -196,8 +198,6 @@ class AccountActivity : AppCompatActivity() { defaultCheck = findViewById(R.id.Default) as CheckBox defaultCheck.isChecked = uaIndex == 0 - supportActionBar?.setDisplayHomeAsUpEnabled(true) - } override fun onCreateOptionsMenu(menu: Menu): Boolean { diff --git a/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt index 3ce1c719..73565f0d 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt @@ -33,17 +33,17 @@ class ChatActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_chat) + supportActionBar?.setDisplayHomeAsUpEnabled(true) + aor = intent.getStringExtra("aor")!! peerUri = intent.getStringExtra("peer")!! focus = intent.getBooleanExtra("focus", false) if (BaresipService.activities.first().startsWith("chat,$aor,$peerUri")) { - val i = Intent() - setResult(Activity.RESULT_CANCELED, i) - finish() + returnResult(Activity.RESULT_CANCELED) + return } else { Utils.addActivity("chat,$aor,$peerUri,$focus") } @@ -51,9 +51,7 @@ class ChatActivity : AppCompatActivity() { val userAgent = Account.findUa(aor) if (userAgent == null) { Log.w("Baresip", "MessageActivity did not find ua of $aor") - val i = Intent() - setResult(Activity.RESULT_CANCELED, i) - finish() + returnResult(Activity.RESULT_CANCELED) return } else { ua = userAgent @@ -168,26 +166,21 @@ class ChatActivity : AppCompatActivity() { } override fun onCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate(R.menu.call_icon, menu) return true - } override fun onPause() { - if (newMessage.text.toString() != "") { Log.d("Baresip", "Saving newMessage ${newMessage.text} for $aor::$peerUri") BaresipService.chatTexts.put("$aor::$peerUri", newMessage.text.toString()) } + returnResult(Activity.RESULT_CANCELED) super.onPause() - } override fun onResume() { - super.onResume() - val chatText = BaresipService.chatTexts.get("$aor::$peerUri") if (chatText != null) { Log.d("Baresip", "Restoring newMessage ${newMessage.text} for $aor::$peerUri") @@ -199,14 +192,11 @@ class ChatActivity : AppCompatActivity() { chatMessages = uaPeerMessages(aor, peerUri) mlAdapter = MessageListAdapter(this, chatMessages) listView.adapter = mlAdapter - } override fun onDestroy() { - LocalBroadcastManager.getInstance(this).unregisterReceiver(messageResponseReceiver) super.onDestroy() - } override fun onOptionsItemSelected(item: MenuItem): Boolean { @@ -217,23 +207,6 @@ class ChatActivity : AppCompatActivity() { when (item.itemId) { - android.R.id.home -> { - var save = false - for (m in chatMessages) { - if (m.new) { - m.new = false - save = true - } - } - if (save) Message.save() - imm.hideSoftInputFromWindow(newMessage.windowToken, 0) - BaresipService.activities.remove("chat,$aor,$peerUri,false") - BaresipService.activities.remove("chat,$aor,$peerUri,true") - val i = Intent() - setResult(Activity.RESULT_OK, i) - finish() - } - R.id.callIcon -> { if (SystemClock.elapsedRealtime() - lastCall > 1000) { lastCall = SystemClock.elapsedRealtime() @@ -245,25 +218,48 @@ class ChatActivity : AppCompatActivity() { intent.putExtra("peer", peerUri) startActivity(intent) finish() + return true } } + android.R.id.home -> { + onBackPressed() + return true + } + } - return true + return super.onOptionsItemSelected(item) } override fun onBackPressed() { + var save = false + for (m in chatMessages) { + if (m.new) { + m.new = false + save = true + } + } + if (save) Message.save() + + imm.hideSoftInputFromWindow(newMessage.windowToken, 0) + BaresipService.activities.remove("chat,$aor,$peerUri,false") BaresipService.activities.remove("chat,$aor,$peerUri,true") - val i = Intent() - setResult(Activity.RESULT_OK, i) - finish() + returnResult(Activity.RESULT_OK) + super.onBackPressed() } + private fun returnResult(code: Int) { + val i = Intent() + i.putExtra("aor", aor) + setResult(code, i) + finish() + } + private fun uaPeerMessages(aor: String, peerUri: String): ArrayList { val res = ArrayList() for (m in Message.messages()) diff --git a/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt index ee70da94..1488bcbf 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt @@ -18,8 +18,7 @@ class ChatsActivity: AppCompatActivity() { internal lateinit var clAdapter: ChatListAdapter internal lateinit var peerUri: AutoCompleteTextView internal lateinit var plusButton: ImageButton - - private var aor = "" + internal lateinit var aor: String public override fun onCreate(savedInstanceState: Bundle?) { @@ -131,21 +130,16 @@ class ChatsActivity: AppCompatActivity() { } override fun onResume() { - super.onResume() - clAdapter.clear() uaMessages = uaMessages(aor) clAdapter = ChatListAdapter(this, uaMessages) listView.adapter = clAdapter - } override fun onCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate(R.menu.chats_menu, menu) return true - } override fun onOptionsItemSelected(item: MenuItem): Boolean { @@ -168,24 +162,22 @@ class ChatsActivity: AppCompatActivity() { dialog.dismiss() } deleteDialog.create().show() + return true } android.R.id.home -> { BaresipService.activities.remove("chats,$aor") - val i = Intent() - setResult(Activity.RESULT_CANCELED, i) - finish() + returnResult() + return true } } - return true + return super.onOptionsItemSelected(item) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (requestCode == MainActivity.CHAT_CODE) { if (resultCode == Activity.RESULT_OK) { clAdapter.clear() @@ -194,17 +186,25 @@ class ChatsActivity: AppCompatActivity() { listView.adapter = clAdapter } } - } override fun onBackPressed() { - BaresipService.activities.remove("chats,$aor") - val i = Intent() - setResult(Activity.RESULT_OK, i) - finish() + 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() } private fun uaMessages(aor: String) : ArrayList { diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index 6fff1ea8..064b78b1 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -1119,9 +1119,6 @@ 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 -> { @@ -1173,11 +1170,13 @@ class MainActivity : AppCompatActivity() { } CHATS_CODE, CHAT_CODE -> { + spinToAor(data!!.getStringExtra("aor")!!) updateIcons(UserAgent.uas()[aorSpinner.selectedItemPosition].account) } ABOUT_CODE -> { } + } }