From fb754c16609da208a90129b963b59d5f8da39865 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 26 Mar 2025 09:48:03 +0100 Subject: [PATCH] Prevent meeting icons from being briefly visible when selected account has no videoconference factory URI set in it's params --- app/src/main/java/org/linphone/core/CoreContext.kt | 9 +++++++++ .../ui/main/viewmodel/AbstractMainViewModel.kt | 14 ++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index 1cd2500b8..e56136b06 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -82,6 +82,8 @@ class CoreContext private val mainThread = Handler(Looper.getMainLooper()) + var defaultAccountHasVideoConferenceFactoryUri: Boolean = false + var bearerAuthInfoPendingPasswordUpdate: AuthInfo? = null var digestAuthInfoPendingPasswordUpdate: AuthInfo? = null @@ -175,6 +177,11 @@ class CoreContext private var previousCallState = Call.State.Idle private val coreListener = object : CoreListenerStub() { + @WorkerThread + override fun onDefaultAccountChanged(core: Core, account: Account?) { + defaultAccountHasVideoConferenceFactoryUri = account?.params?.audioVideoConferenceFactoryAddress != null + } + @WorkerThread override fun onMessagesReceived( core: Core, @@ -512,6 +519,8 @@ class CoreContext core.isAutoIterateEnabled = true core.addListener(coreListener) + defaultAccountHasVideoConferenceFactoryUri = core.defaultAccount?.params?.audioVideoConferenceFactoryAddress != null + coreThread.postDelayed({ startCore() }, 50) Looper.loop() 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 1b3b82b5c..cfd562bb1 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 @@ -148,6 +148,10 @@ open class AbstractMainViewModel @WorkerThread override fun onDefaultAccountChanged(core: Core, defaultAccount: Account?) { + updateAvailableMenus() + computeUnreadMessagesCount() + updateMissedCallsCount() + account.value?.destroy() if (defaultAccount == null) { @@ -162,15 +166,14 @@ open class AbstractMainViewModel account.postValue(AccountModel(defaultAccount)) } - computeUnreadMessagesCount() - updateMissedCallsCount() - updateAvailableMenus() - defaultAccountChangedEvent.postValue(Event(true)) } } init { + // Pre-compute this value to prevent the menu being briefly visible + hideMeetings.value = !coreContext.defaultAccountHasVideoConferenceFactoryUri + coreContext.postOnCoreThread { core -> core.addListener(coreListener) configure() @@ -301,8 +304,7 @@ open class AbstractMainViewModel val conferencingAvailable = LinphoneUtils.isRemoteConferencingAvailable( coreContext.core ) - val hideGroupCall = - coreContext.core.accountList.isEmpty() || corePreferences.disableMeetings || !conferencingAvailable + val hideGroupCall = corePreferences.disableMeetings || !conferencingAvailable hideMeetings.postValue(hideGroupCall) }