From 7ba19364b929a0b8c24b025eb5d2db67f29a3d3a Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 26 Feb 2024 15:58:15 +0100 Subject: [PATCH] Improved parsing of account settings + navigate out of resuming fragment if no longer available due to config changes --- .../main/chat/fragment/ConversationsListFragment.kt | 7 +++++++ .../ui/main/fragment/AbstractTopBarFragment.kt | 6 ++++++ .../main/meetings/fragment/MeetingsListFragment.kt | 12 ++++++++++++ .../settings/fragment/AccountSettingsFragment.kt | 3 +++ .../settings/viewmodel/AccountSettingsViewModel.kt | 13 +++++++------ .../ui/main/viewmodel/SharedMainViewModel.kt | 4 ++++ 6 files changed, 39 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt index add88f337..9d51256c7 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt @@ -309,6 +309,13 @@ class ConversationsListFragment : AbstractTopBarFragment() { override fun onResume() { super.onResume() + if (listViewModel.hideMeetings.value == true) { + Log.w( + "$TAG Resuming fragment that should no longer be accessible, going to contacts list instead" + ) + sharedViewModel.navigateToContactsEvent.value = Event(true) + } + try { adapter.registerAdapterDataObserver(dataObserver) } catch (e: IllegalStateException) { diff --git a/app/src/main/java/org/linphone/ui/main/fragment/AbstractTopBarFragment.kt b/app/src/main/java/org/linphone/ui/main/fragment/AbstractTopBarFragment.kt index f2b4446fa..91932676d 100644 --- a/app/src/main/java/org/linphone/ui/main/fragment/AbstractTopBarFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/fragment/AbstractTopBarFragment.kt @@ -167,6 +167,12 @@ abstract class AbstractTopBarFragment : GenericFragment() { viewModel.resetMissedCallsCount() } } + + sharedViewModel.forceUpdateAvailableNavigationItems.observe(viewLifecycleOwner) { + it.consume { + viewModel.updateAvailableMenus() + } + } } fun initBottomNavBar(navBar: View) { diff --git a/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt b/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt index 0f7614fe5..ca14b18fe 100644 --- a/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt @@ -39,6 +39,7 @@ import org.linphone.ui.main.fragment.AbstractTopBarFragment import org.linphone.ui.main.meetings.adapter.MeetingsListAdapter import org.linphone.ui.main.meetings.viewmodel.MeetingsListViewModel import org.linphone.utils.AppUtils +import org.linphone.utils.Event import org.linphone.utils.RecyclerViewHeaderDecoration @UiThread @@ -219,6 +220,17 @@ class MeetingsListFragment : AbstractTopBarFragment() { bottomSheetDialog = null } + override fun onResume() { + super.onResume() + + if (listViewModel.hideMeetings.value == true) { + Log.w( + "$TAG Resuming fragment that should no longer be accessible, going to contacts list instead" + ) + sharedViewModel.navigateToContactsEvent.value = Event(true) + } + } + private fun scrollToToday() { val todayMeeting = listViewModel.meetings.value.orEmpty().find { it.isToday diff --git a/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountSettingsFragment.kt b/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountSettingsFragment.kt index 0b8eb0c61..cb91928c9 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountSettingsFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountSettingsFragment.kt @@ -18,6 +18,7 @@ import org.linphone.core.tools.Log import org.linphone.databinding.AccountSettingsFragmentBinding import org.linphone.ui.main.fragment.GenericFragment import org.linphone.ui.main.settings.viewmodel.AccountSettingsViewModel +import org.linphone.utils.Event @UiThread class AccountSettingsFragment : GenericFragment() { @@ -113,5 +114,7 @@ class AccountSettingsFragment : GenericFragment() { super.onPause() viewModel.saveChanges() + // It is possible some value have changed, causing some menu to appear or disappear + sharedViewModel.forceUpdateAvailableNavigationItems.value = Event(true) } } diff --git a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountSettingsViewModel.kt b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountSettingsViewModel.kt index 989a6fa49..128bbc244 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountSettingsViewModel.kt @@ -26,7 +26,6 @@ import java.util.Locale import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.core.AVPFMode import org.linphone.core.Account -import org.linphone.core.Factory import org.linphone.core.NatPolicy import org.linphone.core.TransportType import org.linphone.core.tools.Log @@ -122,7 +121,7 @@ class AccountSettingsViewModel @UiThread constructor() : ViewModel() { val server = sipProxyServer.value.orEmpty() if (server.isNotEmpty()) { - val serverAddress = Factory.instance().createAddress(server) + val serverAddress = core.interpretUrl(server, false) if (serverAddress != null) { serverAddress.transport = selectedTransport.value newParams.serverAddress = serverAddress @@ -142,13 +141,15 @@ class AccountSettingsViewModel @UiThread constructor() : ViewModel() { newParams.expires = expire.value?.toInt() ?: 31536000 - val conferenceFactoryAddress = Factory.instance().createAddress( - conferenceFactoryUri.value.orEmpty() + val conferenceFactoryAddress = core.interpretUrl( + conferenceFactoryUri.value.orEmpty(), + false ) newParams.conferenceFactoryAddress = conferenceFactoryAddress - val audioVideoConferenceFactoryAddress = Factory.instance().createAddress( - audioVideoConferenceFactoryUri.value.orEmpty() + val audioVideoConferenceFactoryAddress = core.interpretUrl( + audioVideoConferenceFactoryUri.value.orEmpty(), + false ) newParams.audioVideoConferenceFactoryAddress = audioVideoConferenceFactoryAddress diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt index 99dd7e4c2..7dbf89af4 100644 --- a/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt @@ -69,6 +69,10 @@ class SharedMainViewModel @UiThread constructor() : ViewModel() { MutableLiveData>() } + val forceUpdateAvailableNavigationItems: MutableLiveData> by lazy { + MutableLiveData>() + } + /* Contacts related */ val showContactEvent: MutableLiveData> by lazy {