From 38e230ff3f1ff6eb15c53915064a53e986e8c87f Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 11 Oct 2021 10:40:54 +0200 Subject: [PATCH] Fixed account settings sliding pane not opened when clicking on account in side menu --- .../java/org/linphone/activities/Navigation.kt | 6 +----- .../settings/fragments/AccountSettingsFragment.kt | 6 ++++++ .../main/settings/fragments/SettingsFragment.kt | 14 ++++++++++++-- .../main/viewmodels/SharedMainViewModel.kt | 4 ++++ 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/Navigation.kt b/app/src/main/java/org/linphone/activities/Navigation.kt index 5573a69a3..f035ce2eb 100644 --- a/app/src/main/java/org/linphone/activities/Navigation.kt +++ b/app/src/main/java/org/linphone/activities/Navigation.kt @@ -533,10 +533,7 @@ internal fun DetailCallLogFragment.navigateToEmptyCallHistory() { /* Settings related */ -internal fun SettingsFragment.navigateToAccountSettings( - identity: String, - slidingPane: SlidingPaneLayout -) { +internal fun SettingsFragment.navigateToAccountSettings(identity: String) { if (findNavController().currentDestination?.id == R.id.settingsFragment) { val bundle = bundleOf("Identity" to identity) val navHostFragment = @@ -546,7 +543,6 @@ internal fun SettingsFragment.navigateToAccountSettings( bundle, popupTo(R.id.accountSettingsFragment, true) ) - if (!slidingPane.isOpen) slidingPane.openPane() } } diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt index 5dfa820f7..1485cf263 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt @@ -21,6 +21,7 @@ package org.linphone.activities.main.settings.fragments import android.os.Bundle import android.view.View +import androidx.core.view.doOnPreDraw import androidx.lifecycle.ViewModelProvider import org.linphone.R import org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModel @@ -90,6 +91,11 @@ class AccountSettingsFragment : GenericSettingFragment() { view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable } + // Account settings loading can take some time, so wait until it is ready before opening the pane + sharedViewModel.accountSettingsFragmentOpenedEvent.observe( + viewLifecycleOwner, + { + it.consume { + binding.slidingPane.openPane() + } + } + ) + sharedViewModel.closeSlidingPaneEvent.observe( viewLifecycleOwner, { @@ -113,13 +123,13 @@ class SettingsFragment : SecureFragment() { if (identity != null) { Log.i("[Settings] Found identity parameter in arguments: $identity") arguments?.clear() - navigateToAccountSettings(identity, binding.slidingPane) + navigateToAccountSettings(identity) } viewModel.accountsSettingsListener = object : SettingListenerStub() { override fun onAccountClicked(identity: String) { Log.i("[Settings] Navigation to settings for account with identity: $identity") - navigateToAccountSettings(identity, binding.slidingPane) + navigateToAccountSettings(identity) } } diff --git a/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt b/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt index 762d39d2f..bcd29007d 100644 --- a/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt @@ -87,6 +87,10 @@ class SharedMainViewModel : ViewModel() { val accountRemoved = MutableLiveData() + val accountSettingsFragmentOpenedEvent: MutableLiveData> by lazy { + MutableLiveData>() + } + /* Call */ var pendingCallTransfer: Boolean = false