diff --git a/app/src/main/java/com/infomaniak/mail/data/models/message/Message.kt b/app/src/main/java/com/infomaniak/mail/data/models/message/Message.kt index 5f38b0830b..e1a73b9049 100644 --- a/app/src/main/java/com/infomaniak/mail/data/models/message/Message.kt +++ b/app/src/main/java/com/infomaniak/mail/data/models/message/Message.kt @@ -31,7 +31,7 @@ import com.infomaniak.mail.data.models.correspondent.Recipient import com.infomaniak.mail.data.models.getMessages.ActivitiesResult.MessageFlags import com.infomaniak.mail.data.models.thread.Thread import com.infomaniak.mail.utils.AccountUtils -import com.infomaniak.mail.utils.MessageBodyUtils +import com.infomaniak.mail.utils.MessageBodyUtils.SplitBody import com.infomaniak.mail.utils.extensions.toRealmInstant import com.infomaniak.mail.utils.extensions.toShortUid import io.realm.kotlin.ext.* @@ -143,7 +143,7 @@ class Message : RealmObject { // correctly, as the relationship between Body and Message relies on a Realm query. @Transient @Ignore - var splitBody: MessageBodyUtils.SplitBody? = null + var splitBody: SplitBody? = null @Transient @Ignore var shouldHideDivider: Boolean = false diff --git a/app/src/main/java/com/infomaniak/mail/ui/MainActivity.kt b/app/src/main/java/com/infomaniak/mail/ui/MainActivity.kt index d509f43dfa..8495f1b1c8 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/MainActivity.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/MainActivity.kt @@ -103,7 +103,7 @@ class MainActivity : BaseActivity() { } private val showSendingSnackbarTimer: CountDownTimer by lazy { - Utils.createRefreshTimer(1_000L) { snackbarManager.setValue(getString(R.string.snackbarEmailSending)) } + Utils.createRefreshTimer(milliseconds = 1_000L) { snackbarManager.setValue(getString(R.string.snackbarEmailSending)) } } private val newMessageActivityResultLauncher = registerForActivityResult(StartActivityForResult()) { result -> 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 a3a48f1919..eeb9b3a64e 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 @@ -191,7 +191,7 @@ class ThreadListFragment : TwoPaneFragment(), SwipeRefreshLayout.OnRefreshListen } // If we are coming from a Notification, we need to navigate to ThreadFragment. - openThreadAndResetBackup(threadUid) + openThreadAndResetItsState(threadUid) } } 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 c762055203..fe07289bdc 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 @@ -138,12 +138,12 @@ abstract class TwoPaneFragment : Fragment() { trackNewMessageEvent(OPEN_FROM_DRAFT_NAME) twoPaneViewModel.openDraft(thread) } else { - openThreadAndResetBackup(thread.uid) + openThreadAndResetItsState(thread.uid) } } - fun openThreadAndResetBackup(threadUid: String) { - getRightPane()?.getFragment()?.resetThreadBackupCache() + fun openThreadAndResetItsState(threadUid: String) { + getRightPane()?.getFragment()?.resetThreadState() twoPaneViewModel.openThread(threadUid) } diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadAdapter.kt b/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadAdapter.kt index 2578eba43a..8106b1c721 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadAdapter.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadAdapter.kt @@ -204,6 +204,7 @@ class ThreadAdapter( } private fun MessageViewHolder.bindCalendarEvent(message: Message) { + val calendarAttachment = message.calendarAttachment ?: return val calendarEvent = message.latestCalendarEventResponse?.calendarEvent diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadFragment.kt b/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadFragment.kt index 25766a9434..30cfe84773 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadFragment.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadFragment.kt @@ -163,8 +163,11 @@ class ThreadFragment : Fragment() { _binding = null } - fun resetThreadBackupCache() { - threadViewModel.resetThreadBackupCache() + fun resetThreadState() = with(threadViewModel) { + isExpandedMap = mutableMapOf() + isThemeTheSameMap = mutableMapOf() + hasSuperCollapsedBlockBeenClicked = false + verticalScroll = null } private fun setupUi() = with(binding) { @@ -205,11 +208,11 @@ class ThreadFragment : Fragment() { } } - private fun setupAdapter() = with(binding.messagesList) { + private fun setupAdapter() = with(threadViewModel) { - adapter = ThreadAdapter( + binding.messagesList.adapter = ThreadAdapter( shouldLoadDistantResources = shouldLoadDistantResources(), - isCalendarEventExpandedMap = threadViewModel.isCalendarEventExpandedMap, + isCalendarEventExpandedMap = isCalendarEventExpandedMap, threadAdapterState = object : ThreadAdapterState { override var isExpandedMap by threadViewModel::isExpandedMap override var isThemeTheSameMap by threadViewModel::isThemeTheSameMap @@ -234,7 +237,7 @@ class ThreadFragment : Fragment() { }, onDeleteDraftClicked = { message -> trackMessageActionsEvent("deleteDraft") - mainViewModel.currentMailbox.value?.let { mailbox -> threadViewModel.deleteDraft(message, mailbox) } + mainViewModel.currentMailbox.value?.let { mailbox -> deleteDraft(message, mailbox) } }, onAttachmentClicked = { trackAttachmentActionsEvent("open") @@ -276,13 +279,13 @@ class ThreadFragment : Fragment() { navigateToDownloadProgressDialog(attachment, attachmentIntentType, ThreadFragment::class.java.name) }, replyToCalendarEvent = { attendanceState, message -> - threadViewModel.replyToCalendarEvent( + replyToCalendarEvent( attendanceState, message, ).observe(viewLifecycleOwner) { successfullyUpdated -> if (successfullyUpdated) { snackbarManager.setValue(getString(R.string.snackbarCalendarChoiceSent)) - threadViewModel.fetchCalendarEvents(listOf(message), forceFetch = true) + fetchCalendarEvents(listOf(message), forceFetch = true) } else { snackbarManager.setValue(getString(R.string.errorCalendarChoiceCouldNotBeSent)) threadAdapter.undoUserAttendanceClick(message) @@ -307,14 +310,14 @@ class ThreadFragment : Fragment() { ), ) - addItemDecoration( + binding.messagesList.addItemDecoration( DividerItemDecorator( divider = InsetDrawable(dividerDrawable(context), 0), shouldIgnoreView = { view -> view.tag == ThreadAdapter.IGNORE_DIVIDER_TAG }, ), ) - recycledViewPool.setMaxRecycledViews(0, 0) + binding.messagesList.recycledViewPool.setMaxRecycledViews(0, 0) threadAdapter.stateRestorationPolicy = StateRestorationPolicy.PREVENT_WHEN_EMPTY } diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadViewModel.kt b/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadViewModel.kt index 2aba25cfd3..9c0fbde0ff 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadViewModel.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadViewModel.kt @@ -107,13 +107,6 @@ class ThreadViewModel @Inject constructor( AccountUtils.currentMailboxId, ).map { it.obj }.asLiveData(ioCoroutineContext) - fun resetThreadBackupCache() { - isExpandedMap = mutableMapOf() - isThemeTheSameMap = mutableMapOf() - hasSuperCollapsedBlockBeenClicked = false - verticalScroll = null - } - fun resetMessagesRelatedCache() { treatedMessagesForCalendarEvent.clear() isCalendarEventExpandedMap.clear() diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/thread/calendar/AttendeesBottomSheetDialog.kt b/app/src/main/java/com/infomaniak/mail/ui/main/thread/calendar/AttendeesBottomSheetDialog.kt index 0fe27359f2..bc50f82b0d 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/thread/calendar/AttendeesBottomSheetDialog.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/thread/calendar/AttendeesBottomSheetDialog.kt @@ -26,7 +26,6 @@ import androidx.navigation.fragment.navArgs import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.infomaniak.lib.core.utils.context import com.infomaniak.lib.core.utils.safeBinding -import com.infomaniak.lib.core.utils.toPx import com.infomaniak.lib.core.views.DividerItemDecorator import com.infomaniak.mail.R import com.infomaniak.mail.databinding.BottomSheetAttendeesBinding diff --git a/app/src/main/java/com/infomaniak/mail/utils/SharedUtils.kt b/app/src/main/java/com/infomaniak/mail/utils/SharedUtils.kt index b37280bb67..6d5524fad6 100644 --- a/app/src/main/java/com/infomaniak/mail/utils/SharedUtils.kt +++ b/app/src/main/java/com/infomaniak/mail/utils/SharedUtils.kt @@ -59,8 +59,7 @@ class SharedUtils @Inject constructor( * @param mailbox The Mailbox where the Threads & Messages are located * @param threads The Threads to mark as read * @param message The Message to mark as read - * @param started The callback for when the refresh of Threads starts - * @param stopped The callback for when the refresh of Threads ends + * @param callbacks The callbacks for when the refresh of Threads begins/ends * @param shouldRefreshThreads Sometimes, we don't want to refresh Threads after doing this action. For example, when replying to a Message. */ suspend fun markAsSeen(