From 5d502736d86a14d709df84b852db9e4a5232b4d9 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 22 Mar 2024 11:20:53 +0700 Subject: [PATCH] TF-2667 Prevent close sending/saving dialog when click system back on mobile --- .../presentation/composer_controller.dart | 129 ++++++++++-------- .../mailbox_dashboard_controller.dart | 5 + 2 files changed, 74 insertions(+), 60 deletions(-) diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index f88f4684f..d8ca6f546 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -826,39 +826,44 @@ class ComposerController extends BaseController with DragDropFileMixin { required String emailContent, CancelToken? cancelToken }) { - return Get.dialog( - PointerInterceptor( - child: SendingMessageDialogView( - createEmailRequest: CreateEmailRequest( - session: mailboxDashBoardController.sessionCurrent!, - accountId: mailboxDashBoardController.accountId.value!, - emailActionType: composerArguments.value!.emailActionType, - subject: subjectEmail.value ?? '', - emailContent: emailContent, - fromSender: composerArguments.value!.presentationEmail?.from ?? {}, - toRecipients: listToEmailAddress.toSet(), - ccRecipients: listCcEmailAddress.toSet(), - bccRecipients: listBccEmailAddress.toSet(), - isRequestReadReceipt: hasRequestReadReceipt.value, - identity: identitySelected.value, - attachments: uploadController.attachmentsUploaded, - inlineAttachments: uploadController.mapInlineAttachments, - outboxMailboxId: mailboxDashBoardController.outboxMailbox?.mailboxId, - sentMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent], - draftsEmailId: composerArguments.value!.emailActionType == EmailActionType.editDraft - ? composerArguments.value!.presentationEmail?.id - : null, - answerForwardEmailId: composerArguments.value!.presentationEmail?.id, - unsubscribeEmailId: composerArguments.value!.previousEmailId, - messageId: composerArguments.value!.messageId, - references: composerArguments.value!.references, - emailSendingQueue: composerArguments.value!.sendingEmail - ), - createNewAndSendEmailInteractor: _createNewAndSendEmailInteractor, - onCancelSendingEmailAction: _handleCancelSendingMessage, - cancelToken: cancelToken, + final childWidget = PointerInterceptor( + child: SendingMessageDialogView( + createEmailRequest: CreateEmailRequest( + session: mailboxDashBoardController.sessionCurrent!, + accountId: mailboxDashBoardController.accountId.value!, + emailActionType: composerArguments.value!.emailActionType, + subject: subjectEmail.value ?? '', + emailContent: emailContent, + fromSender: composerArguments.value!.presentationEmail?.from ?? {}, + toRecipients: listToEmailAddress.toSet(), + ccRecipients: listCcEmailAddress.toSet(), + bccRecipients: listBccEmailAddress.toSet(), + isRequestReadReceipt: hasRequestReadReceipt.value, + identity: identitySelected.value, + attachments: uploadController.attachmentsUploaded, + inlineAttachments: uploadController.mapInlineAttachments, + outboxMailboxId: mailboxDashBoardController.outboxMailbox?.mailboxId, + sentMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent], + draftsEmailId: composerArguments.value!.emailActionType == EmailActionType.editDraft + ? composerArguments.value!.presentationEmail?.id + : null, + answerForwardEmailId: composerArguments.value!.presentationEmail?.id, + unsubscribeEmailId: composerArguments.value!.previousEmailId, + messageId: composerArguments.value!.messageId, + references: composerArguments.value!.references, + emailSendingQueue: composerArguments.value!.sendingEmail ), + createNewAndSendEmailInteractor: _createNewAndSendEmailInteractor, + onCancelSendingEmailAction: _handleCancelSendingMessage, + cancelToken: cancelToken, ), + ); + + return Get.dialog( + PlatformInfo.isMobile + ? PopScope(canPop: false, child: childWidget) + : childWidget, + barrierDismissible: false, barrierColor: AppColor.colorDefaultCupertinoActionSheet, ); } @@ -2035,37 +2040,41 @@ class ComposerController extends BaseController with DragDropFileMixin { EmailId? draftEmailId, CancelToken? cancelToken, }) { - return Get.dialog( - PointerInterceptor( - child: SavingMessageDialogView( - createEmailRequest: CreateEmailRequest( - session: mailboxDashBoardController.sessionCurrent!, - accountId: mailboxDashBoardController.accountId.value!, - emailActionType: composerArguments.value!.emailActionType, - subject: subjectEmail.value ?? '', - emailContent: emailContent, - fromSender: composerArguments.value!.presentationEmail?.from ?? {}, - toRecipients: listToEmailAddress.toSet(), - ccRecipients: listCcEmailAddress.toSet(), - bccRecipients: listBccEmailAddress.toSet(), - isRequestReadReceipt: hasRequestReadReceipt.value, - identity: identitySelected.value, - attachments: uploadController.attachmentsUploaded, - inlineAttachments: uploadController.mapInlineAttachments, - sentMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent], - draftsMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleDrafts], - draftsEmailId: draftEmailId, - answerForwardEmailId: composerArguments.value!.presentationEmail?.id, - unsubscribeEmailId: composerArguments.value!.previousEmailId, - messageId: composerArguments.value!.messageId, - references: composerArguments.value!.references, - emailSendingQueue: composerArguments.value!.sendingEmail - ), - createNewAndSaveEmailToDraftsInteractor: _createNewAndSaveEmailToDraftsInteractor, - onCancelSavingEmailToDraftsAction: _handleCancelSavingMessageToDrafts, - cancelToken: cancelToken, + final childWidget = PointerInterceptor( + child: SavingMessageDialogView( + createEmailRequest: CreateEmailRequest( + session: mailboxDashBoardController.sessionCurrent!, + accountId: mailboxDashBoardController.accountId.value!, + emailActionType: composerArguments.value!.emailActionType, + subject: subjectEmail.value ?? '', + emailContent: emailContent, + fromSender: composerArguments.value!.presentationEmail?.from ?? {}, + toRecipients: listToEmailAddress.toSet(), + ccRecipients: listCcEmailAddress.toSet(), + bccRecipients: listBccEmailAddress.toSet(), + isRequestReadReceipt: hasRequestReadReceipt.value, + identity: identitySelected.value, + attachments: uploadController.attachmentsUploaded, + inlineAttachments: uploadController.mapInlineAttachments, + sentMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent], + draftsMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleDrafts], + draftsEmailId: draftEmailId, + answerForwardEmailId: composerArguments.value!.presentationEmail?.id, + unsubscribeEmailId: composerArguments.value!.previousEmailId, + messageId: composerArguments.value!.messageId, + references: composerArguments.value!.references, + emailSendingQueue: composerArguments.value!.sendingEmail ), + createNewAndSaveEmailToDraftsInteractor: _createNewAndSaveEmailToDraftsInteractor, + onCancelSavingEmailToDraftsAction: _handleCancelSavingMessageToDrafts, + cancelToken: cancelToken, ), + ); + return Get.dialog( + PlatformInfo.isMobile + ? PopScope(canPop: false, child: childWidget) + : childWidget, + barrierDismissible: false, barrierColor: AppColor.colorDefaultCupertinoActionSheet, ); } diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index cfd05c0de..e1a7aa38e 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -1391,7 +1391,12 @@ class MailboxDashBoardController extends ReloadableController { openComposerOverlay(arguments); } } else { + BackButtonInterceptor.removeByName(AppRoutes.dashboard); + final result = await push(AppRoutes.composer, arguments: arguments); + + BackButtonInterceptor.add(_onBackButtonInterceptor, name: AppRoutes.dashboard); + if (result is SendingEmailArguments) { handleSendEmailAction(result); } else if (result is SendEmailSuccess ||