Skip to content

Commit

Permalink
Simplify auto advance
Browse files Browse the repository at this point in the history
  • Loading branch information
NicolasBourdin88 committed May 6, 2024
1 parent 5bcc2e6 commit ae287ff
Show file tree
Hide file tree
Showing 7 changed files with 118 additions and 150 deletions.
158 changes: 79 additions & 79 deletions .idea/navEditor.xml

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@ class ThreadController @Inject constructor(
return getThreadQuery(uid, mailboxContentRealm()).asFlow()
}

fun getMessageCountInThreadForFolder(threadUid: String, folderId : String) : Int{
return getThreadQuery(threadUid, mailboxContentRealm()).find()?.messages?.query("${Message::folderId.name} == $0", folderId)?.count()
?.find()?.toInt() ?: -1
}

/**
* Initialize and retrieve the search Threads obtained from the API.
* - Format the remote threads to make them compatible with the existing logic.
Expand Down
37 changes: 16 additions & 21 deletions app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -442,21 +442,20 @@ class MainViewModel @Inject constructor(

//region Delete
fun deleteMessage(threadUid: String, message: Message) {
if (shouldWeDeleteOrAchieveThread(threadUid))
threadUidToDeleteOrArchive.postValue(listOf(threadUid))

deleteThreadsOrMessage(threadsUids = listOf(threadUid), message = message)
val threadUidsList = listOf(threadUid)
if (isMessageTheLastInFolder(threadUid)) threadUidToDeleteOrArchive.postValue(threadUidsList)
deleteThreadsOrMessage(threadsUids = threadUidsList, message = message)
}

fun deleteThread(threadUid: String, isSwipe: Boolean = false) {
val threadUidList = listOf(threadUid)
deleteThreadsOrMessage(threadsUids = threadUidList, isSwipe = isSwipe)
threadUidToDeleteOrArchive.postValue(threadUidList)
deleteThreadsOrMessage(threadsUids = threadUidList, isSwipe = isSwipe)
}

fun deleteThreads(threadsUids: List<String>) {
deleteThreadsOrMessage(threadsUids = threadsUids)
threadUidToDeleteOrArchive.postValue(threadsUids)
deleteThreadsOrMessage(threadsUids = threadsUids)
}

private fun deleteThreadsOrMessage(
Expand Down Expand Up @@ -618,16 +617,14 @@ class MainViewModel @Inject constructor(

//region Archive
fun archiveMessage(threadUid: String, message: Message) {
if (shouldWeDeleteOrAchieveThread(threadUid))
threadUidToDeleteOrArchive.postValue(listOf(threadUid))

archiveThreadsOrMessage(threadsUids = listOf(threadUid), message = message)
val threadUidsList = listOf(threadUid)
if (isMessageTheLastInFolder(threadUid)) threadUidToDeleteOrArchive.postValue(threadUidsList)
archiveThreadsOrMessage(threadsUids = threadUidsList, message = message)
}

fun archiveThread(threadUid: String) {
val threadUidsList = listOf(threadUid)
if (shouldWeDeleteOrAchieveThread(threadUid)) threadUidToDeleteOrArchive.postValue(threadUidsList)

threadUidToDeleteOrArchive.postValue(threadUidsList)
archiveThreadsOrMessage(threadsUids = threadUidsList)
}

Expand Down Expand Up @@ -1058,18 +1055,16 @@ class MainViewModel @Inject constructor(

snackbarManager.postValue(appContext.getString(snackbarTitleRes))
}
private fun shouldWeDeleteOrAchieveThread(threadUid: String): Boolean {
var howMuchMessageInFolder = 0
threadController.getThread(threadUid)?.messages?.forEach {
if (it.folderId == currentFolderId)
howMuchMessageInFolder++

if (howMuchMessageInFolder > 1)
return false
private fun isMessageTheLastInFolder(threadUid: String): Boolean {
currentFolderId?.let { folderId ->
if (threadController.getMessageCountInThreadForFolder(threadUid, folderId) == 1) {
return true
}
}

return true
return false
}

companion object {
private val TAG: String = MainViewModel::class.java.simpleName
private val DEFAULT_SELECTED_FOLDER = FolderRole.INBOX
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ class SnackbarManager @Inject constructor() {
val buttonTitle = buttonTitleRes ?: RCore.string.buttonCancel

previousSnackbar?.dismiss()

previousSnackbar = showSnackbar(
view = view,
title = title,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,8 +160,8 @@ class ThreadListAdapter @Inject constructor(
}

override fun onBindViewHolder(holder: ThreadListViewHolder, position: Int, payloads: MutableList<Any>) = runCatchingRealm {
val payload = payloads.firstOrNull()

val payload = payloads.firstOrNull()
if (payload !is NotificationType) {
super.onBindViewHolder(holder, position, payloads)
return@runCatchingRealm
Expand Down Expand Up @@ -321,21 +321,21 @@ class ThreadListAdapter @Inject constructor(

fun openThreadByPosition(autoAdvanceMode: AutoAdvanceMode, threadDeleteUid: List<String>) {
if (threadDeleteUid.contains(openedThreadUid)) {
val thread: Thread? = openedThreadPosition?.let {
println("here start openedThread")
val nextThreadData: Pair<Thread, Int>? = openedThreadPosition?.let {
getNextThreadToOpenByPosition(it, autoAdvanceMode)
}

thread?.let {
if (thread.uid != openedThreadUid && !thread.isOnlyOneDraft) selectNewThread(openedThreadPosition, thread.uid)
onThreadClicked?.invoke(it)
nextThreadData?.let { (nextThread, indexNextThread) ->
if (nextThread.uid != openedThreadUid && !nextThread.isOnlyOneDraft) {
selectNewThread(newPosition = indexNextThread, nextThread.uid)
}

onThreadClicked?.invoke(nextThread)
}
} else {
println("don't contains")
}
}

private fun getNextThreadToOpenByPosition(startingThreadIndex: Int, autoAdvanceMode: AutoAdvanceMode): Thread? {
private fun getNextThreadToOpenByPosition(startingThreadIndex: Int, autoAdvanceMode: AutoAdvanceMode): Pair<Thread, Int>? {
return when (autoAdvanceMode) {
AutoAdvanceMode.PREVIOUS_THREAD -> getNextThread(startingThreadIndex, direction = PREVIOUS_CHRONOLOGICAL_THREAD)
AutoAdvanceMode.FOLLOWING_THREAD -> getNextThread(startingThreadIndex, direction = NEXT_CHRONOLOGICAL_THREAD)
Expand All @@ -350,18 +350,13 @@ class ThreadListAdapter @Inject constructor(
}
}

private fun getNextThread(startingThreadIndex: Int, direction: Int): Thread? {
println("start")
private fun getNextThread(startingThreadIndex: Int, direction: Int): Pair<Thread, Int>? {
var currentIndexThread = startingThreadIndex
currentIndexThread += direction
println("second start $currentIndexThread")
while (currentIndexThread >= 0 && currentIndexThread <= dataSet.lastIndex) {
println("here $currentIndexThread")
if (dataSet[currentIndexThread] is Thread) {
println("found")
println("folder ${dataSet[currentIndexThread]}")
val thread = dataSet[currentIndexThread] as Thread
return dataSet[currentIndexThread] as Thread
return thread to currentIndexThread
}

currentIndexThread += direction
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ class ThreadListFragment : TwoPaneFragment(), SwipeRefreshLayout.OnRefreshListen
observeFlushFolderTrigger()
observeUpdateInstall()
observeLoadMoreTriggers()
observeArchiveOrDelete()
}.getOrDefault(Unit)

@ColorRes
Expand Down Expand Up @@ -419,10 +420,6 @@ class ThreadListFragment : TwoPaneFragment(), SwipeRefreshLayout.OnRefreshListen
return shouldKeepItem
}
}

mainViewModel.threadUidToDeleteOrArchive.observe(viewLifecycleOwner) {
threadListAdapter.openThreadByPosition(localSettings.autoAdvanceMode, it)
}
}

/**
Expand Down Expand Up @@ -636,6 +633,12 @@ class ThreadListFragment : TwoPaneFragment(), SwipeRefreshLayout.OnRefreshListen
}
}

private fun observeArchiveOrDelete() {
mainViewModel.threadUidToDeleteOrArchive.observe(viewLifecycleOwner) {
threadListAdapter.openThreadByPosition(localSettings.autoAdvanceMode, it)
}
}

private fun checkLastUpdateDay() {
if (lastUpdatedDate?.isToday() == false) mainViewModel.forceTriggerCurrentFolder()
}
Expand Down
29 changes: 0 additions & 29 deletions app/src/main/res/navigation/main_navigation.xml
Original file line number Diff line number Diff line change
Expand Up @@ -322,35 +322,6 @@
android:name="com.infomaniak.mail.ui.main.settings.AutoAdvanceSettingsFragment"
android:label="AutoAdvanceSettingFragment"
tools:layout="@layout/fragment_auto_advance_settings" />
<fragment
android:id="@+id/threadListDensitySettingFragment"
android:name="com.infomaniak.mail.ui.main.settings.ThreadListDensitySettingFragment"
android:label="ListDensitySettingFragment"
tools:layout="@layout/fragment_thread_list_density_setting" />

<fragment
android:id="@+id/themeSettingFragment"
android:name="com.infomaniak.mail.ui.main.settings.ThemeSettingFragment"
android:label="ThemeSettingFragment"
tools:layout="@layout/fragment_theme_setting" />

<fragment
android:id="@+id/accentColorSettingFragment"
android:name="com.infomaniak.mail.ui.main.settings.AccentColorSettingFragment"
android:label="AccentColorSettingFragment"
tools:layout="@layout/fragment_accent_color_setting" />

<fragment
android:id="@+id/threadModeSettingFragment"
android:name="com.infomaniak.mail.ui.main.settings.ThreadModeSettingFragment"
android:label="ThreadModeSettingFragment"
tools:layout="@layout/fragment_thread_mode_setting" />

<fragment
android:id="@+id/externalContentSettingFragment"
android:name="com.infomaniak.mail.ui.main.settings.ExternalContentSettingFragment"
android:label="ExternalContentSettingFragment"
tools:layout="@layout/fragment_external_content_setting" />

<fragment
android:id="@+id/mailboxSettingsFragment"
Expand Down

0 comments on commit ae287ff

Please sign in to comment.