diff --git a/app/src/main/java/org/linphone/ui/main/fragment/AbstractMainFragment.kt b/app/src/main/java/org/linphone/ui/main/fragment/AbstractMainFragment.kt index c51d49e41..179b59bf3 100644 --- a/app/src/main/java/org/linphone/ui/main/fragment/AbstractMainFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/fragment/AbstractMainFragment.kt @@ -78,6 +78,10 @@ abstract class AbstractMainFragment : GenericMainFragment() { viewModel.applyFilter(filter.trim()) } + viewModel.missedCallsCount.observe(viewLifecycleOwner) { + sharedViewModel.refreshDrawerMenuAccountsListEvent.value = Event(false) + } + viewModel.navigateToContactsEvent.observe(viewLifecycleOwner) { it.consume { if (currentFragmentId != R.id.contactsListFragment) { diff --git a/app/src/main/java/org/linphone/ui/main/fragment/DrawerMenuFragment.kt b/app/src/main/java/org/linphone/ui/main/fragment/DrawerMenuFragment.kt index c5fc563c8..80244bbb0 100644 --- a/app/src/main/java/org/linphone/ui/main/fragment/DrawerMenuFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/fragment/DrawerMenuFragment.kt @@ -129,8 +129,12 @@ class DrawerMenuFragment : GenericMainFragment() { } sharedViewModel.refreshDrawerMenuAccountsListEvent.observe(viewLifecycleOwner) { - it.consume { - viewModel.updateAccountsList() + it.consume { recreate -> + if (recreate) { + viewModel.updateAccountsList() + } else { + viewModel.refreshAccountsNotificationsCount() + } } } } diff --git a/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt b/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt index 062760347..8798edbe3 100644 --- a/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt @@ -261,6 +261,7 @@ class HistoryListFragment : AbstractMainFragment() { Log.i("$TAG Fragment is resumed, resetting missed calls count") sharedViewModel.resetMissedCallsCountEvent.value = Event(true) + sharedViewModel.refreshDrawerMenuAccountsListEvent.value = Event(false) // Scroll to top to display latest call logs binding.historyList.scrollToPosition(0) diff --git a/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt b/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt index 1414e90ce..5f7a3292f 100644 --- a/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt +++ b/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt @@ -230,7 +230,7 @@ class AccountModel @WorkerThread constructor( } @WorkerThread - private fun computeNotificationsCount() { + fun computeNotificationsCount() { notificationsCount.postValue(account.unreadChatMessageCount + account.missedCallsCount) } } diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/DrawerMenuViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/DrawerMenuViewModel.kt index c2b474416..8fbda2053 100644 --- a/app/src/main/java/org/linphone/ui/main/viewmodel/DrawerMenuViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/DrawerMenuViewModel.kt @@ -148,6 +148,15 @@ class DrawerMenuViewModel @UiThread constructor() : GenericViewModel() { } } + @UiThread + fun refreshAccountsNotificationsCount() { + coreContext.postOnCoreThread { + for (model in accounts.value.orEmpty()) { + model.computeNotificationsCount() + } + } + } + @WorkerThread private fun computeAccountsList() { accounts.value.orEmpty().forEach(AccountModel::destroy)