Fixed account settings sliding pane not opened when clicking on account in side menu

This commit is contained in:
Sylvain Berfini 2021-10-11 10:40:54 +02:00
parent 7c73d1e535
commit 38e230ff3f
4 changed files with 23 additions and 7 deletions

View file

@ -533,10 +533,7 @@ internal fun DetailCallLogFragment.navigateToEmptyCallHistory() {
/* Settings related */ /* Settings related */
internal fun SettingsFragment.navigateToAccountSettings( internal fun SettingsFragment.navigateToAccountSettings(identity: String) {
identity: String,
slidingPane: SlidingPaneLayout
) {
if (findNavController().currentDestination?.id == R.id.settingsFragment) { if (findNavController().currentDestination?.id == R.id.settingsFragment) {
val bundle = bundleOf("Identity" to identity) val bundle = bundleOf("Identity" to identity)
val navHostFragment = val navHostFragment =
@ -546,7 +543,6 @@ internal fun SettingsFragment.navigateToAccountSettings(
bundle, bundle,
popupTo(R.id.accountSettingsFragment, true) popupTo(R.id.accountSettingsFragment, true)
) )
if (!slidingPane.isOpen) slidingPane.openPane()
} }
} }

View file

@ -21,6 +21,7 @@ package org.linphone.activities.main.settings.fragments
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.view.doOnPreDraw
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModel import org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModel
@ -90,6 +91,11 @@ class AccountSettingsFragment : GenericSettingFragment<SettingsAccountFragmentBi
} }
} }
) )
view.doOnPreDraw {
// Notifies fragment is ready to be drawn
sharedViewModel.accountSettingsFragmentOpenedEvent.value = Event(true)
}
} }
override fun goBack() { override fun goBack() {

View file

@ -67,6 +67,16 @@ class SettingsFragment : SecureFragment<SettingsFragmentBinding>() {
view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable } 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( sharedViewModel.closeSlidingPaneEvent.observe(
viewLifecycleOwner, viewLifecycleOwner,
{ {
@ -113,13 +123,13 @@ class SettingsFragment : SecureFragment<SettingsFragmentBinding>() {
if (identity != null) { if (identity != null) {
Log.i("[Settings] Found identity parameter in arguments: $identity") Log.i("[Settings] Found identity parameter in arguments: $identity")
arguments?.clear() arguments?.clear()
navigateToAccountSettings(identity, binding.slidingPane) navigateToAccountSettings(identity)
} }
viewModel.accountsSettingsListener = object : SettingListenerStub() { viewModel.accountsSettingsListener = object : SettingListenerStub() {
override fun onAccountClicked(identity: String) { override fun onAccountClicked(identity: String) {
Log.i("[Settings] Navigation to settings for account with identity: $identity") Log.i("[Settings] Navigation to settings for account with identity: $identity")
navigateToAccountSettings(identity, binding.slidingPane) navigateToAccountSettings(identity)
} }
} }

View file

@ -87,6 +87,10 @@ class SharedMainViewModel : ViewModel() {
val accountRemoved = MutableLiveData<Boolean>() val accountRemoved = MutableLiveData<Boolean>()
val accountSettingsFragmentOpenedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
}
/* Call */ /* Call */
var pendingCallTransfer: Boolean = false var pendingCallTransfer: Boolean = false