diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/folder/TwoPaneFragment.kt b/app/src/main/java/com/infomaniak/mail/ui/main/folder/TwoPaneFragment.kt index e938b9c3fe..c281cb6aae 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/folder/TwoPaneFragment.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/folder/TwoPaneFragment.kt @@ -17,6 +17,7 @@ */ package com.infomaniak.mail.ui.main.folder +import android.content.res.Configuration import android.os.Bundle import android.view.View import androidx.fragment.app.Fragment @@ -30,6 +31,7 @@ import com.infomaniak.mail.MatomoMail.trackNewMessageEvent import com.infomaniak.mail.R import com.infomaniak.mail.data.cache.mailboxContent.FolderController import com.infomaniak.mail.data.models.thread.Thread +import com.infomaniak.mail.ui.MainActivity import com.infomaniak.mail.ui.MainViewModel import com.infomaniak.mail.ui.main.NoAnimSlidingPaneLayout import com.infomaniak.mail.ui.main.search.SearchFragment @@ -77,6 +79,11 @@ abstract class TwoPaneFragment : Fragment() { observeThreadNavigation() } + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + updateDrawerLockMode() + } + private fun setupSlidingPane() = with(slidingPaneLayout) { lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED addPanelSlideListener(object : SlidingPaneLayout.PanelSlideListener { @@ -121,7 +128,10 @@ abstract class TwoPaneFragment : Fragment() { val isOpeningThread = threadUid != null if (isOpeningThread) { val hasOpened = slidingPaneLayout.openPaneNoAnimation() - if (hasOpened) setSystemBarsColors(statusBarColor = R.color.backgroundColor, navigationBarColor = null) + if (hasOpened) { + updateDrawerLockMode() + setSystemBarsColors(statusBarColor = R.color.backgroundColor, navigationBarColor = null) + } } else { resetPanes() } @@ -160,6 +170,7 @@ abstract class TwoPaneFragment : Fragment() { private fun resetPanes() { val hasClosed = slidingPaneLayout.closePaneNoAnimation() + updateDrawerLockMode() if (hasClosed) { setSystemBarsColors( @@ -172,4 +183,13 @@ abstract class TwoPaneFragment : Fragment() { childFragmentManager.beginTransaction().replace(R.id.threadHostFragment, ThreadFragment()).commit() } + + // TODO: When we'll add the feature of swiping between Threads, we'll need to check if this function is still needed. + private fun updateDrawerLockMode() { + if (this is ThreadListFragment) { + (requireActivity() as MainActivity).setDrawerLockMode( + isLocked = twoPaneViewModel.isInThreadInPhoneMode(requireContext()), + ) + } + } } diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/folder/TwoPaneViewModel.kt b/app/src/main/java/com/infomaniak/mail/ui/main/folder/TwoPaneViewModel.kt index 6ed72a541c..c72f72c8c0 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/folder/TwoPaneViewModel.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/folder/TwoPaneViewModel.kt @@ -32,7 +32,7 @@ import com.infomaniak.mail.data.models.message.Message import com.infomaniak.mail.data.models.thread.Thread import com.infomaniak.mail.ui.newMessage.NewMessageActivityArgs import com.infomaniak.mail.utils.Utils.runCatchingRealm -import com.infomaniak.mail.utils.canDisplayBothPanes +import com.infomaniak.mail.utils.canDisplayOnlyOnePane import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @@ -94,7 +94,7 @@ class TwoPaneViewModel @Inject constructor( ) } - fun isInThreadInPhoneMode(context: Context): Boolean = isThreadOpen && !context.canDisplayBothPanes() + fun isInThreadInPhoneMode(context: Context): Boolean = isThreadOpen && context.canDisplayOnlyOnePane() data class NavData( @IdRes val resId: Int, diff --git a/app/src/main/java/com/infomaniak/mail/utils/Extensions.kt b/app/src/main/java/com/infomaniak/mail/utils/Extensions.kt index a4701d0d20..ddd2f34da2 100644 --- a/app/src/main/java/com/infomaniak/mail/utils/Extensions.kt +++ b/app/src/main/java/com/infomaniak/mail/utils/Extensions.kt @@ -159,8 +159,10 @@ fun Date.isLastWeek(): Boolean { //region UI fun Context.isInPortrait(): Boolean = resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT -fun Fragment.canDisplayBothPanes(): Boolean = requireContext().canDisplayBothPanes() fun Context.canDisplayBothPanes(): Boolean = resources.getBoolean(R.bool.canDisplayBothPanes) +fun Fragment.canDisplayBothPanes(): Boolean = requireContext().canDisplayBothPanes() +fun Context.canDisplayOnlyOnePane(): Boolean = !canDisplayBothPanes() +fun Fragment.canDisplayOnlyOnePane(): Boolean = requireContext().canDisplayOnlyOnePane() fun View.toggleChevron( isCollapsed: Boolean,