From bedcaa52f07d0022e529d437142031662686adbd Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Sat, 20 Apr 2019 14:42:51 +0300 Subject: [PATCH] - Show red messages icon when unread messages exist --- .../main/kotlin/com/tutpro/baresip/Account.kt | 1 + .../com/tutpro/baresip/BaresipService.kt | 2 ++ .../kotlin/com/tutpro/baresip/ChatActivity.kt | 13 ++++++++-- .../com/tutpro/baresip/ChatsActivity.kt | 2 +- .../kotlin/com/tutpro/baresip/MainActivity.kt | 24 +++++++++++++------ app/src/main/res/drawable/messages_unread.xml | 5 ++++ 6 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 app/src/main/res/drawable/messages_unread.xml diff --git a/app/src/main/kotlin/com/tutpro/baresip/Account.kt b/app/src/main/kotlin/com/tutpro/baresip/Account.kt index 2174ec71..397e9b4c 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Account.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Account.kt @@ -16,6 +16,7 @@ class Account(val accp: String) { var vmNew = 0 var vmOld = 0 var missedCalls = false + var unreadMessages = false init { val stunHost = account_stun_host(accp) diff --git a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt index e747adff..385dd7a5 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt @@ -543,6 +543,8 @@ class BaresipService: Service() { Log.d(LOG_TAG, "Message event for $uap from $peer at $timeStamp") Message.add(Message(ua.account.aor, peer, text, timeStamp.toLong(), R.drawable.arrow_down_green, 0, "", true)) + Message.saveMessages(filesPath) + ua.account.unreadMessages = true if (!Utils.isVisible()) { val intent = Intent(this, BaresipService::class.java) intent.action = "Message Show" diff --git a/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt index 66c9f697..4e493ba9 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt @@ -92,6 +92,7 @@ class ChatActivity : AppCompatActivity() { if (chatMessages.size == 0) { listView.removeFooterView(footerView) } + Message.saveMessages(applicationContext.filesDir.absolutePath) } DialogInterface.BUTTON_POSITIVE -> { } @@ -154,6 +155,8 @@ class ChatActivity : AppCompatActivity() { LocalBroadcastManager.getInstance(this).registerReceiver(messageResponseReceiver, IntentFilter("message response")) + ua.account.unreadMessages = false + } override fun onCreateOptionsMenu(menu: Menu): Boolean { @@ -166,7 +169,6 @@ class ChatActivity : AppCompatActivity() { Log.d("Baresip", "Saving newMessage ${newMessage.text} for $aor::$peerUri") BaresipService.chatTexts.put("$aor::$peerUri", newMessage.text.toString()) } - Message.saveMessages(applicationContext.filesDir.absolutePath) super.onPause() } @@ -199,7 +201,14 @@ class ChatActivity : AppCompatActivity() { override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { android.R.id.home -> { - for (m in chatMessages) if (m.new) m.new = false + var save = false + for (m in chatMessages) { + if (m.new) { + m.new = false + save = true + } + } + if (save) Message.saveMessages(applicationContext.filesDir.absolutePath) imm.hideSoftInputFromWindow(newMessage.windowToken, 0) val i = Intent() setResult(Activity.RESULT_OK, i) diff --git a/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt index a976beda..e25fe99c 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt @@ -73,6 +73,7 @@ class ChatsActivity: AppCompatActivity() { clAdapter.remove(m) clAdapter.notifyDataSetChanged() BaresipService.messages = msgs + Message.saveMessages(filesPath) uaMessages = uaMessages(aor) } DialogInterface.BUTTON_POSITIVE -> { @@ -142,7 +143,6 @@ class ChatsActivity: AppCompatActivity() { } override fun onPause() { - Message.saveMessages(applicationContext.filesDir.absolutePath) super.onPause() } diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index 3dd932d0..86232802 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -152,10 +152,7 @@ class MainActivity : AppCompatActivity() { } else { voicemailButton.visibility = View.INVISIBLE } - if (acc.missedCalls) - callsButton.setImageResource(R.drawable.calls_missed) - else - callsButton.setImageResource(R.drawable.calls) + updateIcons(acc) } override fun onNothingSelected(parent: AdapterView<*>) { @@ -522,10 +519,12 @@ class MainActivity : AppCompatActivity() { "message show", "message reply" -> handleServiceEvent(resumeAction, arrayListOf(resumeUap, resumeUri)) else -> { - if ((aorSpinner.selectedItemPosition == -1) && (UserAgent.uas().size > 0)) - aorSpinner.setSelection(0) - if (aorSpinner.selectedItemPosition >= 0) + if (UserAgent.uas().size > 0) { + if (aorSpinner.selectedItemPosition == -1) + aorSpinner.setSelection(0) showCall(UserAgent.uas()[aorSpinner.selectedItemPosition]) + updateIcons(UserAgent.uas()[aorSpinner.selectedItemPosition].account) + } } } resumeAction = "" @@ -1130,6 +1129,17 @@ class MainActivity : AppCompatActivity() { } } + private fun updateIcons(acc: Account) { + if (acc.missedCalls) + callsButton.setImageResource(R.drawable.calls_missed) + else + callsButton.setImageResource(R.drawable.calls) + if (acc.unreadMessages) + messagesButton.setImageResource(R.drawable.messages_unread) + else + messagesButton.setImageResource(R.drawable.messages) + } + companion object { var visible = false diff --git a/app/src/main/res/drawable/messages_unread.xml b/app/src/main/res/drawable/messages_unread.xml new file mode 100644 index 00000000..3d3e147d --- /dev/null +++ b/app/src/main/res/drawable/messages_unread.xml @@ -0,0 +1,5 @@ + + +