From 67a31cd5385ba1627fbb6982f86608b0d150290c Mon Sep 17 00:00:00 2001 From: Sol Rubado Date: Thu, 23 Apr 2026 15:10:19 +0200 Subject: [PATCH 1/4] feat: Make possible to report a thread or message as phishing from spam folder --- .../ui/main/thread/actions/MultiSelectBottomSheetDialog.kt | 1 + .../ui/main/thread/actions/ThreadActionsBottomSheetDialog.kt | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt index dc8d29ca007..53857247d72 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt @@ -254,6 +254,7 @@ class MultiSelectBottomSheetDialog : ActionsBottomSheetDialog() { } private fun observeReportPhishingResult() { + mainViewModel.isMultiSelectOn = false mainViewModel.reportPhishingTrigger.observe(viewLifecycleOwner) { descriptionDialog.resetLoadingAndDismiss() findNavController().popBackStack() diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/ThreadActionsBottomSheetDialog.kt b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/ThreadActionsBottomSheetDialog.kt index f0de8a2c661..f778eaa1999 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/ThreadActionsBottomSheetDialog.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/ThreadActionsBottomSheetDialog.kt @@ -133,6 +133,7 @@ class ThreadActionsBottomSheetDialog : MailActionsBottomSheetDialog() { } private fun observeReportPhishingResult() { + mainViewModel.isMultiSelectOn = false mainViewModel.reportPhishingTrigger.observe(viewLifecycleOwner) { descriptionDialog.resetLoadingAndDismiss() findNavController().popBackStack() @@ -334,7 +335,7 @@ class ThreadActionsBottomSheetDialog : MailActionsBottomSheetDialog() { isVisible = true } - phishing.isVisible = !isFromSpam + phishing.isVisible = true } fun setBlockUserUi(blockSender: ActionItemView, potentialUsersToBlock: Map, isFromSpam: Boolean) { From 32488571804eaebb196b6363b8db028e78f76a53 Mon Sep 17 00:00:00 2001 From: Sol Rubado Date: Thu, 23 Apr 2026 15:44:24 +0200 Subject: [PATCH 2/4] fix: Remove multi selection after phishing option was selected --- .../ui/main/thread/actions/MultiSelectBottomSheetDialog.kt | 3 ++- .../ui/main/thread/actions/ThreadActionsBottomSheetDialog.kt | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt index 53857247d72..b77abd11a00 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt @@ -157,6 +157,8 @@ class MultiSelectBottomSheetDialog : ActionsBottomSheetDialog() { description = resources.getQuantityString(R.plurals.reportPhishingDescription, messages.count()), onPositiveButtonClicked = { mainViewModel.reportPhishing(threadsUids, messages) }, ) + + mainViewModel.isMultiSelectOn = false } binding.blockSender.setClosingOnClickListener { @@ -254,7 +256,6 @@ class MultiSelectBottomSheetDialog : ActionsBottomSheetDialog() { } private fun observeReportPhishingResult() { - mainViewModel.isMultiSelectOn = false mainViewModel.reportPhishingTrigger.observe(viewLifecycleOwner) { descriptionDialog.resetLoadingAndDismiss() findNavController().popBackStack() diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/ThreadActionsBottomSheetDialog.kt b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/ThreadActionsBottomSheetDialog.kt index f778eaa1999..aa59acb506d 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/ThreadActionsBottomSheetDialog.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/ThreadActionsBottomSheetDialog.kt @@ -133,7 +133,6 @@ class ThreadActionsBottomSheetDialog : MailActionsBottomSheetDialog() { } private fun observeReportPhishingResult() { - mainViewModel.isMultiSelectOn = false mainViewModel.reportPhishingTrigger.observe(viewLifecycleOwner) { descriptionDialog.resetLoadingAndDismiss() findNavController().popBackStack() @@ -264,6 +263,8 @@ class ThreadActionsBottomSheetDialog : MailActionsBottomSheetDialog() { description = resources.getQuantityString(R.plurals.reportPhishingDescription, thread.messages.count()), onPositiveButtonClicked = { mainViewModel.reportPhishing(junkMessagesViewModel.threadsUids, junkMessages) }, ) + + mainViewModel.isMultiSelectOn = false } override fun onBlockSender() { From 67a864ebb506cd97f20387101d7f5a5ae63fdb7d Mon Sep 17 00:00:00 2001 From: Sol Rubado Date: Thu, 23 Apr 2026 16:02:00 +0200 Subject: [PATCH 3/4] fix: Remove unnecessary MainViewModel since its inside a with(MainViewModel) --- .../ui/main/thread/actions/MultiSelectBottomSheetDialog.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt index b77abd11a00..c1c77f98e4c 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt @@ -158,7 +158,7 @@ class MultiSelectBottomSheetDialog : ActionsBottomSheetDialog() { onPositiveButtonClicked = { mainViewModel.reportPhishing(threadsUids, messages) }, ) - mainViewModel.isMultiSelectOn = false + isMultiSelectOn = false } binding.blockSender.setClosingOnClickListener { @@ -180,7 +180,7 @@ class MultiSelectBottomSheetDialog : ActionsBottomSheetDialog() { junkMessagesViewModel.messageOfUserToBlock.value = message } } - mainViewModel.isMultiSelectOn = false + isMultiSelectOn = false } binding.favorite.setClosingOnClickListener(shouldCloseMultiSelection = true) { From 233a9d386f44a790b16e9ee98503de593b6e96e3 Mon Sep 17 00:00:00 2001 From: Sol Rubado Date: Fri, 24 Apr 2026 16:41:15 +0200 Subject: [PATCH 4/4] fix: Remove unnecessary phishing visibility change. --- .../main/thread/actions/MessageActionsBottomSheetDialog.kt | 4 ++-- .../ui/main/thread/actions/MultiSelectBottomSheetDialog.kt | 3 +-- .../main/thread/actions/ThreadActionsBottomSheetDialog.kt | 6 ++---- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MessageActionsBottomSheetDialog.kt b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MessageActionsBottomSheetDialog.kt index 689a0edee5c..28036ecdc70 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MessageActionsBottomSheetDialog.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MessageActionsBottomSheetDialog.kt @@ -43,7 +43,7 @@ import com.infomaniak.mail.ui.main.folderPicker.FolderPickerFragmentArgs import com.infomaniak.mail.ui.main.thread.PrintMailFragmentArgs import com.infomaniak.mail.ui.main.thread.ThreadFragment.Companion.OPEN_REACTION_BOTTOM_SHEET import com.infomaniak.mail.ui.main.thread.actions.ThreadActionsBottomSheetDialog.Companion.setBlockUserUi -import com.infomaniak.mail.ui.main.thread.actions.ThreadActionsBottomSheetDialog.Companion.setSpamPhishingUi +import com.infomaniak.mail.ui.main.thread.actions.ThreadActionsBottomSheetDialog.Companion.setSpamUi import com.infomaniak.mail.utils.FolderRoleUtils import com.infomaniak.mail.utils.extensions.animatedNavigation import com.infomaniak.mail.utils.extensions.archiveWithConfirmationPopup @@ -96,7 +96,7 @@ class MessageActionsBottomSheetDialog : MailActionsBottomSheetDialog() { setArchiveUi(isFromArchive = folderRole == FolderRole.ARCHIVE) setFavoriteUi(message.isFavorite) setReactionUi(message.isValidReactionTarget) - setSpamPhishingUi(binding.spam, binding.phishing, isFromSpam) + setSpamUi(binding.spam, isFromSpam) observeReportPhishingResult() observePotentialBlockedSenders() diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt index c1c77f98e4c..83674d7f648 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/MultiSelectBottomSheetDialog.kt @@ -283,9 +283,8 @@ class MultiSelectBottomSheetDialog : ActionsBottomSheetDialog() { } setSnoozeUi(threads) - ThreadActionsBottomSheetDialog.setSpamPhishingUi( + ThreadActionsBottomSheetDialog.setSpamUi( spam = binding.spam, - phishing = binding.phishing, isFromSpam = mainViewModel.currentFolder.value?.role == FolderRole.SPAM ) hideFirstActionItemDivider() diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/ThreadActionsBottomSheetDialog.kt b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/ThreadActionsBottomSheetDialog.kt index aa59acb506d..b16df01d8a7 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/ThreadActionsBottomSheetDialog.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/thread/actions/ThreadActionsBottomSheetDialog.kt @@ -109,7 +109,7 @@ class ThreadActionsBottomSheetDialog : MailActionsBottomSheetDialog() { setFavoriteUi(thread.isFavorite) setSnoozeUi(thread.isSnoozed()) setReactionUi(canBeReactedTo = messageUidToReactTo != null) - setSpamPhishingUi(binding.spam, binding.phishing, isFromSpam) + setSpamUi(binding.spam, isFromSpam) initOnClickListener(onActionClick(thread, messageUidToExecuteAction, messageUidToReactTo)) } @@ -323,7 +323,7 @@ class ThreadActionsBottomSheetDialog : MailActionsBottomSheetDialog() { const val TAG = "ThreadActionsBottomSheetDialog" const val OPEN_SNOOZE_BOTTOM_SHEET = "openSnoozeBottomSheet" - fun setSpamPhishingUi(spam: ActionItemView, phishing: ActionItemView, isFromSpam: Boolean) { + fun setSpamUi(spam: ActionItemView, isFromSpam: Boolean) { spam.apply { val (text, icon) = if (isFromSpam) { R.string.actionNonSpam to R.drawable.ic_non_spam @@ -335,8 +335,6 @@ class ThreadActionsBottomSheetDialog : MailActionsBottomSheetDialog() { setIconResource(icon) isVisible = true } - - phishing.isVisible = true } fun setBlockUserUi(blockSender: ActionItemView, potentialUsersToBlock: Map, isFromSpam: Boolean) {