Prevent meeting icons from being briefly visible when selected account has no videoconference factory URI set in it's params

This commit is contained in:
Sylvain Berfini 2025-03-26 09:48:03 +01:00
parent 1f45ba8bd0
commit 90bf20e50e
2 changed files with 17 additions and 6 deletions

View file

@ -82,6 +82,8 @@ class CoreContext
private val mainThread = Handler(Looper.getMainLooper()) private val mainThread = Handler(Looper.getMainLooper())
var defaultAccountHasVideoConferenceFactoryUri: Boolean = false
var bearerAuthInfoPendingPasswordUpdate: AuthInfo? = null var bearerAuthInfoPendingPasswordUpdate: AuthInfo? = null
var digestAuthInfoPendingPasswordUpdate: AuthInfo? = null var digestAuthInfoPendingPasswordUpdate: AuthInfo? = null
@ -175,6 +177,11 @@ class CoreContext
private var previousCallState = Call.State.Idle private var previousCallState = Call.State.Idle
private val coreListener = object : CoreListenerStub() { private val coreListener = object : CoreListenerStub() {
@WorkerThread
override fun onDefaultAccountChanged(core: Core, account: Account?) {
defaultAccountHasVideoConferenceFactoryUri = account?.params?.audioVideoConferenceFactoryAddress != null
}
@WorkerThread @WorkerThread
override fun onMessagesReceived( override fun onMessagesReceived(
core: Core, core: Core,
@ -512,6 +519,8 @@ class CoreContext
core.isAutoIterateEnabled = true core.isAutoIterateEnabled = true
core.addListener(coreListener) core.addListener(coreListener)
defaultAccountHasVideoConferenceFactoryUri = core.defaultAccount?.params?.audioVideoConferenceFactoryAddress != null
coreThread.postDelayed({ startCore() }, 50) coreThread.postDelayed({ startCore() }, 50)
Looper.loop() Looper.loop()

View file

@ -148,6 +148,10 @@ open class AbstractMainViewModel
@WorkerThread @WorkerThread
override fun onDefaultAccountChanged(core: Core, defaultAccount: Account?) { override fun onDefaultAccountChanged(core: Core, defaultAccount: Account?) {
updateAvailableMenus()
computeUnreadMessagesCount()
updateMissedCallsCount()
account.value?.destroy() account.value?.destroy()
if (defaultAccount == null) { if (defaultAccount == null) {
@ -162,15 +166,14 @@ open class AbstractMainViewModel
account.postValue(AccountModel(defaultAccount)) account.postValue(AccountModel(defaultAccount))
} }
computeUnreadMessagesCount()
updateMissedCallsCount()
updateAvailableMenus()
defaultAccountChangedEvent.postValue(Event(true)) defaultAccountChangedEvent.postValue(Event(true))
} }
} }
init { init {
// Pre-compute this value to prevent the menu being briefly visible
hideMeetings.value = !coreContext.defaultAccountHasVideoConferenceFactoryUri
coreContext.postOnCoreThread { core -> coreContext.postOnCoreThread { core ->
core.addListener(coreListener) core.addListener(coreListener)
configure() configure()
@ -301,8 +304,7 @@ open class AbstractMainViewModel
val conferencingAvailable = LinphoneUtils.isRemoteConferencingAvailable( val conferencingAvailable = LinphoneUtils.isRemoteConferencingAvailable(
coreContext.core coreContext.core
) )
val hideGroupCall = val hideGroupCall = corePreferences.disableMeetings || !conferencingAvailable
coreContext.core.accountList.isEmpty() || corePreferences.disableMeetings || !conferencingAvailable
hideMeetings.postValue(hideGroupCall) hideMeetings.postValue(hideGroupCall)
} }