Fixed accounts list not updated when changing default account + hide account with hidden param

This commit is contained in:
Sylvain Berfini 2022-06-16 14:32:44 +02:00
parent 435e4b84f6
commit 86cba063d1
8 changed files with 63 additions and 25 deletions

View file

@ -87,6 +87,14 @@ class AccountSettingsFragment : GenericSettingFragment<SettingsAccountFragmentBi
}
}
viewModel.accountDefaultEvent.observe(
viewLifecycleOwner
) {
it.consume {
sharedViewModel.defaultAccountChanged.value = true
}
}
view.doOnPreDraw {
// Notifies fragment is ready to be drawn
sharedViewModel.accountSettingsFragmentOpenedEvent.value = Event(true)

View file

@ -116,6 +116,13 @@ class SettingsFragment : SecureFragment<SettingsFragmentBinding>() {
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")

View file

@ -70,6 +70,10 @@ class AccountSettingsViewModel(val account: Account) : GenericSettingsViewModel(
MutableLiveData<Event<Boolean>>()
}
val accountDefaultEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
}
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)
}
}
}

View file

@ -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<AccountSettingsViewModel>()
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

View file

@ -73,6 +73,13 @@ class SideMenuFragment : GenericFragment<SideMenuFragmentBinding>() {
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()

View file

@ -83,29 +83,27 @@ class SideMenuViewModel : ViewModel() {
accounts.value.orEmpty().forEach(AccountSettingsViewModel::destroy)
val list = arrayListOf<AccountSettingsViewModel>()
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

View file

@ -88,6 +88,8 @@ class SharedMainViewModel : ViewModel() {
/* Accounts */
val defaultAccountChanged = MutableLiveData<Boolean>()
val accountRemoved = MutableLiveData<Boolean>()
val accountSettingsFragmentOpenedEvent: MutableLiveData<Event<Boolean>> by lazy {

View file

@ -222,5 +222,17 @@ class LinphoneUtils {
remoteSipUri.clean()
return "${localSipUri.asStringUriOnly()}~${remoteSipUri.asStringUriOnly()}"
}
fun getAccountsNotHidden(): List<Account> {
val list = arrayListOf<Account>()
for (account in coreContext.core.accountList) {
if (account.getCustomParam("hidden") != "1") {
list.add(account)
}
}
return list
}
}
}