diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt index 1bd80f1fc..efd297098 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt @@ -87,6 +87,14 @@ class AccountSettingsFragment : GenericSettingFragment() { viewModel.updateAccountsList() } + sharedViewModel.defaultAccountChanged.observe( + viewLifecycleOwner + ) { + Log.i("[Settings] Default account changed, update accounts list") + viewModel.updateAccountsList() + } + val identity = arguments?.getString("Identity") if (identity != null) { Log.i("[Settings] Found identity parameter in arguments: $identity") diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AccountSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AccountSettingsViewModel.kt index 059266873..5910b008e 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AccountSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AccountSettingsViewModel.kt @@ -70,6 +70,10 @@ class AccountSettingsViewModel(val account: Account) : GenericSettingsViewModel( MutableLiveData>() } + val accountDefaultEvent: MutableLiveData> by lazy { + MutableLiveData>() + } + val displayUsernameInsteadOfIdentity = corePreferences.replaceSipUriByUsername private var accountToDelete: Account? = null @@ -212,6 +216,7 @@ class AccountSettingsViewModel(val account: Account) : GenericSettingsViewModel( override fun onBoolValueChanged(newValue: Boolean) { if (newValue) { core.defaultAccount = account + accountDefaultEvent.value = Event(true) } } } diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/SettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/SettingsViewModel.kt index 74bf954dd..c2c39fda9 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/SettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/SettingsViewModel.kt @@ -24,6 +24,7 @@ import androidx.lifecycle.ViewModel import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.activities.main.settings.SettingListenerStub +import org.linphone.utils.LinphoneUtils class SettingsViewModel : ViewModel() { private val tunnelAvailable: Boolean = coreContext.core.tunnelAvailable() @@ -110,12 +111,10 @@ class SettingsViewModel : ViewModel() { accounts.value.orEmpty().forEach(AccountSettingsViewModel::destroy) val list = arrayListOf() - if (coreContext.core.accountList.isNotEmpty()) { - for (account in coreContext.core.accountList) { - val viewModel = AccountSettingsViewModel(account) - viewModel.accountsSettingsListener = accountClickListener - list.add(viewModel) - } + for (account in LinphoneUtils.getAccountsNotHidden()) { + val viewModel = AccountSettingsViewModel(account) + viewModel.accountsSettingsListener = accountClickListener + list.add(viewModel) } accounts.value = list diff --git a/app/src/main/java/org/linphone/activities/main/sidemenu/fragments/SideMenuFragment.kt b/app/src/main/java/org/linphone/activities/main/sidemenu/fragments/SideMenuFragment.kt index fc35e9a18..df9bd81f3 100644 --- a/app/src/main/java/org/linphone/activities/main/sidemenu/fragments/SideMenuFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/sidemenu/fragments/SideMenuFragment.kt @@ -73,6 +73,13 @@ class SideMenuFragment : GenericFragment() { viewModel.updateAccountsList() } + sharedViewModel.defaultAccountChanged.observe( + viewLifecycleOwner + ) { + Log.i("[Side Menu] Default account changed, update accounts list") + viewModel.updateAccountsList() + } + viewModel.accountsSettingsListener = object : SettingListenerStub() { override fun onAccountClicked(identity: String) { val args = Bundle() diff --git a/app/src/main/java/org/linphone/activities/main/sidemenu/viewmodels/SideMenuViewModel.kt b/app/src/main/java/org/linphone/activities/main/sidemenu/viewmodels/SideMenuViewModel.kt index 9fdce5da2..bc2f85593 100644 --- a/app/src/main/java/org/linphone/activities/main/sidemenu/viewmodels/SideMenuViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/sidemenu/viewmodels/SideMenuViewModel.kt @@ -83,29 +83,27 @@ class SideMenuViewModel : ViewModel() { accounts.value.orEmpty().forEach(AccountSettingsViewModel::destroy) val list = arrayListOf() - if (coreContext.core.accountList.isNotEmpty()) { - val defaultAccount = coreContext.core.defaultAccount - if (defaultAccount != null) { - val defaultViewModel = AccountSettingsViewModel(defaultAccount) - defaultViewModel.accountsSettingsListener = object : SettingListenerStub() { + val defaultAccount = coreContext.core.defaultAccount + if (defaultAccount != null) { + val defaultViewModel = AccountSettingsViewModel(defaultAccount) + defaultViewModel.accountsSettingsListener = object : SettingListenerStub() { + override fun onAccountClicked(identity: String) { + accountsSettingsListener.onAccountClicked(identity) + } + } + defaultAccountViewModel.value = defaultViewModel + defaultAccountFound.value = true + } + + for (account in LinphoneUtils.getAccountsNotHidden()) { + if (account != coreContext.core.defaultAccount) { + val viewModel = AccountSettingsViewModel(account) + viewModel.accountsSettingsListener = object : SettingListenerStub() { override fun onAccountClicked(identity: String) { accountsSettingsListener.onAccountClicked(identity) } } - defaultAccountViewModel.value = defaultViewModel - defaultAccountFound.value = true - } - - for (account in coreContext.core.accountList) { - if (account != coreContext.core.defaultAccount) { - val viewModel = AccountSettingsViewModel(account) - viewModel.accountsSettingsListener = object : SettingListenerStub() { - override fun onAccountClicked(identity: String) { - accountsSettingsListener.onAccountClicked(identity) - } - } - list.add(viewModel) - } + list.add(viewModel) } } accounts.value = list diff --git a/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt b/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt index f4a03e154..9c2d1634d 100644 --- a/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt @@ -88,6 +88,8 @@ class SharedMainViewModel : ViewModel() { /* Accounts */ + val defaultAccountChanged = MutableLiveData() + val accountRemoved = MutableLiveData() val accountSettingsFragmentOpenedEvent: MutableLiveData> by lazy { diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt index ab603751a..ffa24de3d 100644 --- a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt +++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt @@ -222,5 +222,17 @@ class LinphoneUtils { remoteSipUri.clean() return "${localSipUri.asStringUriOnly()}~${remoteSipUri.asStringUriOnly()}" } + + fun getAccountsNotHidden(): List { + val list = arrayListOf() + + for (account in coreContext.core.accountList) { + if (account.getCustomParam("hidden") != "1") { + list.add(account) + } + } + + return list + } } }