TF-1831 Handle system back button in search email

Signed-off-by: dab246 <tdvu@linagora.com>

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit f4ffd113f192415c8613bf12fe40db1af902edaf)
This commit is contained in:
dab246
2023-12-09 15:59:20 +07:00
committed by Dat H. Pham
parent 535ac67971
commit bb98f02918
20 changed files with 492 additions and 250 deletions
@@ -234,8 +234,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
mailboxDashBoardController.clearSelectedEmail();
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
mailboxDashBoardController.clearEmailUIAction();
} else if (action is CloseEmailDetailedViewAction && currentContext != null) {
closeEmailView(currentContext!);
} else if (action is CloseEmailDetailedViewAction) {
closeEmailView(context: currentContext);
mailboxDashBoardController.clearEmailUIAction();
}
});
@@ -575,17 +575,15 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
mailboxDashBoardController.dispatchState(Right(success));
if (success is MarkAsEmailReadSuccess
&& success.readActions == ReadActions.markAsUnread
&& currentContext != null) {
closeEmailView(currentContext!);
&& success.readActions == ReadActions.markAsUnread) {
closeEmailView(context: currentContext);
}
}
void _markAsEmailReadFailure(Failure failure) {
if (failure is MarkAsEmailReadFailure
&& failure.readActions == ReadActions.markAsUnread
&& currentContext != null) {
closeEmailView(currentContext!);
&& failure.readActions == ReadActions.markAsUnread) {
closeEmailView(context: currentContext);
}
}
@@ -844,7 +842,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
}
void _moveToMailbox(BuildContext context, Session session, AccountId accountId, MoveToMailboxRequest moveRequest) {
closeEmailView(context);
closeEmailView(context: context);
consumeState(_moveToMailboxInteractor.execute(session, accountId, moveRequest));
}
@@ -905,7 +903,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
AccountId accountId,
MoveToMailboxRequest moveRequest
) {
closeEmailView(context);
closeEmailView(context: context);
mailboxDashBoardController.moveToMailbox(session, accountId, moveRequest);
}
@@ -955,7 +953,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
AccountId accountId,
MoveToMailboxRequest moveRequest
) {
closeEmailView(context);
closeEmailView(context: context);
mailboxDashBoardController.moveToMailbox(session, accountId, moveRequest);
}
@@ -1082,7 +1080,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
void _deleteEmailPermanentlyAction(BuildContext context, PresentationEmail email) {
popBack();
closeEmailView(context);
closeEmailView(context: context);
mailboxDashBoardController.deleteEmailPermanently(email);
}
@@ -1167,7 +1165,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
}
}
void closeEmailView(BuildContext context) {
void closeEmailView({BuildContext? context}) {
if (emailSupervisorController.supportedPageView.isTrue) {
emailSupervisorController.popEmailQueue(_currentEmailId);
emailSupervisorController.setCurrentEmailIndex(-1);
@@ -1176,9 +1174,9 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
mailboxDashBoardController.clearSelectedEmail();
_updateCurrentEmailId(null);
_resetToOriginalValue();
_updateRouteOnBrowser();
_replaceBrowserHistory();
if (mailboxDashBoardController.searchController.isSearchEmailRunning) {
if (responsiveUtils.isWebDesktop(context)) {
if (context != null && responsiveUtils.isWebDesktop(context)) {
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
} else {
mailboxDashBoardController.dispatchRoute(DashboardRoutes.searchEmail);
@@ -1194,20 +1192,29 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
bool get isOpenEmailNotMailboxFromRoute => emailSupervisorController.supportedPageView.isFalse
&& mailboxDashBoardController.selectedMailbox.value == null;
void _updateRouteOnBrowser() {
log('SingleEmailController::_updateRouteOnBrowser(): isSearchEmailRunning: ${mailboxDashBoardController.searchController.isSearchEmailRunning}');
void _replaceBrowserHistory() {
if (PlatformInfo.isWeb) {
final selectedMailboxId = mailboxDashBoardController.selectedMailbox.value?.id;
final route = RouteUtils.generateRouteBrowser(
AppRoutes.dashboard,
NavigationRouter(
mailboxId: selectedMailboxId,
dashboardType: mailboxDashBoardController.searchController.isSearchEmailRunning
? DashboardType.search
: DashboardType.normal
final isSearchRunning = mailboxDashBoardController.searchController.isSearchEmailRunning;
RouteUtils.replaceBrowserHistory(
title: isSearchRunning
? 'SearchEmail'
: 'Mailbox-${selectedMailboxId?.id.value}',
url: RouteUtils.createUrlWebLocationBar(
AppRoutes.dashboard,
router: NavigationRouter(
mailboxId: isSearchRunning
? null
: selectedMailboxId,
dashboardType: isSearchRunning
? DashboardType.search
: DashboardType.normal,
searchQuery: isSearchRunning
? mailboxDashBoardController.searchController.searchQuery
: null
)
)
);
RouteUtils.updateRouteOnBrowser('Mailbox-${selectedMailboxId?.id.value}', route);
}
}
@@ -1311,13 +1318,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
}
}
Future<bool> backButtonPressedCallbackAction(BuildContext context) async {
if (PlatformInfo.isMobile) {
closeEmailView(context);
}
return false;
}
void _storeOpenedEmailAction(Session? session, AccountId? accountId, DetailedEmail detailedEmail) async {
if (session != null && accountId != null) {
consumeState(_storeOpenedEmailInteractor.execute(session, accountId, detailedEmail));