diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt b/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt index fb6eec93467..9ab8f6c46cc 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt @@ -92,6 +92,8 @@ class ThreadListAdapter @Inject constructor( private var onFlushClicked: ((dialogTitle: String) -> Unit)? = null private var onLoadMoreClicked: (() -> Unit)? = null + private var onPositionClickedChanged: ((position: Int, previousPosition: Int) -> Unit)? = null + private var folderRole: FolderRole? = null private var onSwipeFinished: (() -> Unit)? = null private var multiSelection: MultiSelectionListener? = null @@ -119,6 +121,7 @@ class ThreadListAdapter @Inject constructor( onThreadClicked: ((thread: Thread) -> Unit), onFlushClicked: ((dialogTitle: String) -> Unit)? = null, onLoadMoreClicked: (() -> Unit)? = null, + onPositionClickedChanged: ((position: Int, previousPosition: Int) -> Unit)? = null, ) { this.folderRole = folderRole this.onSwipeFinished = onSwipeFinished @@ -127,6 +130,7 @@ class ThreadListAdapter @Inject constructor( this.onThreadClicked = onThreadClicked this.onFlushClicked = onFlushClicked this.onLoadMoreClicked = onLoadMoreClicked + this.onPositionClickedChanged = onPositionClickedChanged } override fun onAttachedToRecyclerView(recyclerView: RecyclerView) { @@ -300,11 +304,10 @@ class ThreadListAdapter @Inject constructor( toggleMultiSelectedThread(thread) } else { previousThreadClickedPosition?.let { previousPosition -> - localSettings.autoAdvanceIntelligentMode = if (position > previousPosition) { - AutoAdvanceMode.FOLLOWING_THREAD - } else { - AutoAdvanceMode.PREVIOUS_THREAD - } + onPositionClickedChanged?.invoke( + position, + previousPosition + ) } previousThreadClickedPosition = position diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListFragment.kt b/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListFragment.kt index df28f4212fe..3d6327b5f74 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListFragment.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListFragment.kt @@ -55,7 +55,6 @@ import com.infomaniak.mail.MatomoMail.trackMultiSelectionEvent import com.infomaniak.mail.MatomoMail.trackNewMessageEvent import com.infomaniak.mail.MatomoMail.trackThreadListEvent import com.infomaniak.mail.R -import com.infomaniak.mail.data.LocalSettings import com.infomaniak.mail.data.LocalSettings.SwipeAction import com.infomaniak.mail.data.LocalSettings.ThreadDensity.COMPACT import com.infomaniak.mail.data.models.Folder @@ -104,9 +103,6 @@ class ThreadListFragment : TwoPaneFragment(), SwipeRefreshLayout.OnRefreshListen private var isFirstTimeRefreshingThreads = true - @Inject - lateinit var localSettings: LocalSettings - @Inject lateinit var notificationManagerCompat: NotificationManagerCompat @@ -320,6 +316,7 @@ class ThreadListFragment : TwoPaneFragment(), SwipeRefreshLayout.OnRefreshListen trackThreadListEvent("loadMore") mainViewModel.getOnePageOfOldMessages() }, + onPositionClickedChanged = ::changeNaturalAdvanceModeByPosition ) threadListAdapter.stateRestorationPolicy = StateRestorationPolicy.PREVENT_WHEN_EMPTY 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 fe07289bdcd..28ec94917c9 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 @@ -33,6 +33,7 @@ import com.infomaniak.lib.core.utils.safeNavigate import com.infomaniak.mail.MatomoMail.OPEN_FROM_DRAFT_NAME import com.infomaniak.mail.MatomoMail.trackNewMessageEvent import com.infomaniak.mail.R +import com.infomaniak.mail.data.LocalSettings import com.infomaniak.mail.data.cache.mailboxContent.FolderController import com.infomaniak.mail.data.models.thread.Thread import com.infomaniak.mail.ui.MainActivity @@ -53,6 +54,9 @@ abstract class TwoPaneFragment : Fragment() { @Inject lateinit var threadListAdapter: ThreadListAdapter + @Inject + lateinit var localSettings: LocalSettings + @ColorRes abstract fun getStatusBarColor(): Int abstract fun getLeftPane(): View? @@ -184,8 +188,7 @@ abstract class TwoPaneFragment : Fragment() { } } - private fun computeTwoPaneWidths(widthPixels: Int, isThreadOpen: Boolean): Pair = with(twoPaneViewModel) { - + private fun computeTwoPaneWidths(widthPixels: Int, isThreadOpen: Boolean): Pair { val leftPaneWidthRatio = ResourcesCompat.getFloat(resources, R.dimen.leftPaneWidthRatio) val rightPaneWidthRatio = ResourcesCompat.getFloat(resources, R.dimen.rightPaneWidthRatio) @@ -217,4 +220,12 @@ abstract class TwoPaneFragment : Fragment() { setSystemBarsColors(statusBarColor = statusBarColor, navigationBarColor = null) } + + protected fun changeNaturalAdvanceModeByPosition(currentPosition: Int, previousPosition: Int) { + localSettings.autoAdvanceIntelligentMode = if (currentPosition > previousPosition) { + LocalSettings.AutoAdvanceMode.FOLLOWING_THREAD + } else { + LocalSettings.AutoAdvanceMode.PREVIOUS_THREAD + } + } } diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/search/SearchFragment.kt b/app/src/main/java/com/infomaniak/mail/ui/main/search/SearchFragment.kt index 358eba1bc6b..6b42f0804c5 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/search/SearchFragment.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/search/SearchFragment.kt @@ -46,7 +46,6 @@ import com.infomaniak.mail.MatomoMail.SEARCH_DELETE_NAME import com.infomaniak.mail.MatomoMail.SEARCH_VALIDATE_NAME import com.infomaniak.mail.MatomoMail.trackSearchEvent import com.infomaniak.mail.R -import com.infomaniak.mail.data.LocalSettings import com.infomaniak.mail.data.models.Folder import com.infomaniak.mail.data.models.thread.Thread.ThreadFilter import com.infomaniak.mail.databinding.FragmentSearchBinding @@ -57,7 +56,6 @@ import com.infomaniak.mail.utils.RealmChangesBinding.Companion.bindResultsChange import com.infomaniak.mail.utils.Utils.Shortcuts import com.infomaniak.mail.utils.extensions.* import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject @AndroidEntryPoint class SearchFragment : TwoPaneFragment() { @@ -66,8 +64,6 @@ class SearchFragment : TwoPaneFragment() { private val binding get() = _binding!! // This property is only valid between onCreateView and onDestroyView private val searchViewModel: SearchViewModel by viewModels() - @Inject - lateinit var localSettings: LocalSettings private val showLoadingTimer: CountDownTimer by lazy { Utils.createRefreshTimer(onTimerFinish = ::showRefreshLayout) } @@ -160,6 +156,7 @@ class SearchFragment : TwoPaneFragment() { navigateToThread(thread) } }, + onPositionClickedChanged = ::changeNaturalAdvanceModeByPosition ) binding.mailRecyclerView.adapter = threadListAdapter.apply {