diff --git a/core/lib/presentation/views/bottom_popup/cupertino_action_sheet_builder.dart b/core/lib/presentation/views/bottom_popup/cupertino_action_sheet_builder.dart index b11f924fb..3f8ff7845 100644 --- a/core/lib/presentation/views/bottom_popup/cupertino_action_sheet_builder.dart +++ b/core/lib/presentation/views/bottom_popup/cupertino_action_sheet_builder.dart @@ -30,8 +30,8 @@ class CupertinoActionSheetBuilder { _actionTiles.addAll(tiles); } - void show() { - showCupertinoModalPopup( + Future show() { + return showCupertinoModalPopup( context: _context, barrierColor: AppColor.colorDefaultCupertinoActionSheet, builder: (context) => PointerInterceptor(child: CupertinoActionSheet( diff --git a/lib/features/base/base_mailbox_controller.dart b/lib/features/base/base_mailbox_controller.dart index 8a195f1c1..e97d66920 100644 --- a/lib/features/base/base_mailbox_controller.dart +++ b/lib/features/base/base_mailbox_controller.dart @@ -338,36 +338,34 @@ abstract class BaseMailboxController extends BaseController { ))) ).show(context); } else { - showDialog( - context: context, + Get.dialog( + PointerInterceptor(child: (EditTextDialogBuilder() + ..key(const Key('rename_mailbox_dialog')) + ..title(AppLocalizations.of(context).renameFolder) + ..cancelText(AppLocalizations.of(context).cancel) + ..setErrorString((value) { + return verifyMailboxNameAction( + context, + value, + listMailboxName, + MailboxActions.rename + ); + }) + ..setTextController(TextEditingController.fromValue( + TextEditingValue( + text: presentationMailbox.name?.name ?? '', + selection: TextSelection( + baseOffset: 0, + extentOffset: presentationMailbox.name?.name.length ?? 0 + ) + )) + ) + ..onConfirmButtonAction( + AppLocalizations.of(context).rename, + (value) => onRenameMailboxAction(presentationMailbox, MailboxName(value)) + ) + ).build()), barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (context) => - PointerInterceptor(child: (EditTextDialogBuilder() - ..key(const Key('rename_mailbox_dialog')) - ..title(AppLocalizations.of(context).renameFolder) - ..cancelText(AppLocalizations.of(context).cancel) - ..setErrorString((value) { - return verifyMailboxNameAction( - context, - value, - listMailboxName, - MailboxActions.rename - ); - }) - ..setTextController(TextEditingController.fromValue( - TextEditingValue( - text: presentationMailbox.name?.name ?? '', - selection: TextSelection( - baseOffset: 0, - extentOffset: presentationMailbox.name?.name.length ?? 0 - ) - )) - ) - ..onConfirmButtonAction( - AppLocalizations.of(context).rename, - (value) => onRenameMailboxAction(presentationMailbox, MailboxName(value)) - ) - ).build()) ); } } @@ -418,10 +416,8 @@ abstract class BaseMailboxController extends BaseController { ..onConfirmAction(AppLocalizations.of(context).delete, () => onDeleteMailboxAction(presentationMailbox)) ).show(); } else { - showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (context) => PointerInterceptor( + Get.dialog( + PointerInterceptor( child: (ConfirmDialogBuilder(imagePaths) ..key(const Key('confirm_dialog_delete_mailbox')) ..title(AppLocalizations.of(context).deleteFolders) @@ -436,7 +432,8 @@ abstract class BaseMailboxController extends BaseController { ..onCloseButtonAction(() => popBack()) ..onConfirmButtonAction(AppLocalizations.of(context).delete, () => onDeleteMailboxAction(presentationMailbox)) ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack()) - ).build()) + ).build()), + barrierColor: AppColor.colorDefaultCupertinoActionSheet, ); } } diff --git a/lib/features/base/mixin/mailbox_action_handler_mixin.dart b/lib/features/base/mixin/mailbox_action_handler_mixin.dart index 1efeefe63..fb24b7d67 100644 --- a/lib/features/base/mixin/mailbox_action_handler_mixin.dart +++ b/lib/features/base/mixin/mailbox_action_handler_mixin.dart @@ -74,33 +74,34 @@ mixin MailboxActionHandlerMixin { })) .show(); } else { - showDialog( - context: context, + Get.dialog( + PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) + ..key(const Key('confirm_dialog_empty_trash')) + ..title(AppLocalizations.of(context).emptyTrash) + ..content(AppLocalizations.of(context).emptyTrashMessageDialog) + ..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill)) + ..colorConfirmButton(AppColor.colorConfirmActionDialog) + ..styleTextConfirmButton(const TextStyle( + fontSize: 17, + fontWeight: FontWeight.w500, + color: AppColor.colorActionDeleteConfirmDialog)) + ..onCloseButtonAction(popBack) + ..onConfirmButtonAction(AppLocalizations.of(context).delete, () { + popBack(); + if (mailbox.countTotalEmails > 0) { + dashboardController.emptyTrashFolderAction(trashFolderId: mailbox.id); + } else { + appToast.showToastWarningMessage( + context, + AppLocalizations.of(context).noEmailInYourCurrentFolder + ); + } + }) + ..onCancelButtonAction(AppLocalizations.of(context).cancel, popBack)) + .build() + ), barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) - ..key(const Key('confirm_dialog_empty_trash')) - ..title(AppLocalizations.of(context).emptyTrash) - ..content(AppLocalizations.of(context).emptyTrashMessageDialog) - ..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill)) - ..colorConfirmButton(AppColor.colorConfirmActionDialog) - ..styleTextConfirmButton(const TextStyle( - fontSize: 17, - fontWeight: FontWeight.w500, - color: AppColor.colorActionDeleteConfirmDialog)) - ..onCloseButtonAction(popBack) - ..onConfirmButtonAction(AppLocalizations.of(context).delete, () { - popBack(); - if (mailbox.countTotalEmails > 0) { - dashboardController.emptyTrashFolderAction(trashFolderId: mailbox.id); - } else { - appToast.showToastWarningMessage( - context, - AppLocalizations.of(context).noEmailInYourCurrentFolder - ); - } - }) - ..onCancelButtonAction(AppLocalizations.of(context).cancel, popBack)) - .build())); + ); } } @@ -134,10 +135,8 @@ mixin MailboxActionHandlerMixin { })) .show(); } else { - showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) + Get.dialog( + PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) ..key(const Key('confirm_dialog_empty_spam')) ..title(AppLocalizations.of(context).emptySpamFolder) ..content(AppLocalizations.of(context).emptySpamMessageDialog) @@ -160,7 +159,9 @@ mixin MailboxActionHandlerMixin { } }) ..onCancelButtonAction(AppLocalizations.of(context).cancel, popBack) - ).build())); + ).build()), + barrierColor: AppColor.colorDefaultCupertinoActionSheet, + ); } } } \ No newline at end of file diff --git a/lib/features/base/mixin/message_dialog_action_mixin.dart b/lib/features/base/mixin/message_dialog_action_mixin.dart index 78930bb3a..e096e2e66 100644 --- a/lib/features/base/mixin/message_dialog_action_mixin.dart +++ b/lib/features/base/mixin/message_dialog_action_mixin.dart @@ -34,10 +34,8 @@ mixin MessageDialogActionMixin { final imagePaths = Get.find(); if (alignCenter) { - return await showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (BuildContext context) => PointerInterceptor( + return await Get.dialog( + PointerInterceptor( child: (ConfirmDialogBuilder(imagePaths, listTextSpan: listTextSpan, heightButton: 44) ..key(const Key('confirm_dialog_action')) ..title(title ?? '') @@ -66,18 +64,14 @@ mixin MessageDialogActionMixin { } ) ).build() - ) + ), + barrierColor: AppColor.colorDefaultCupertinoActionSheet, ); } else { if (responsiveUtils.isMobile(context)) { if (showAsBottomSheet) { - return await showModalBottomSheet( - context: context, - isScrollControlled: true, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - backgroundColor: Colors.transparent, - enableDrag: true, - builder: (BuildContext context) => PointerInterceptor( + return await Get.bottomSheet( + PointerInterceptor( child: (ConfirmDialogBuilder(imagePaths, showAsBottomSheet: true, listTextSpan: listTextSpan) ..key(const Key('confirm_dialog_action')) ..title(title ?? '') @@ -108,7 +102,13 @@ mixin MessageDialogActionMixin { } ) ..onCloseButtonAction(() => popBack())) - .build())); + .build() + ), + isScrollControlled: true, + barrierColor: AppColor.colorDefaultCupertinoActionSheet, + backgroundColor: Colors.transparent, + enableDrag: true, + ); } else { return (ConfirmationDialogActionSheetBuilder(context, listTextSpan: listTextSpan) ..messageText(message) @@ -128,10 +128,8 @@ mixin MessageDialogActionMixin { })).show(); } } else { - return await showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (BuildContext context) => PointerInterceptor( + return await Get.dialog( + PointerInterceptor( child: (ConfirmDialogBuilder(imagePaths, listTextSpan: listTextSpan) ..key(const Key('confirm_dialog_action')) ..title(title ?? '') @@ -161,7 +159,8 @@ mixin MessageDialogActionMixin { ) ..onCloseButtonAction(() => popBack())) .build() - ) + ), + barrierColor: AppColor.colorDefaultCupertinoActionSheet, ); } } diff --git a/lib/features/base/mixin/popup_context_menu_action_mixin.dart b/lib/features/base/mixin/popup_context_menu_action_mixin.dart index e3ddb014e..f7f577782 100644 --- a/lib/features/base/mixin/popup_context_menu_action_mixin.dart +++ b/lib/features/base/mixin/popup_context_menu_action_mixin.dart @@ -9,8 +9,8 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart'; mixin PopupContextMenuActionMixin { - void openContextMenuAction(BuildContext context, List actionTiles, {Widget? cancelButton}) { - (CupertinoActionSheetBuilder(context) + void openContextMenuAction(BuildContext context, List actionTiles, {Widget? cancelButton}) async { + await (CupertinoActionSheetBuilder(context) ..addTiles(actionTiles) ..addCancelButton(cancelButton ?? buildCancelButton(context))) .show(); diff --git a/lib/features/email/presentation/action/email_ui_action.dart b/lib/features/email/presentation/action/email_ui_action.dart index 6e42157df..3a2ae4ae5 100644 --- a/lib/features/email/presentation/action/email_ui_action.dart +++ b/lib/features/email/presentation/action/email_ui_action.dart @@ -22,6 +22,4 @@ class RefreshChangeEmailAction extends EmailUIAction { class CloseEmailDetailedViewToRedirectToTheInboxAction extends EmailUIAction {} -class CloseEmailDetailedViewAction extends EmailUIAction {} - -class CloseSearchEmailViewAction extends EmailUIAction {} \ No newline at end of file +class CloseEmailDetailedViewAction extends EmailUIAction {} \ No newline at end of file diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart index bc9eb2fd9..686ee8395 100644 --- a/lib/features/email/presentation/controller/single_email_controller.dart +++ b/lib/features/email/presentation/controller/single_email_controller.dart @@ -1017,10 +1017,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin { ..addOnQuickCreatingRuleEmailBottomSheetAction((emailAddress) => quickCreatingRule(context, emailAddress)) ).show(); } else { - showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (BuildContext context) => PointerInterceptor( + Get.dialog( + PointerInterceptor( child: EmailAddressDialogBuilder( emailAddress, onCloseDialogAction: () => popBack(), @@ -1028,7 +1026,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin { onComposeEmailAction: (emailAddress) => composeEmailFromEmailAddress(emailAddress), onQuickCreatingRuleEmailDialogAction: (emailAddress) => quickCreatingRule(context, emailAddress) ) - ) + ), + barrierColor: AppColor.colorDefaultCupertinoActionSheet, ); } } @@ -1061,20 +1060,21 @@ class SingleEmailController extends BaseController with AppLoaderMixin { ..onConfirmAction(DeleteActionType.single.getConfirmActionName(context), () => _deleteEmailPermanentlyAction(context, email))) .show(); } else { - showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) - ..key(const Key('confirm_dialog_delete_email_permanently')) - ..title(DeleteActionType.single.getTitleDialog(context)) - ..content(DeleteActionType.single.getContentDialog(context)) - ..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill)) - ..colorConfirmButton(AppColor.colorConfirmActionDialog) - ..styleTextConfirmButton(const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: AppColor.colorActionDeleteConfirmDialog)) - ..onCloseButtonAction(() => popBack()) - ..onConfirmButtonAction(DeleteActionType.single.getConfirmActionName(context), () => _deleteEmailPermanentlyAction(context, email)) - ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack())) - .build())); + Get.dialog( + PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) + ..key(const Key('confirm_dialog_delete_email_permanently')) + ..title(DeleteActionType.single.getTitleDialog(context)) + ..content(DeleteActionType.single.getContentDialog(context)) + ..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill)) + ..colorConfirmButton(AppColor.colorConfirmActionDialog) + ..styleTextConfirmButton(const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: AppColor.colorActionDeleteConfirmDialog)) + ..onCloseButtonAction(() => popBack()) + ..onConfirmButtonAction(DeleteActionType.single.getConfirmActionName(context), () => _deleteEmailPermanentlyAction(context, email)) + ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack())) + .build() + ), + barrierColor: AppColor.colorDefaultCupertinoActionSheet, + ); } } @@ -1388,27 +1388,25 @@ class SingleEmailController extends BaseController with AppLoaderMixin { }) ).show(); } else { - showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (BuildContext context) => - PointerInterceptor( - child: AttachmentListDialogBuilder( - imagePaths: imagePaths, - attachments: attachments, - responsiveUtils: responsiveUtils, - scrollController: _attachmentListScrollController, - backgroundColor: Colors.black.withAlpha(24), - onCloseButtonAction: () => popBack(), - onDownloadAttachmentFileAction: (attachment) { - if (PlatformInfo.isWeb) { - downloadAttachmentForWeb(context, attachment); - } else { - exportAttachment(context, attachment); - } + Get.dialog( + PointerInterceptor( + child: AttachmentListDialogBuilder( + imagePaths: imagePaths, + attachments: attachments, + responsiveUtils: responsiveUtils, + scrollController: _attachmentListScrollController, + backgroundColor: Colors.black.withAlpha(24), + onCloseButtonAction: () => popBack(), + onDownloadAttachmentFileAction: (attachment) { + if (PlatformInfo.isWeb) { + downloadAttachmentForWeb(context, attachment); + } else { + exportAttachment(context, attachment); } - ) + } ) + ), + barrierColor: AppColor.colorDefaultCupertinoActionSheet, ); } } diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 4f6e7292f..b1ed437a8 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -787,27 +787,26 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM _deleteMultipleMailboxAction(selectedMailboxList))) .show(); } else { - showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) - ..key(const Key('confirm_dialog_delete_multiple_mailbox')) - ..title(AppLocalizations.of(context).deleteFolders) - ..content(AppLocalizations.of(context) - .messageConfirmationDialogDeleteMultipleFolder(selectedMailboxList.length)) - ..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, - fit: BoxFit.fill)) - ..colorConfirmButton(AppColor.colorConfirmActionDialog) - ..styleTextConfirmButton(const TextStyle( - fontSize: 17, - fontWeight: FontWeight.w500, - color: AppColor.colorActionDeleteConfirmDialog)) - ..onCloseButtonAction(() => popBack()) - ..onConfirmButtonAction(AppLocalizations.of(context).delete, () => - _deleteMultipleMailboxAction(selectedMailboxList)) - ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => - popBack())) - .build())); + Get.dialog( + PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) + ..key(const Key('confirm_dialog_delete_multiple_mailbox')) + ..title(AppLocalizations.of(context).deleteFolders) + ..content(AppLocalizations.of(context).messageConfirmationDialogDeleteMultipleFolder(selectedMailboxList.length)) + ..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill)) + ..colorConfirmButton(AppColor.colorConfirmActionDialog) + ..styleTextConfirmButton(const TextStyle( + fontSize: 17, + fontWeight: FontWeight.w500, + color: AppColor.colorActionDeleteConfirmDialog)) + ..onCloseButtonAction(() => popBack()) + ..onConfirmButtonAction(AppLocalizations.of(context).delete, () => + _deleteMultipleMailboxAction(selectedMailboxList)) + ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => + popBack())) + .build() + ), + barrierColor: AppColor.colorDefaultCupertinoActionSheet, + ); } } diff --git a/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart b/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart index 0982ec501..0503b0510 100644 --- a/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart +++ b/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart @@ -160,3 +160,7 @@ class SearchEmailByFromFieldsAction extends DashBoardAction { @override List get props => [emailAddress]; } + +class CloseSearchEmailViewAction extends DashBoardAction {} + +class CancelSelectionSearchEmailAction extends DashBoardAction {} \ No newline at end of file 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 a0aebdbd1..6b948baac 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -1139,31 +1139,32 @@ class MailboxDashBoardController extends ReloadableController { onCancelSelectionEmail: onCancelSelectionEmail))) .show(); } else { - showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) - ..key(const Key('confirm_dialog_delete_emails_permanently')) - ..title(actionType.getTitleDialog(context)) - ..content(actionType.getContentDialog( - context, - count: listEmails?.length, - mailboxName: mailboxCurrent?.getDisplayName(context))) - ..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill)) - ..colorConfirmButton(AppColor.colorConfirmActionDialog) - ..styleTextConfirmButton(const TextStyle( - fontSize: 17, - fontWeight: FontWeight.w500, - color: AppColor.colorActionDeleteConfirmDialog)) - ..onCloseButtonAction(() => popBack()) - ..onConfirmButtonAction( - actionType.getConfirmActionName(context), - () => _deleteSelectionEmailsPermanentlyAction( - actionType, - listEmails: listEmails, - onCancelSelectionEmail: onCancelSelectionEmail)) - ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack())) - .build())); + Get.dialog( + PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) + ..key(const Key('confirm_dialog_delete_emails_permanently')) + ..title(actionType.getTitleDialog(context)) + ..content(actionType.getContentDialog( + context, + count: listEmails?.length, + mailboxName: mailboxCurrent?.getDisplayName(context))) + ..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill)) + ..colorConfirmButton(AppColor.colorConfirmActionDialog) + ..styleTextConfirmButton(const TextStyle( + fontSize: 17, + fontWeight: FontWeight.w500, + color: AppColor.colorActionDeleteConfirmDialog)) + ..onCloseButtonAction(() => popBack()) + ..onConfirmButtonAction( + actionType.getConfirmActionName(context), + () => _deleteSelectionEmailsPermanentlyAction( + actionType, + listEmails: listEmails, + onCancelSelectionEmail: onCancelSelectionEmail)) + ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack())) + .build() + ), + barrierColor: AppColor.colorDefaultCupertinoActionSheet, + ); } } @@ -2046,10 +2047,8 @@ class MailboxDashBoardController extends ReloadableController { })) .show(); } else { - showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) + Get.dialog( + PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) ..key(const Key('confirm_dialog_empty_spam')) ..title(AppLocalizations.of(context).emptySpamFolder) ..content(AppLocalizations.of(context).emptySpamMessageDialog) @@ -2072,7 +2071,8 @@ class MailboxDashBoardController extends ReloadableController { } }) ..onCancelButtonAction(AppLocalizations.of(context).cancel, popBack) - ).build()) + ).build()), + barrierColor: AppColor.colorDefaultCupertinoActionSheet, ); } } @@ -2270,11 +2270,25 @@ class MailboxDashBoardController extends ReloadableController { log('MailboxDashBoardController::_navigateToScreen: dashboardRoute: $dashboardRoute'); switch(dashboardRoute.value) { case DashboardRoutes.emailDetailed: - dispatchEmailUIAction(CloseEmailDetailedViewAction()); - return true; + if (PlatformInfo.isMobile) { + if (currentContext != null && canBack(currentContext!)) { + return false; + } else { + dispatchEmailUIAction(CloseEmailDetailedViewAction()); + return true; + } + } else { + dispatchEmailUIAction(CloseEmailDetailedViewAction()); + return true; + } case DashboardRoutes.thread: if (PlatformInfo.isMobile) { - if (selectedMailbox.value?.isInbox == true) { + if (currentContext != null && canBack(currentContext!)) { + return false; + } else if (isSelectionEnabled()) { + dispatchAction(CancelSelectionAllEmailAction()); + return true; + } else if (selectedMailbox.value?.isInbox == true) { return false; } else { openDefaultMailbox(); @@ -2283,10 +2297,16 @@ class MailboxDashBoardController extends ReloadableController { } if (searchController.isSearchEmailRunning) { dispatchMailboxUIAction(SystemBackToInboxAction()); + return true; } else { - pushAndPopAll(AppRoutes.home); + if (selectedMailbox.value?.isInbox == true) { + pushAndPopAll(AppRoutes.home); + return true; + } else { + openDefaultMailbox(); + return true; + } } - return true; case DashboardRoutes.sendingQueue: if (PlatformInfo.isMobile) { openDefaultMailbox(); @@ -2294,8 +2314,20 @@ class MailboxDashBoardController extends ReloadableController { } return false; case DashboardRoutes.searchEmail: - dispatchAction(CloseSearchEmailViewAction()); - return true; + if (PlatformInfo.isMobile) { + if (currentContext != null && canBack(currentContext!)) { + return false; + } else if (listResultSearch.any((email) => email.selectMode == SelectMode.ACTIVE)) { + dispatchAction(CancelSelectionSearchEmailAction()); + return true; + } else { + dispatchAction(CloseSearchEmailViewAction()); + return true; + } + } else { + dispatchAction(CloseSearchEmailViewAction()); + return true; + } default: return false; } diff --git a/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart b/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart index 4911e5b63..b89bfad0a 100644 --- a/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart +++ b/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart @@ -11,15 +11,15 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'package:rule_filter/rule_filter/tmail_rule.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_email_rule_filter_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/delete_email_rule_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/edit_email_rule_filter_request.dart'; -import 'package:tmail_ui_user/features/manage_account/domain/state/delete_email_rule_state.dart'; -import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_email_rule_filter_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/create_new_rule_filter_state.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/state/delete_email_rule_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/edit_email_rule_filter_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_rules_state.dart'; -import 'package:tmail_ui_user/features/manage_account/domain/usecases/delete_email_rule_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/create_new_email_rule_filter_interactor.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/usecases/delete_email_rule_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/edit_email_rule_filter_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_rules_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/widgets/email_rule_bottom_sheet_action_tile_builder.dart'; @@ -27,9 +27,9 @@ import 'package:tmail_ui_user/features/manage_account/presentation/manage_accoun import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/creator_action_type.dart'; import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; +import 'package:tmail_ui_user/main/routes/app_routes.dart'; import 'package:tmail_ui_user/main/routes/dialog_router.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; -import 'package:tmail_ui_user/main/routes/app_routes.dart'; class EmailRulesController extends BaseController { @@ -166,28 +166,29 @@ class EmailRulesController extends BaseController { })) .show(); } else { - showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (BuildContext context) => - PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) - ..title(AppLocalizations.of(context).deleteEmailRule) - ..content(AppLocalizations.of(context).messageConfirmationDialogDeleteEmailRule(emailRule.name)) - ..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, - fit: BoxFit.fill)) - ..marginIcon(EdgeInsets.zero) - ..colorConfirmButton(AppColor.colorConfirmActionDialog) - ..styleTextConfirmButton(const TextStyle( - fontSize: 17, - fontWeight: FontWeight.w500, - color: AppColor.colorActionDeleteConfirmDialog)) - ..onCloseButtonAction(() => popBack()) - ..onConfirmButtonAction(AppLocalizations.of(context).delete, () { - _handleDeleteEmailRuleAction(emailRule); - }) - ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => - popBack())) - .build())); + Get.dialog( + PointerInterceptor( + child: (ConfirmDialogBuilder(imagePaths) + ..title(AppLocalizations.of(context).deleteEmailRule) + ..content(AppLocalizations.of(context).messageConfirmationDialogDeleteEmailRule(emailRule.name)) + ..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, + fit: BoxFit.fill)) + ..marginIcon(EdgeInsets.zero) + ..colorConfirmButton(AppColor.colorConfirmActionDialog) + ..styleTextConfirmButton(const TextStyle( + fontSize: 17, + fontWeight: FontWeight.w500, + color: AppColor.colorActionDeleteConfirmDialog)) + ..onCloseButtonAction(() => popBack()) + ..onConfirmButtonAction(AppLocalizations.of(context).delete, () { + _handleDeleteEmailRuleAction(emailRule); + }) + ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => + popBack())) + .build() + ), + barrierColor: AppColor.colorDefaultCupertinoActionSheet, + ); } } diff --git a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart index 0072efb2e..34beda441 100644 --- a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart +++ b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart @@ -192,14 +192,14 @@ class IdentitiesController extends BaseController { } void openConfirmationDialogDeleteIdentityAction(BuildContext context, Identity identity) { - showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (BuildContext context) => DeleteIdentityDialogBuilder( + Get.dialog( + DeleteIdentityDialogBuilder( responsiveUtils: responsiveUtils, imagePaths: imagePaths, onDeleteIdentityAction: () => _deleteIdentityAction(identity), - )); + ), + barrierColor: AppColor.colorDefaultCupertinoActionSheet, + ); } void _deleteIdentityAction(Identity identity) { @@ -225,25 +225,25 @@ class IdentitiesController extends BaseController { void _deleteIdentityFailure(DeleteIdentityFailure failure) { if (currentContext != null) { - showDialog( - context: currentContext!, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (BuildContext context) => (ConfirmDialogBuilder(imagePaths) - ..key(const Key('dialog_message_delete_identity_failed')) - ..title(AppLocalizations.of(context).delete_failed) - ..addIcon(SvgPicture.asset(imagePaths.icDeleteDialogFailed, fit: BoxFit.fill)) - ..marginIcon(EdgeInsets.zero) - ..styleTitle(const TextStyle(fontSize: 20, - fontWeight: FontWeight.bold, - color: Colors.black)) - ..colorConfirmButton(AppColor.colorTextButton) - ..paddingTitle(const EdgeInsets.symmetric(vertical: 12)) - ..styleTextConfirmButton(const TextStyle(fontSize: 17, - fontWeight: FontWeight.w500, - color: Colors.white)) - ..onCloseButtonAction(() => popBack()) - ..onConfirmButtonAction('${AppLocalizations.of(context).got_it}!', () => popBack())) - .build()); + Get.dialog( + (ConfirmDialogBuilder(imagePaths) + ..key(const Key('dialog_message_delete_identity_failed')) + ..title(AppLocalizations.of(currentContext!).delete_failed) + ..addIcon(SvgPicture.asset(imagePaths.icDeleteDialogFailed, fit: BoxFit.fill)) + ..marginIcon(EdgeInsets.zero) + ..styleTitle(const TextStyle(fontSize: 20, + fontWeight: FontWeight.bold, + color: Colors.black)) + ..colorConfirmButton(AppColor.colorTextButton) + ..paddingTitle(const EdgeInsets.symmetric(vertical: 12)) + ..styleTextConfirmButton(const TextStyle(fontSize: 17, + fontWeight: FontWeight.w500, + color: Colors.white)) + ..onCloseButtonAction(() => popBack()) + ..onConfirmButtonAction('${AppLocalizations.of(currentContext!).got_it}!', () => popBack())) + .build(), + barrierColor: AppColor.colorDefaultCupertinoActionSheet, + ); } } diff --git a/lib/features/search/email/presentation/search_email_controller.dart b/lib/features/search/email/presentation/search_email_controller.dart index ced917094..d6ad911de 100644 --- a/lib/features/search/email/presentation/search_email_controller.dart +++ b/lib/features/search/email/presentation/search_email_controller.dart @@ -36,7 +36,6 @@ import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_sta import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_star_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/unsubscribe_email_state.dart'; -import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart'; import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart'; @@ -45,6 +44,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/quick_sear import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart'; @@ -227,6 +227,9 @@ class SearchEmailController extends BaseController if (action is CloseSearchEmailViewAction) { closeSearchView(context: currentContext); mailboxDashBoardController.clearDashBoardAction(); + } else if (action is CancelSelectionSearchEmailAction) { + cancelSelectionMode(); + mailboxDashBoardController.clearDashBoardAction(); } } ); @@ -305,7 +308,7 @@ class SearchEmailController extends BaseController if (session != null && accountId != null) { canSearchMore = true; searchIsRunning.value = true; - cancelSelectionMode(context); + cancelSelectionMode(); if (PlatformInfo.isWeb) { RouteUtils.replaceBrowserHistory( title: 'SearchEmail', @@ -769,7 +772,7 @@ class SearchEmailController extends BaseController } } - void cancelSelectionMode(BuildContext context) { + void cancelSelectionMode() { listResultSearch.value = listResultSearch .map((email) => email.toSelectedEmail(selectMode: SelectMode.INACTIVE)) .toList(); @@ -783,31 +786,31 @@ class SearchEmailController extends BaseController ) { switch(actionType) { case EmailActionType.markAsRead: - cancelSelectionMode(context); + cancelSelectionMode(); markAsReadSelectedMultipleEmail(listEmails, ReadActions.markAsRead); break; case EmailActionType.markAsUnread: - cancelSelectionMode(context); + cancelSelectionMode(); markAsReadSelectedMultipleEmail(listEmails, ReadActions.markAsUnread); break; case EmailActionType.markAsStarred: - cancelSelectionMode(context); + cancelSelectionMode(); markAsStarSelectedMultipleEmail(listEmails, MarkStarAction.markStar); break; case EmailActionType.unMarkAsStarred: - cancelSelectionMode(context); + cancelSelectionMode(); markAsStarSelectedMultipleEmail(listEmails, MarkStarAction.unMarkStar); break; case EmailActionType.moveToMailbox: - cancelSelectionMode(context); + cancelSelectionMode(); final mailboxContainCurrent = listEmails.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById); if (mailboxContainCurrent != null) { moveSelectedMultipleEmailToMailbox(context, listEmails, mailboxContainCurrent); } break; case EmailActionType.moveToTrash: - cancelSelectionMode(context); + cancelSelectionMode(); final mailboxContainCurrent = listEmails.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById); if (mailboxContainCurrent != null) { moveSelectedMultipleEmailToTrash(listEmails, mailboxContainCurrent); @@ -821,18 +824,18 @@ class SearchEmailController extends BaseController DeleteActionType.multiple, listEmails: listEmails, mailboxCurrent: mailboxContainCurrent, - onCancelSelectionEmail: () => cancelSelectionMode(context)); + onCancelSelectionEmail: () => cancelSelectionMode()); } break; case EmailActionType.moveToSpam: - cancelSelectionMode(context); + cancelSelectionMode(); final mailboxContainCurrent = listEmails.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById); if (mailboxContainCurrent != null) { moveSelectedMultipleEmailToSpam(listEmails, mailboxContainCurrent); } break; case EmailActionType.unSpam: - cancelSelectionMode(context); + cancelSelectionMode(); unSpamSelectedMultipleEmail(listEmails); break; default: diff --git a/lib/features/search/email/presentation/search_email_view.dart b/lib/features/search/email/presentation/search_email_view.dart index 85acdd51b..e16267c8e 100644 --- a/lib/features/search/email/presentation/search_email_view.dart +++ b/lib/features/search/email/presentation/search_email_view.dart @@ -62,7 +62,7 @@ class SearchEmailView extends GetWidget return AppBarSelectionMode( controller.listResultSearch.listEmailSelected, controller.mailboxDashBoardController.mapMailboxById, - onCancelSelection: () => controller.cancelSelectionMode(context), + onCancelSelection: controller.cancelSelectionMode, onHandleEmailAction: (actionType, listEmails) => controller.handleSelectionEmailAction(context, actionType, listEmails)); } else { diff --git a/lib/features/thread/presentation/mixin/email_action_controller.dart b/lib/features/thread/presentation/mixin/email_action_controller.dart index 1f2a72471..0d7e04738 100644 --- a/lib/features/thread/presentation/mixin/email_action_controller.dart +++ b/lib/features/thread/presentation/mixin/email_action_controller.dart @@ -198,10 +198,8 @@ mixin EmailActionController { () => _deleteEmailPermanentlyAction(context, email))) .show(); } else { - showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) + Get.dialog( + PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) ..key(const Key('confirm_dialog_delete_email_permanently')) ..title(DeleteActionType.single.getTitleDialog(context)) ..content(DeleteActionType.single.getContentDialog(context)) @@ -219,7 +217,9 @@ mixin EmailActionController { ..onCancelButtonAction( AppLocalizations.of(context).cancel, () => popBack())) - .build())); + .build()), + barrierColor: AppColor.colorDefaultCupertinoActionSheet, + ); } }