From 9c6533bcebaebeffa5a5c9e0d401bbeea37e1b00 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 11 Oct 2023 16:07:27 +0200 Subject: [PATCH] Added unread messages count indicator to bottom nav bar --- .../main/viewmodel/BottomNavBarViewModel.kt | 30 +++++++++++++++++++ .../main/res/layout-land/bottom_nav_bar.xml | 15 ++++++++++ app/src/main/res/layout/bottom_nav_bar.xml | 18 +++++++++++ 3 files changed, 63 insertions(+) diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/BottomNavBarViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/BottomNavBarViewModel.kt index 296a52fa1..01648c035 100644 --- a/app/src/main/java/org/linphone/ui/main/viewmodel/BottomNavBarViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/BottomNavBarViewModel.kt @@ -26,6 +26,8 @@ import androidx.lifecycle.ViewModel import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.core.Call +import org.linphone.core.ChatMessage +import org.linphone.core.ChatRoom import org.linphone.core.Core import org.linphone.core.CoreListenerStub import org.linphone.core.tools.Log @@ -50,6 +52,8 @@ class BottomNavBarViewModel @UiThread constructor() : ViewModel() { val missedCallsCount = MutableLiveData() + val unreadMessages = MutableLiveData() + private val coreListener = object : CoreListenerStub() { @WorkerThread override fun onCallStateChanged( @@ -62,12 +66,27 @@ class BottomNavBarViewModel @UiThread constructor() : ViewModel() { updateMissedCallsCount() } } + + @WorkerThread + override fun onMessagesReceived( + core: Core, + chatRoom: ChatRoom, + messages: Array + ) { + updateUnreadMessagesCount() + } + + @WorkerThread + override fun onChatRoomRead(core: Core, chatRoom: ChatRoom) { + updateUnreadMessagesCount() + } } init { coreContext.postOnCoreThread { core -> core.addListener(coreListener) updateMissedCallsCount() + updateUnreadMessagesCount() } updateAvailableMenus() @@ -93,6 +112,17 @@ class BottomNavBarViewModel @UiThread constructor() : ViewModel() { missedCallsCount.postValue(count) } + @WorkerThread + fun updateUnreadMessagesCount() { + val account = LinphoneUtils.getDefaultAccount() + val count = account?.unreadChatMessageCount ?: coreContext.core.unreadChatMessageCount + val moreThanOne = count > 1 + Log.i( + "$TAG There ${if (moreThanOne) "are" else "is"} [$count] unread ${if (moreThanOne) "messages" else "message"}" + ) + unreadMessages.postValue(count) + } + @UiThread fun resetMissedCallsCount() { coreContext.postOnCoreThread { core -> diff --git a/app/src/main/res/layout-land/bottom_nav_bar.xml b/app/src/main/res/layout-land/bottom_nav_bar.xml index 07a905307..677071b94 100644 --- a/app/src/main/res/layout-land/bottom_nav_bar.xml +++ b/app/src/main/res/layout-land/bottom_nav_bar.xml @@ -92,6 +92,21 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/calls" /> + + + +