TF-1831 Handle system back button in dialog view

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit dc93aa9961987315bd1b478aecda530049b75f02)
This commit is contained in:
dab246
2023-12-10 02:53:23 +07:00
committed by Dat H. Pham
parent 9e5e6af9ce
commit fbb43e3bb0
15 changed files with 286 additions and 254 deletions
@@ -30,8 +30,8 @@ class CupertinoActionSheetBuilder {
_actionTiles.addAll(tiles); _actionTiles.addAll(tiles);
} }
void show() { Future<dynamic> show() {
showCupertinoModalPopup( return showCupertinoModalPopup(
context: _context, context: _context,
barrierColor: AppColor.colorDefaultCupertinoActionSheet, barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (context) => PointerInterceptor(child: CupertinoActionSheet( builder: (context) => PointerInterceptor(child: CupertinoActionSheet(
+31 -34
View File
@@ -338,36 +338,34 @@ abstract class BaseMailboxController extends BaseController {
))) )))
).show(context); ).show(context);
} else { } else {
showDialog( Get.dialog(
context: 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()),
barrierColor: AppColor.colorDefaultCupertinoActionSheet, 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)) ..onConfirmAction(AppLocalizations.of(context).delete, () => onDeleteMailboxAction(presentationMailbox))
).show(); ).show();
} else { } else {
showDialog( Get.dialog(
context: context, PointerInterceptor(
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (context) => PointerInterceptor(
child: (ConfirmDialogBuilder(imagePaths) child: (ConfirmDialogBuilder(imagePaths)
..key(const Key('confirm_dialog_delete_mailbox')) ..key(const Key('confirm_dialog_delete_mailbox'))
..title(AppLocalizations.of(context).deleteFolders) ..title(AppLocalizations.of(context).deleteFolders)
@@ -436,7 +432,8 @@ abstract class BaseMailboxController extends BaseController {
..onCloseButtonAction(() => popBack()) ..onCloseButtonAction(() => popBack())
..onConfirmButtonAction(AppLocalizations.of(context).delete, () => onDeleteMailboxAction(presentationMailbox)) ..onConfirmButtonAction(AppLocalizations.of(context).delete, () => onDeleteMailboxAction(presentationMailbox))
..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack()) ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack())
).build()) ).build()),
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
); );
} }
} }
@@ -74,33 +74,34 @@ mixin MailboxActionHandlerMixin {
})) }))
.show(); .show();
} else { } else {
showDialog( Get.dialog(
context: 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()
),
barrierColor: AppColor.colorDefaultCupertinoActionSheet, 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(); .show();
} else { } else {
showDialog( Get.dialog(
context: context, PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
..key(const Key('confirm_dialog_empty_spam')) ..key(const Key('confirm_dialog_empty_spam'))
..title(AppLocalizations.of(context).emptySpamFolder) ..title(AppLocalizations.of(context).emptySpamFolder)
..content(AppLocalizations.of(context).emptySpamMessageDialog) ..content(AppLocalizations.of(context).emptySpamMessageDialog)
@@ -160,7 +159,9 @@ mixin MailboxActionHandlerMixin {
} }
}) })
..onCancelButtonAction(AppLocalizations.of(context).cancel, popBack) ..onCancelButtonAction(AppLocalizations.of(context).cancel, popBack)
).build())); ).build()),
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
);
} }
} }
} }
@@ -34,10 +34,8 @@ mixin MessageDialogActionMixin {
final imagePaths = Get.find<ImagePaths>(); final imagePaths = Get.find<ImagePaths>();
if (alignCenter) { if (alignCenter) {
return await showDialog( return await Get.dialog(
context: context, PointerInterceptor(
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (BuildContext context) => PointerInterceptor(
child: (ConfirmDialogBuilder(imagePaths, listTextSpan: listTextSpan, heightButton: 44) child: (ConfirmDialogBuilder(imagePaths, listTextSpan: listTextSpan, heightButton: 44)
..key(const Key('confirm_dialog_action')) ..key(const Key('confirm_dialog_action'))
..title(title ?? '') ..title(title ?? '')
@@ -66,18 +64,14 @@ mixin MessageDialogActionMixin {
} }
) )
).build() ).build()
) ),
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
); );
} else { } else {
if (responsiveUtils.isMobile(context)) { if (responsiveUtils.isMobile(context)) {
if (showAsBottomSheet) { if (showAsBottomSheet) {
return await showModalBottomSheet( return await Get.bottomSheet(
context: context, PointerInterceptor(
isScrollControlled: true,
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
backgroundColor: Colors.transparent,
enableDrag: true,
builder: (BuildContext context) => PointerInterceptor(
child: (ConfirmDialogBuilder(imagePaths, showAsBottomSheet: true, listTextSpan: listTextSpan) child: (ConfirmDialogBuilder(imagePaths, showAsBottomSheet: true, listTextSpan: listTextSpan)
..key(const Key('confirm_dialog_action')) ..key(const Key('confirm_dialog_action'))
..title(title ?? '') ..title(title ?? '')
@@ -108,7 +102,13 @@ mixin MessageDialogActionMixin {
} }
) )
..onCloseButtonAction(() => popBack())) ..onCloseButtonAction(() => popBack()))
.build())); .build()
),
isScrollControlled: true,
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
backgroundColor: Colors.transparent,
enableDrag: true,
);
} else { } else {
return (ConfirmationDialogActionSheetBuilder(context, listTextSpan: listTextSpan) return (ConfirmationDialogActionSheetBuilder(context, listTextSpan: listTextSpan)
..messageText(message) ..messageText(message)
@@ -128,10 +128,8 @@ mixin MessageDialogActionMixin {
})).show(); })).show();
} }
} else { } else {
return await showDialog( return await Get.dialog(
context: context, PointerInterceptor(
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (BuildContext context) => PointerInterceptor(
child: (ConfirmDialogBuilder(imagePaths, listTextSpan: listTextSpan) child: (ConfirmDialogBuilder(imagePaths, listTextSpan: listTextSpan)
..key(const Key('confirm_dialog_action')) ..key(const Key('confirm_dialog_action'))
..title(title ?? '') ..title(title ?? '')
@@ -161,7 +159,8 @@ mixin MessageDialogActionMixin {
) )
..onCloseButtonAction(() => popBack())) ..onCloseButtonAction(() => popBack()))
.build() .build()
) ),
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
); );
} }
} }
@@ -9,8 +9,8 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
mixin PopupContextMenuActionMixin { mixin PopupContextMenuActionMixin {
void openContextMenuAction(BuildContext context, List<Widget> actionTiles, {Widget? cancelButton}) { void openContextMenuAction(BuildContext context, List<Widget> actionTiles, {Widget? cancelButton}) async {
(CupertinoActionSheetBuilder(context) await (CupertinoActionSheetBuilder(context)
..addTiles(actionTiles) ..addTiles(actionTiles)
..addCancelButton(cancelButton ?? buildCancelButton(context))) ..addCancelButton(cancelButton ?? buildCancelButton(context)))
.show(); .show();
@@ -23,5 +23,3 @@ class RefreshChangeEmailAction extends EmailUIAction {
class CloseEmailDetailedViewToRedirectToTheInboxAction extends EmailUIAction {} class CloseEmailDetailedViewToRedirectToTheInboxAction extends EmailUIAction {}
class CloseEmailDetailedViewAction extends EmailUIAction {} class CloseEmailDetailedViewAction extends EmailUIAction {}
class CloseSearchEmailViewAction extends EmailUIAction {}
@@ -1017,10 +1017,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
..addOnQuickCreatingRuleEmailBottomSheetAction((emailAddress) => quickCreatingRule(context, emailAddress)) ..addOnQuickCreatingRuleEmailBottomSheetAction((emailAddress) => quickCreatingRule(context, emailAddress))
).show(); ).show();
} else { } else {
showDialog( Get.dialog(
context: context, PointerInterceptor(
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (BuildContext context) => PointerInterceptor(
child: EmailAddressDialogBuilder( child: EmailAddressDialogBuilder(
emailAddress, emailAddress,
onCloseDialogAction: () => popBack(), onCloseDialogAction: () => popBack(),
@@ -1028,7 +1026,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
onComposeEmailAction: (emailAddress) => composeEmailFromEmailAddress(emailAddress), onComposeEmailAction: (emailAddress) => composeEmailFromEmailAddress(emailAddress),
onQuickCreatingRuleEmailDialogAction: (emailAddress) => quickCreatingRule(context, 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))) ..onConfirmAction(DeleteActionType.single.getConfirmActionName(context), () => _deleteEmailPermanentlyAction(context, email)))
.show(); .show();
} else { } else {
showDialog( Get.dialog(
context: context, PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
barrierColor: AppColor.colorDefaultCupertinoActionSheet, ..key(const Key('confirm_dialog_delete_email_permanently'))
builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) ..title(DeleteActionType.single.getTitleDialog(context))
..key(const Key('confirm_dialog_delete_email_permanently')) ..content(DeleteActionType.single.getContentDialog(context))
..title(DeleteActionType.single.getTitleDialog(context)) ..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
..content(DeleteActionType.single.getContentDialog(context)) ..colorConfirmButton(AppColor.colorConfirmActionDialog)
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill)) ..styleTextConfirmButton(const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: AppColor.colorActionDeleteConfirmDialog))
..colorConfirmButton(AppColor.colorConfirmActionDialog) ..onCloseButtonAction(() => popBack())
..styleTextConfirmButton(const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: AppColor.colorActionDeleteConfirmDialog)) ..onConfirmButtonAction(DeleteActionType.single.getConfirmActionName(context), () => _deleteEmailPermanentlyAction(context, email))
..onCloseButtonAction(() => popBack()) ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack()))
..onConfirmButtonAction(DeleteActionType.single.getConfirmActionName(context), () => _deleteEmailPermanentlyAction(context, email)) .build()
..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack())) ),
.build())); barrierColor: AppColor.colorDefaultCupertinoActionSheet,
);
} }
} }
@@ -1388,27 +1388,25 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
}) })
).show(); ).show();
} else { } else {
showDialog( Get.dialog(
context: context, PointerInterceptor(
barrierColor: AppColor.colorDefaultCupertinoActionSheet, child: AttachmentListDialogBuilder(
builder: (BuildContext context) => imagePaths: imagePaths,
PointerInterceptor( attachments: attachments,
child: AttachmentListDialogBuilder( responsiveUtils: responsiveUtils,
imagePaths: imagePaths, scrollController: _attachmentListScrollController,
attachments: attachments, backgroundColor: Colors.black.withAlpha(24),
responsiveUtils: responsiveUtils, onCloseButtonAction: () => popBack(),
scrollController: _attachmentListScrollController, onDownloadAttachmentFileAction: (attachment) {
backgroundColor: Colors.black.withAlpha(24), if (PlatformInfo.isWeb) {
onCloseButtonAction: () => popBack(), downloadAttachmentForWeb(context, attachment);
onDownloadAttachmentFileAction: (attachment) { } else {
if (PlatformInfo.isWeb) { exportAttachment(context, attachment);
downloadAttachmentForWeb(context, attachment);
} else {
exportAttachment(context, attachment);
}
} }
) }
) )
),
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
); );
} }
} }
@@ -787,27 +787,26 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
_deleteMultipleMailboxAction(selectedMailboxList))) _deleteMultipleMailboxAction(selectedMailboxList)))
.show(); .show();
} else { } else {
showDialog( Get.dialog(
context: context, PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
barrierColor: AppColor.colorDefaultCupertinoActionSheet, ..key(const Key('confirm_dialog_delete_multiple_mailbox'))
builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) ..title(AppLocalizations.of(context).deleteFolders)
..key(const Key('confirm_dialog_delete_multiple_mailbox')) ..content(AppLocalizations.of(context).messageConfirmationDialogDeleteMultipleFolder(selectedMailboxList.length))
..title(AppLocalizations.of(context).deleteFolders) ..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
..content(AppLocalizations.of(context) ..colorConfirmButton(AppColor.colorConfirmActionDialog)
.messageConfirmationDialogDeleteMultipleFolder(selectedMailboxList.length)) ..styleTextConfirmButton(const TextStyle(
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fontSize: 17,
fit: BoxFit.fill)) fontWeight: FontWeight.w500,
..colorConfirmButton(AppColor.colorConfirmActionDialog) color: AppColor.colorActionDeleteConfirmDialog))
..styleTextConfirmButton(const TextStyle( ..onCloseButtonAction(() => popBack())
fontSize: 17, ..onConfirmButtonAction(AppLocalizations.of(context).delete, () =>
fontWeight: FontWeight.w500, _deleteMultipleMailboxAction(selectedMailboxList))
color: AppColor.colorActionDeleteConfirmDialog)) ..onCancelButtonAction(AppLocalizations.of(context).cancel, () =>
..onCloseButtonAction(() => popBack()) popBack()))
..onConfirmButtonAction(AppLocalizations.of(context).delete, () => .build()
_deleteMultipleMailboxAction(selectedMailboxList)) ),
..onCancelButtonAction(AppLocalizations.of(context).cancel, () => barrierColor: AppColor.colorDefaultCupertinoActionSheet,
popBack())) );
.build()));
} }
} }
@@ -160,3 +160,7 @@ class SearchEmailByFromFieldsAction extends DashBoardAction {
@override @override
List<Object?> get props => [emailAddress]; List<Object?> get props => [emailAddress];
} }
class CloseSearchEmailViewAction extends DashBoardAction {}
class CancelSelectionSearchEmailAction extends DashBoardAction {}
@@ -1139,31 +1139,32 @@ class MailboxDashBoardController extends ReloadableController {
onCancelSelectionEmail: onCancelSelectionEmail))) onCancelSelectionEmail: onCancelSelectionEmail)))
.show(); .show();
} else { } else {
showDialog( Get.dialog(
context: context, PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
barrierColor: AppColor.colorDefaultCupertinoActionSheet, ..key(const Key('confirm_dialog_delete_emails_permanently'))
builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) ..title(actionType.getTitleDialog(context))
..key(const Key('confirm_dialog_delete_emails_permanently')) ..content(actionType.getContentDialog(
..title(actionType.getTitleDialog(context)) context,
..content(actionType.getContentDialog( count: listEmails?.length,
context, mailboxName: mailboxCurrent?.getDisplayName(context)))
count: listEmails?.length, ..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
mailboxName: mailboxCurrent?.getDisplayName(context))) ..colorConfirmButton(AppColor.colorConfirmActionDialog)
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill)) ..styleTextConfirmButton(const TextStyle(
..colorConfirmButton(AppColor.colorConfirmActionDialog) fontSize: 17,
..styleTextConfirmButton(const TextStyle( fontWeight: FontWeight.w500,
fontSize: 17, color: AppColor.colorActionDeleteConfirmDialog))
fontWeight: FontWeight.w500, ..onCloseButtonAction(() => popBack())
color: AppColor.colorActionDeleteConfirmDialog)) ..onConfirmButtonAction(
..onCloseButtonAction(() => popBack()) actionType.getConfirmActionName(context),
..onConfirmButtonAction( () => _deleteSelectionEmailsPermanentlyAction(
actionType.getConfirmActionName(context), actionType,
() => _deleteSelectionEmailsPermanentlyAction( listEmails: listEmails,
actionType, onCancelSelectionEmail: onCancelSelectionEmail))
listEmails: listEmails, ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack()))
onCancelSelectionEmail: onCancelSelectionEmail)) .build()
..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack())) ),
.build())); barrierColor: AppColor.colorDefaultCupertinoActionSheet,
);
} }
} }
@@ -2046,10 +2047,8 @@ class MailboxDashBoardController extends ReloadableController {
})) }))
.show(); .show();
} else { } else {
showDialog( Get.dialog(
context: context, PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
..key(const Key('confirm_dialog_empty_spam')) ..key(const Key('confirm_dialog_empty_spam'))
..title(AppLocalizations.of(context).emptySpamFolder) ..title(AppLocalizations.of(context).emptySpamFolder)
..content(AppLocalizations.of(context).emptySpamMessageDialog) ..content(AppLocalizations.of(context).emptySpamMessageDialog)
@@ -2072,7 +2071,8 @@ class MailboxDashBoardController extends ReloadableController {
} }
}) })
..onCancelButtonAction(AppLocalizations.of(context).cancel, popBack) ..onCancelButtonAction(AppLocalizations.of(context).cancel, popBack)
).build()) ).build()),
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
); );
} }
} }
@@ -2270,11 +2270,25 @@ class MailboxDashBoardController extends ReloadableController {
log('MailboxDashBoardController::_navigateToScreen: dashboardRoute: $dashboardRoute'); log('MailboxDashBoardController::_navigateToScreen: dashboardRoute: $dashboardRoute');
switch(dashboardRoute.value) { switch(dashboardRoute.value) {
case DashboardRoutes.emailDetailed: case DashboardRoutes.emailDetailed:
dispatchEmailUIAction(CloseEmailDetailedViewAction()); if (PlatformInfo.isMobile) {
return true; if (currentContext != null && canBack(currentContext!)) {
return false;
} else {
dispatchEmailUIAction(CloseEmailDetailedViewAction());
return true;
}
} else {
dispatchEmailUIAction(CloseEmailDetailedViewAction());
return true;
}
case DashboardRoutes.thread: case DashboardRoutes.thread:
if (PlatformInfo.isMobile) { 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; return false;
} else { } else {
openDefaultMailbox(); openDefaultMailbox();
@@ -2283,10 +2297,16 @@ class MailboxDashBoardController extends ReloadableController {
} }
if (searchController.isSearchEmailRunning) { if (searchController.isSearchEmailRunning) {
dispatchMailboxUIAction(SystemBackToInboxAction()); dispatchMailboxUIAction(SystemBackToInboxAction());
return true;
} else { } else {
pushAndPopAll(AppRoutes.home); if (selectedMailbox.value?.isInbox == true) {
pushAndPopAll(AppRoutes.home);
return true;
} else {
openDefaultMailbox();
return true;
}
} }
return true;
case DashboardRoutes.sendingQueue: case DashboardRoutes.sendingQueue:
if (PlatformInfo.isMobile) { if (PlatformInfo.isMobile) {
openDefaultMailbox(); openDefaultMailbox();
@@ -2294,8 +2314,20 @@ class MailboxDashBoardController extends ReloadableController {
} }
return false; return false;
case DashboardRoutes.searchEmail: case DashboardRoutes.searchEmail:
dispatchAction(CloseSearchEmailViewAction()); if (PlatformInfo.isMobile) {
return true; 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: default:
return false; return false;
} }
@@ -11,15 +11,15 @@ import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:rule_filter/rule_filter/tmail_rule.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/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/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/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/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/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/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/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/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/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'; 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/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/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/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/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.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 { class EmailRulesController extends BaseController {
@@ -166,28 +166,29 @@ class EmailRulesController extends BaseController {
})) }))
.show(); .show();
} else { } else {
showDialog( Get.dialog(
context: context, PointerInterceptor(
barrierColor: AppColor.colorDefaultCupertinoActionSheet, child: (ConfirmDialogBuilder(imagePaths)
builder: (BuildContext context) => ..title(AppLocalizations.of(context).deleteEmailRule)
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths) ..content(AppLocalizations.of(context).messageConfirmationDialogDeleteEmailRule(emailRule.name))
..title(AppLocalizations.of(context).deleteEmailRule) ..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog,
..content(AppLocalizations.of(context).messageConfirmationDialogDeleteEmailRule(emailRule.name)) fit: BoxFit.fill))
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, ..marginIcon(EdgeInsets.zero)
fit: BoxFit.fill)) ..colorConfirmButton(AppColor.colorConfirmActionDialog)
..marginIcon(EdgeInsets.zero) ..styleTextConfirmButton(const TextStyle(
..colorConfirmButton(AppColor.colorConfirmActionDialog) fontSize: 17,
..styleTextConfirmButton(const TextStyle( fontWeight: FontWeight.w500,
fontSize: 17, color: AppColor.colorActionDeleteConfirmDialog))
fontWeight: FontWeight.w500, ..onCloseButtonAction(() => popBack())
color: AppColor.colorActionDeleteConfirmDialog)) ..onConfirmButtonAction(AppLocalizations.of(context).delete, () {
..onCloseButtonAction(() => popBack()) _handleDeleteEmailRuleAction(emailRule);
..onConfirmButtonAction(AppLocalizations.of(context).delete, () { })
_handleDeleteEmailRuleAction(emailRule); ..onCancelButtonAction(AppLocalizations.of(context).cancel, () =>
}) popBack()))
..onCancelButtonAction(AppLocalizations.of(context).cancel, () => .build()
popBack())) ),
.build())); barrierColor: AppColor.colorDefaultCupertinoActionSheet,
);
} }
} }
@@ -192,14 +192,14 @@ class IdentitiesController extends BaseController {
} }
void openConfirmationDialogDeleteIdentityAction(BuildContext context, Identity identity) { void openConfirmationDialogDeleteIdentityAction(BuildContext context, Identity identity) {
showDialog( Get.dialog(
context: context, DeleteIdentityDialogBuilder(
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (BuildContext context) => DeleteIdentityDialogBuilder(
responsiveUtils: responsiveUtils, responsiveUtils: responsiveUtils,
imagePaths: imagePaths, imagePaths: imagePaths,
onDeleteIdentityAction: () => _deleteIdentityAction(identity), onDeleteIdentityAction: () => _deleteIdentityAction(identity),
)); ),
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
);
} }
void _deleteIdentityAction(Identity identity) { void _deleteIdentityAction(Identity identity) {
@@ -225,25 +225,25 @@ class IdentitiesController extends BaseController {
void _deleteIdentityFailure(DeleteIdentityFailure failure) { void _deleteIdentityFailure(DeleteIdentityFailure failure) {
if (currentContext != null) { if (currentContext != null) {
showDialog( Get.dialog(
context: currentContext!, (ConfirmDialogBuilder(imagePaths)
barrierColor: AppColor.colorDefaultCupertinoActionSheet, ..key(const Key('dialog_message_delete_identity_failed'))
builder: (BuildContext context) => (ConfirmDialogBuilder(imagePaths) ..title(AppLocalizations.of(currentContext!).delete_failed)
..key(const Key('dialog_message_delete_identity_failed')) ..addIcon(SvgPicture.asset(imagePaths.icDeleteDialogFailed, fit: BoxFit.fill))
..title(AppLocalizations.of(context).delete_failed) ..marginIcon(EdgeInsets.zero)
..addIcon(SvgPicture.asset(imagePaths.icDeleteDialogFailed, fit: BoxFit.fill)) ..styleTitle(const TextStyle(fontSize: 20,
..marginIcon(EdgeInsets.zero) fontWeight: FontWeight.bold,
..styleTitle(const TextStyle(fontSize: 20, color: Colors.black))
fontWeight: FontWeight.bold, ..colorConfirmButton(AppColor.colorTextButton)
color: Colors.black)) ..paddingTitle(const EdgeInsets.symmetric(vertical: 12))
..colorConfirmButton(AppColor.colorTextButton) ..styleTextConfirmButton(const TextStyle(fontSize: 17,
..paddingTitle(const EdgeInsets.symmetric(vertical: 12)) fontWeight: FontWeight.w500,
..styleTextConfirmButton(const TextStyle(fontSize: 17, color: Colors.white))
fontWeight: FontWeight.w500, ..onCloseButtonAction(() => popBack())
color: Colors.white)) ..onConfirmButtonAction('${AppLocalizations.of(currentContext!).got_it}!', () => popBack()))
..onCloseButtonAction(() => popBack()) .build(),
..onConfirmButtonAction('${AppLocalizations.of(context).got_it}!', () => popBack())) barrierColor: AppColor.colorDefaultCupertinoActionSheet,
.build()); );
} }
} }
@@ -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/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/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/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/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/presentation/model/mailbox_actions.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.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/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/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/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/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_receive_time_type.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_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) { if (action is CloseSearchEmailViewAction) {
closeSearchView(context: currentContext); closeSearchView(context: currentContext);
mailboxDashBoardController.clearDashBoardAction(); mailboxDashBoardController.clearDashBoardAction();
} else if (action is CancelSelectionSearchEmailAction) {
cancelSelectionMode();
mailboxDashBoardController.clearDashBoardAction();
} }
} }
); );
@@ -305,7 +308,7 @@ class SearchEmailController extends BaseController
if (session != null && accountId != null) { if (session != null && accountId != null) {
canSearchMore = true; canSearchMore = true;
searchIsRunning.value = true; searchIsRunning.value = true;
cancelSelectionMode(context); cancelSelectionMode();
if (PlatformInfo.isWeb) { if (PlatformInfo.isWeb) {
RouteUtils.replaceBrowserHistory( RouteUtils.replaceBrowserHistory(
title: 'SearchEmail', title: 'SearchEmail',
@@ -769,7 +772,7 @@ class SearchEmailController extends BaseController
} }
} }
void cancelSelectionMode(BuildContext context) { void cancelSelectionMode() {
listResultSearch.value = listResultSearch listResultSearch.value = listResultSearch
.map((email) => email.toSelectedEmail(selectMode: SelectMode.INACTIVE)) .map((email) => email.toSelectedEmail(selectMode: SelectMode.INACTIVE))
.toList(); .toList();
@@ -783,31 +786,31 @@ class SearchEmailController extends BaseController
) { ) {
switch(actionType) { switch(actionType) {
case EmailActionType.markAsRead: case EmailActionType.markAsRead:
cancelSelectionMode(context); cancelSelectionMode();
markAsReadSelectedMultipleEmail(listEmails, ReadActions.markAsRead); markAsReadSelectedMultipleEmail(listEmails, ReadActions.markAsRead);
break; break;
case EmailActionType.markAsUnread: case EmailActionType.markAsUnread:
cancelSelectionMode(context); cancelSelectionMode();
markAsReadSelectedMultipleEmail(listEmails, ReadActions.markAsUnread); markAsReadSelectedMultipleEmail(listEmails, ReadActions.markAsUnread);
break; break;
case EmailActionType.markAsStarred: case EmailActionType.markAsStarred:
cancelSelectionMode(context); cancelSelectionMode();
markAsStarSelectedMultipleEmail(listEmails, MarkStarAction.markStar); markAsStarSelectedMultipleEmail(listEmails, MarkStarAction.markStar);
break; break;
case EmailActionType.unMarkAsStarred: case EmailActionType.unMarkAsStarred:
cancelSelectionMode(context); cancelSelectionMode();
markAsStarSelectedMultipleEmail(listEmails, MarkStarAction.unMarkStar); markAsStarSelectedMultipleEmail(listEmails, MarkStarAction.unMarkStar);
break; break;
case EmailActionType.moveToMailbox: case EmailActionType.moveToMailbox:
cancelSelectionMode(context); cancelSelectionMode();
final mailboxContainCurrent = listEmails.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById); final mailboxContainCurrent = listEmails.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById);
if (mailboxContainCurrent != null) { if (mailboxContainCurrent != null) {
moveSelectedMultipleEmailToMailbox(context, listEmails, mailboxContainCurrent); moveSelectedMultipleEmailToMailbox(context, listEmails, mailboxContainCurrent);
} }
break; break;
case EmailActionType.moveToTrash: case EmailActionType.moveToTrash:
cancelSelectionMode(context); cancelSelectionMode();
final mailboxContainCurrent = listEmails.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById); final mailboxContainCurrent = listEmails.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById);
if (mailboxContainCurrent != null) { if (mailboxContainCurrent != null) {
moveSelectedMultipleEmailToTrash(listEmails, mailboxContainCurrent); moveSelectedMultipleEmailToTrash(listEmails, mailboxContainCurrent);
@@ -821,18 +824,18 @@ class SearchEmailController extends BaseController
DeleteActionType.multiple, DeleteActionType.multiple,
listEmails: listEmails, listEmails: listEmails,
mailboxCurrent: mailboxContainCurrent, mailboxCurrent: mailboxContainCurrent,
onCancelSelectionEmail: () => cancelSelectionMode(context)); onCancelSelectionEmail: () => cancelSelectionMode());
} }
break; break;
case EmailActionType.moveToSpam: case EmailActionType.moveToSpam:
cancelSelectionMode(context); cancelSelectionMode();
final mailboxContainCurrent = listEmails.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById); final mailboxContainCurrent = listEmails.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById);
if (mailboxContainCurrent != null) { if (mailboxContainCurrent != null) {
moveSelectedMultipleEmailToSpam(listEmails, mailboxContainCurrent); moveSelectedMultipleEmailToSpam(listEmails, mailboxContainCurrent);
} }
break; break;
case EmailActionType.unSpam: case EmailActionType.unSpam:
cancelSelectionMode(context); cancelSelectionMode();
unSpamSelectedMultipleEmail(listEmails); unSpamSelectedMultipleEmail(listEmails);
break; break;
default: default:
@@ -62,7 +62,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
return AppBarSelectionMode( return AppBarSelectionMode(
controller.listResultSearch.listEmailSelected, controller.listResultSearch.listEmailSelected,
controller.mailboxDashBoardController.mapMailboxById, controller.mailboxDashBoardController.mapMailboxById,
onCancelSelection: () => controller.cancelSelectionMode(context), onCancelSelection: controller.cancelSelectionMode,
onHandleEmailAction: (actionType, listEmails) => onHandleEmailAction: (actionType, listEmails) =>
controller.handleSelectionEmailAction(context, actionType, listEmails)); controller.handleSelectionEmailAction(context, actionType, listEmails));
} else { } else {
@@ -198,10 +198,8 @@ mixin EmailActionController {
() => _deleteEmailPermanentlyAction(context, email))) () => _deleteEmailPermanentlyAction(context, email)))
.show(); .show();
} else { } else {
showDialog( Get.dialog(
context: context, PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
..key(const Key('confirm_dialog_delete_email_permanently')) ..key(const Key('confirm_dialog_delete_email_permanently'))
..title(DeleteActionType.single.getTitleDialog(context)) ..title(DeleteActionType.single.getTitleDialog(context))
..content(DeleteActionType.single.getContentDialog(context)) ..content(DeleteActionType.single.getContentDialog(context))
@@ -219,7 +217,9 @@ mixin EmailActionController {
..onCancelButtonAction( ..onCancelButtonAction(
AppLocalizations.of(context).cancel, AppLocalizations.of(context).cancel,
() => popBack())) () => popBack()))
.build())); .build()),
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
);
} }
} }