- Properly handle pausing of chats and chats activities.

This commit is contained in:
Juha Heinanen
2020-05-03 14:03:36 +03:00
parent acba399778
commit a27c7d67ee
4 changed files with 55 additions and 60 deletions
@@ -47,6 +47,8 @@ class AccountActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_account) setContentView(R.layout.activity_account)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
accp = intent.getStringExtra("accp")!! accp = intent.getStringExtra("accp")!!
Utils.addActivity("account,$accp") Utils.addActivity("account,$accp")
@@ -196,8 +198,6 @@ 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 {
@@ -33,17 +33,17 @@ class ChatActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_chat) setContentView(R.layout.activity_chat)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
aor = intent.getStringExtra("aor")!! aor = intent.getStringExtra("aor")!!
peerUri = intent.getStringExtra("peer")!! peerUri = intent.getStringExtra("peer")!!
focus = intent.getBooleanExtra("focus", false) focus = intent.getBooleanExtra("focus", false)
if (BaresipService.activities.first().startsWith("chat,$aor,$peerUri")) { if (BaresipService.activities.first().startsWith("chat,$aor,$peerUri")) {
val i = Intent() returnResult(Activity.RESULT_CANCELED)
setResult(Activity.RESULT_CANCELED, i) return
finish()
} else { } else {
Utils.addActivity("chat,$aor,$peerUri,$focus") Utils.addActivity("chat,$aor,$peerUri,$focus")
} }
@@ -51,9 +51,7 @@ class ChatActivity : AppCompatActivity() {
val userAgent = Account.findUa(aor) val userAgent = Account.findUa(aor)
if (userAgent == null) { if (userAgent == null) {
Log.w("Baresip", "MessageActivity did not find ua of $aor") Log.w("Baresip", "MessageActivity did not find ua of $aor")
val i = Intent() returnResult(Activity.RESULT_CANCELED)
setResult(Activity.RESULT_CANCELED, i)
finish()
return return
} else { } else {
ua = userAgent ua = userAgent
@@ -168,26 +166,21 @@ class ChatActivity : AppCompatActivity() {
} }
override fun onCreateOptionsMenu(menu: Menu): Boolean { override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.call_icon, menu) menuInflater.inflate(R.menu.call_icon, menu)
return true return true
} }
override fun onPause() { override fun onPause() {
if (newMessage.text.toString() != "") { if (newMessage.text.toString() != "") {
Log.d("Baresip", "Saving newMessage ${newMessage.text} for $aor::$peerUri") Log.d("Baresip", "Saving newMessage ${newMessage.text} for $aor::$peerUri")
BaresipService.chatTexts.put("$aor::$peerUri", newMessage.text.toString()) BaresipService.chatTexts.put("$aor::$peerUri", newMessage.text.toString())
} }
returnResult(Activity.RESULT_CANCELED)
super.onPause() super.onPause()
} }
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
val chatText = BaresipService.chatTexts.get("$aor::$peerUri") val chatText = BaresipService.chatTexts.get("$aor::$peerUri")
if (chatText != null) { if (chatText != null) {
Log.d("Baresip", "Restoring newMessage ${newMessage.text} for $aor::$peerUri") Log.d("Baresip", "Restoring newMessage ${newMessage.text} for $aor::$peerUri")
@@ -199,14 +192,11 @@ class ChatActivity : AppCompatActivity() {
chatMessages = uaPeerMessages(aor, peerUri) chatMessages = uaPeerMessages(aor, peerUri)
mlAdapter = MessageListAdapter(this, chatMessages) mlAdapter = MessageListAdapter(this, chatMessages)
listView.adapter = mlAdapter listView.adapter = mlAdapter
} }
override fun onDestroy() { override fun onDestroy() {
LocalBroadcastManager.getInstance(this).unregisterReceiver(messageResponseReceiver) LocalBroadcastManager.getInstance(this).unregisterReceiver(messageResponseReceiver)
super.onDestroy() super.onDestroy()
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
@@ -217,23 +207,6 @@ class ChatActivity : AppCompatActivity() {
when (item.itemId) { 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 -> { R.id.callIcon -> {
if (SystemClock.elapsedRealtime() - lastCall > 1000) { if (SystemClock.elapsedRealtime() - lastCall > 1000) {
lastCall = SystemClock.elapsedRealtime() lastCall = SystemClock.elapsedRealtime()
@@ -245,25 +218,48 @@ class ChatActivity : AppCompatActivity() {
intent.putExtra("peer", peerUri) intent.putExtra("peer", peerUri)
startActivity(intent) startActivity(intent)
finish() finish()
}
}
}
return true return true
}
}
android.R.id.home -> {
onBackPressed()
return true
}
}
return super.onOptionsItemSelected(item)
} }
override fun onBackPressed() { 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,false")
BaresipService.activities.remove("chat,$aor,$peerUri,true") BaresipService.activities.remove("chat,$aor,$peerUri,true")
val i = Intent() returnResult(Activity.RESULT_OK)
setResult(Activity.RESULT_OK, i) super.onBackPressed()
finish()
} }
private fun returnResult(code: Int) {
val i = Intent()
i.putExtra("aor", aor)
setResult(code, i)
finish()
}
private fun uaPeerMessages(aor: String, peerUri: String): ArrayList<Message> { private fun uaPeerMessages(aor: String, peerUri: String): ArrayList<Message> {
val res = ArrayList<Message>() val res = ArrayList<Message>()
for (m in Message.messages()) for (m in Message.messages())
@@ -18,8 +18,7 @@ class ChatsActivity: AppCompatActivity() {
internal lateinit var clAdapter: ChatListAdapter internal lateinit var clAdapter: ChatListAdapter
internal lateinit var peerUri: AutoCompleteTextView internal lateinit var peerUri: AutoCompleteTextView
internal lateinit var plusButton: ImageButton internal lateinit var plusButton: ImageButton
internal lateinit var aor: String
private var aor = ""
public override fun onCreate(savedInstanceState: Bundle?) { public override fun onCreate(savedInstanceState: Bundle?) {
@@ -131,21 +130,16 @@ class ChatsActivity: AppCompatActivity() {
} }
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
clAdapter.clear() clAdapter.clear()
uaMessages = uaMessages(aor) uaMessages = uaMessages(aor)
clAdapter = ChatListAdapter(this, uaMessages) clAdapter = ChatListAdapter(this, uaMessages)
listView.adapter = clAdapter listView.adapter = clAdapter
} }
override fun onCreateOptionsMenu(menu: Menu): Boolean { override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.chats_menu, menu) menuInflater.inflate(R.menu.chats_menu, menu)
return true return true
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
@@ -168,24 +162,22 @@ class ChatsActivity: AppCompatActivity() {
dialog.dismiss() dialog.dismiss()
} }
deleteDialog.create().show() deleteDialog.create().show()
return true
} }
android.R.id.home -> { android.R.id.home -> {
BaresipService.activities.remove("chats,$aor") BaresipService.activities.remove("chats,$aor")
val i = Intent() returnResult()
setResult(Activity.RESULT_CANCELED, i)
finish()
}
}
return true return true
} }
}
return super.onOptionsItemSelected(item)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data) super.onActivityResult(requestCode, resultCode, data)
if (requestCode == MainActivity.CHAT_CODE) { if (requestCode == MainActivity.CHAT_CODE) {
if (resultCode == Activity.RESULT_OK) { if (resultCode == Activity.RESULT_OK) {
clAdapter.clear() clAdapter.clear()
@@ -194,17 +186,25 @@ class ChatsActivity: AppCompatActivity() {
listView.adapter = clAdapter listView.adapter = clAdapter
} }
} }
} }
override fun onBackPressed() { override fun onBackPressed() {
BaresipService.activities.remove("chats,$aor") BaresipService.activities.remove("chats,$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()
} }
private fun uaMessages(aor: String) : ArrayList<Message> { private fun uaMessages(aor: String) : ArrayList<Message> {
@@ -1119,9 +1119,6 @@ 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 -> {
@@ -1173,11 +1170,13 @@ class MainActivity : AppCompatActivity() {
} }
CHATS_CODE, CHAT_CODE -> { CHATS_CODE, CHAT_CODE -> {
spinToAor(data!!.getStringExtra("aor")!!)
updateIcons(UserAgent.uas()[aorSpinner.selectedItemPosition].account) updateIcons(UserAgent.uas()[aorSpinner.selectedItemPosition].account)
} }
ABOUT_CODE -> { ABOUT_CODE -> {
} }
} }
} }