diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/AbstractMainViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/AbstractMainViewModel.kt index 4835ab985..1b3b82b5c 100644 --- a/app/src/main/java/org/linphone/ui/main/viewmodel/AbstractMainViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/AbstractMainViewModel.kt @@ -28,9 +28,9 @@ import org.linphone.core.Account import org.linphone.core.Call import org.linphone.core.ChatMessage import org.linphone.core.ChatRoom -import org.linphone.core.ConfiguringState import org.linphone.core.Core import org.linphone.core.CoreListenerStub +import org.linphone.core.GlobalState import org.linphone.core.tools.Log import org.linphone.ui.GenericViewModel import org.linphone.ui.main.model.AccountModel @@ -139,18 +139,10 @@ open class AbstractMainViewModel } @WorkerThread - override fun onConfiguringStatus(core: Core, status: ConfiguringState?, message: String?) { - if (status != ConfiguringState.Skipped) { - account.value?.destroy() - - val defaultAccount = core.defaultAccount - if (defaultAccount != null) { - Log.i("$TAG Configuring status is [$status], reload default account") - account.postValue(AccountModel(defaultAccount)) - defaultAccountChangedEvent.postValue(Event(true)) - } else { - Log.w("$TAG Configuring status is [$status] but no default account was found!") - } + override fun onGlobalStateChanged(core: Core, state: GlobalState?, message: String) { + if (core.globalState == GlobalState.On) { + Log.i("$TAG Global state is [${core.globalState}], reload account info") + configure() } } diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/DefaultAccountChangedViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/DefaultAccountChangedViewModel.kt index 82f579b18..9862d7139 100644 --- a/app/src/main/java/org/linphone/ui/main/viewmodel/DefaultAccountChangedViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/DefaultAccountChangedViewModel.kt @@ -25,10 +25,16 @@ import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.core.Account import org.linphone.core.Core import org.linphone.core.CoreListenerStub +import org.linphone.core.GlobalState +import org.linphone.core.tools.Log import org.linphone.ui.GenericViewModel import org.linphone.utils.Event open class DefaultAccountChangedViewModel : GenericViewModel() { + companion object { + private const val TAG = "[Default Account Changed ViewModel]" + } + val defaultAccountChangedEvent: MutableLiveData> by lazy { MutableLiveData>() } @@ -38,6 +44,14 @@ open class DefaultAccountChangedViewModel : GenericViewModel() { override fun onDefaultAccountChanged(core: Core, account: Account?) { defaultAccountChangedEvent.postValue(Event(true)) } + + @WorkerThread + override fun onGlobalStateChanged(core: Core, state: GlobalState?, message: String) { + if (core.globalState == GlobalState.On) { + Log.i("$TAG Global state is [${core.globalState}], reload default account") + defaultAccountChangedEvent.postValue(Event(true)) + } + } } init { 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 fef062b8c..54cd3452f 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 @@ -26,9 +26,9 @@ import androidx.lifecycle.MutableLiveData import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.core.Account -import org.linphone.core.ConfiguringState import org.linphone.core.Core import org.linphone.core.CoreListenerStub +import org.linphone.core.GlobalState import org.linphone.core.tools.Log import org.linphone.ui.GenericViewModel import org.linphone.ui.main.model.AccountModel @@ -109,11 +109,11 @@ class DrawerMenuViewModel } @WorkerThread - override fun onConfiguringStatus(core: Core, status: ConfiguringState?, message: String?) { - if (status != ConfiguringState.Skipped) { + override fun onGlobalStateChanged(core: Core, state: GlobalState?, message: String) { + if (core.globalState == GlobalState.On) { accounts.value.orEmpty().forEach(AccountModel::destroy) - Log.i("$TAG Configuring status is [$status], reload accounts & shortcuts") + Log.i("$TAG Global state is [${core.globalState}], reload accounts & shortcuts") computeAccountsList() computeShortcuts() } @@ -180,6 +180,12 @@ class DrawerMenuViewModel showAccountPopupMenuEvent.postValue(Event(Pair(view, account))) } list.add(model) + + if (account == coreContext.core.defaultAccount) { + defaultAccountChangedEvent.postValue( + Event(account.params.identityAddress?.asStringUriOnly() ?: "") + ) + } } accounts.postValue(list)