From 623102d96f92e5db05f8f06a7fd780a0b7a16d5e Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 12 Sep 2023 02:17:24 +0700 Subject: [PATCH] TF-2134 Handle navigation route from mailto URL (cherry picked from commit b8dc3cab162c7c34299e53ca3269a1c9b9393db0) --- .../presentation/mailbox_controller.dart | 9 +++ .../mailbox_dashboard_controller.dart | 56 ++++++++++++------- 2 files changed, 45 insertions(+), 20 deletions(-) diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 2fbec5eb1..6e2f98019 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -25,6 +25,7 @@ import 'package:tmail_ui_user/features/email/domain/state/delete_email_permanent import 'package:tmail_ui_user/features/email/domain/state/delete_multiple_emails_permanently_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart'; +import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subscribe_action_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subscribe_state.dart'; @@ -402,6 +403,12 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM log('MailboxController::_handleDataFromNavigationRouter():navigationRouter: $navigationRouter'); if (isHasDataFromRoute) { + if (isRedirectToMailtoURL) { + mailboxDashBoardController.goToComposer( + ComposerArguments.fromMailtoURL(navigationRouter?.emailAddress) + ); + } + if (mailboxIdFromNavigationRouter != null) { _selectMailboxFromRouter(); } else if (emailIdFromNavigationRouter != null) { @@ -431,6 +438,8 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM SearchQuery? get searchQueryFromNavigationRouter => navigationRouter?.searchQuery; + bool get isRedirectToMailtoURL => navigationRouter?.routeName == AppRoutes.mailtoURL; + void _clearNavigationRouter() { mailboxDashBoardController.navigationRouter = null; } 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 c7ca8ed4a..c0c90bda9 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -76,6 +76,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/down import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/refresh_action_view_event.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/quick_search_filter.dart'; +import 'package:tmail_ui_user/features/mailto/presentation/model/mailto_arguments.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_vacation_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacation_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_vacation_interactor.dart'; @@ -422,26 +423,9 @@ class MailboxDashBoardController extends ReloadableController { final arguments = Get.arguments; log('MailboxDashBoardController::_getSessionCurrent(): arguments = $arguments'); if (arguments is Session) { - sessionCurrent = arguments; - final personalAccount = sessionCurrent!.personalAccount; - accountId.value = personalAccount.accountId; - _getUserProfile(); - updateAuthenticationAccount(sessionCurrent!, accountId.value!, sessionCurrent!.username); - injectAutoCompleteBindings(sessionCurrent, accountId.value); - injectRuleFilterBindings(sessionCurrent, accountId.value); - injectVacationBindings(sessionCurrent, accountId.value); - injectFCMBindings(sessionCurrent, accountId.value); - _getVacationResponse(); - spamReportController.getSpamReportStateAction(); - if (PlatformInfo.isMobile) { - getAllSendingEmails(); - _storeSessionAction(sessionCurrent!); - } - if (PlatformInfo.isMobile && !_notificationManager.isNotificationClickedOnTerminate) { - _handleClickLocalNotificationOnTerminated(); - } else { - dispatchRoute(DashboardRoutes.thread); - } + _handleSession(arguments); + } else if (arguments is MailtoArguments) { + _handleMailtoURL(arguments); } else { dispatchRoute(DashboardRoutes.thread); reload(); @@ -470,6 +454,38 @@ class MailboxDashBoardController extends ReloadableController { } } + void _handleSession(Session session) { + sessionCurrent = session; + final personalAccount = sessionCurrent!.personalAccount; + accountId.value = personalAccount.accountId; + _getUserProfile(); + updateAuthenticationAccount( + sessionCurrent!, + accountId.value!, + sessionCurrent!.username + ); + injectAutoCompleteBindings(sessionCurrent, accountId.value); + injectRuleFilterBindings(sessionCurrent, accountId.value); + injectVacationBindings(sessionCurrent, accountId.value); + injectFCMBindings(sessionCurrent, accountId.value); + _getVacationResponse(); + spamReportController.getSpamReportStateAction(); + if (PlatformInfo.isMobile) { + getAllSendingEmails(); + _storeSessionAction(sessionCurrent!); + } + if (PlatformInfo.isMobile && !_notificationManager.isNotificationClickedOnTerminate) { + _handleClickLocalNotificationOnTerminated(); + } else { + dispatchRoute(DashboardRoutes.thread); + } + } + + void _handleMailtoURL(MailtoArguments arguments) { + routerParameters.value = arguments.toMapRouter(); + _handleSession(arguments.session); + } + Future _getAppVersion() async { final info = await PackageInfo.fromPlatform(); log('MailboxDashBoardController::_getAppVersion(): ${info.version}');