From 772ac66d3b5e8284b4bc01dd839fc06c7587a148 Mon Sep 17 00:00:00 2001 From: Florent Azavant Date: Fri, 24 Jan 2025 17:04:05 +0100 Subject: [PATCH] display a `Contact support` setting option when supported by the server --- .../manage_account_dashboard_controller.dart | 19 +++++++++++ .../menu/manage_account_menu_controller.dart | 5 ++- .../menu/manage_account_menu_view.dart | 33 ++++++++++++++++++- .../menu/settings/settings_controller.dart | 5 ++- .../settings/settings_first_level_view.dart | 20 +++++++++++ .../presentation/model/account_menu_item.dart | 7 ++++ lib/l10n/intl_messages.arb | 8 ++++- lib/main/localizations/app_localizations.dart | 7 ++++ 8 files changed, 100 insertions(+), 4 deletions(-) diff --git a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart index 8bd0e35f7..08e6b1900 100644 --- a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart +++ b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart @@ -15,6 +15,7 @@ import 'package:server_settings/server_settings/capability_server_settings.dart' import 'package:tmail_ui_user/features/base/action/ui_action.dart'; import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart'; import 'package:tmail_ui_user/features/base/state/banner_state.dart'; +import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.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'; @@ -196,6 +197,7 @@ class ManageAccountDashBoardController extends ReloadableController with UserSet NotificationBinding().dependencies(); break; case AccountMenuItem.vacation: + case AccountMenuItem.contactSupport: case AccountMenuItem.none: break; } @@ -254,6 +256,23 @@ class ManageAccountDashBoardController extends ReloadableController with UserSet } } + bool get isContactSupportCapabilitySupported { + if (accountId.value != null && sessionCurrent != null) { + final isSupported = [SessionExtensions.linagoraContactSupportCapability].isSupported(sessionCurrent!, accountId.value!); + return isSupported && contactSupportCapability != null; + } else { + return false; + } + } + + ContactSupportCapability? get contactSupportCapability { + if (accountId.value != null && sessionCurrent != null) { + return sessionCurrent!.getContactSupportCapability(accountId.value!); + } else { + return null; + } + } + void disableVacationResponder() { if (accountId.value != null && _updateVacationInteractor != null) { final vacationDisabled = vacationResponse.value != null diff --git a/lib/features/manage_account/presentation/menu/manage_account_menu_controller.dart b/lib/features/manage_account/presentation/menu/manage_account_menu_controller.dart index 0b47d8273..cc5de51a6 100644 --- a/lib/features/manage_account/presentation/menu/manage_account_menu_controller.dart +++ b/lib/features/manage_account/presentation/menu/manage_account_menu_controller.dart @@ -3,13 +3,16 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/utils/responsive_utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:tmail_ui_user/features/base/mixin/contact_support_mixin.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; -class ManageAccountMenuController extends GetxController { +class ManageAccountMenuController extends GetxController with ContactSupportMixin { final dashBoardController = Get.find(); + final mailboxDashBoardController = Get.find(); final responsiveUtils = Get.find(); final imagePaths = Get.find(); diff --git a/lib/features/manage_account/presentation/menu/manage_account_menu_view.dart b/lib/features/manage_account/presentation/menu/manage_account_menu_view.dart index 7e5b5d1af..ed8adccb9 100644 --- a/lib/features/manage_account/presentation/menu/manage_account_menu_view.dart +++ b/lib/features/manage_account/presentation/menu/manage_account_menu_view.dart @@ -96,6 +96,37 @@ class ManageAccountMenuView extends GetWidget { const Padding( padding: EdgeInsets.symmetric(vertical: 16), child: Divider()), + if (controller.dashBoardController.isContactSupportCapabilitySupported) + Padding( + padding: const EdgeInsetsDirectional.only(start: 20, end: 10), + child: Material( + color: Colors.transparent, + child: InkWell( + onTap: () { + controller.onGetHelpOrReportBug( + controller.dashBoardController.contactSupportCapability!, + controller.mailboxDashBoardController + ); + }, + borderRadius: BorderRadius.circular(10), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), + child: Row(children: [ + SvgPicture.asset(controller.imagePaths.icHelp, width: 20, height: 20, fit: BoxFit.fill), + const SizedBox(width: 12), + Expanded(child: Text( + AppLocalizations.of(context).contactSupport, + style: const TextStyle( + fontWeight: FontWeight.normal, + fontSize: 15, + color: Colors.black + ) + )) + ]), + ) + ), + ) + ), Padding( padding: const EdgeInsetsDirectional.only(start: 20, end: 10), child: Material( @@ -112,7 +143,7 @@ class ManageAccountMenuView extends GetWidget { child: Padding( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), child: Row(children: [ - SvgPicture.asset(controller.imagePaths.icSignOut, fit: BoxFit.fill), + SvgPicture.asset(controller.imagePaths.icSignOut, width: 20, height: 20, fit: BoxFit.fill), const SizedBox(width: 12), Expanded(child: Text( AppLocalizations.of(context).sign_out, diff --git a/lib/features/manage_account/presentation/menu/settings/settings_controller.dart b/lib/features/manage_account/presentation/menu/settings/settings_controller.dart index d08766d9f..42fcad9a2 100644 --- a/lib/features/manage_account/presentation/menu/settings/settings_controller.dart +++ b/lib/features/manage_account/presentation/menu/settings/settings_controller.dart @@ -1,11 +1,14 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/utils/responsive_utils.dart'; import 'package:get/get.dart'; +import 'package:tmail_ui_user/features/base/mixin/contact_support_mixin.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart'; -class SettingsController extends GetxController { +class SettingsController extends GetxController with ContactSupportMixin { final manageAccountDashboardController = Get.find(); + final mailboxDashBoardController = Get.find(); final responsiveUtils = Get.find(); final imagePaths = Get.find(); diff --git a/lib/features/manage_account/presentation/menu/settings/settings_first_level_view.dart b/lib/features/manage_account/presentation/menu/settings/settings_first_level_view.dart index 6c33f15a6..98b4fad98 100644 --- a/lib/features/manage_account/presentation/menu/settings/settings_first_level_view.dart +++ b/lib/features/manage_account/presentation/menu/settings/settings_first_level_view.dart @@ -153,6 +153,26 @@ class SettingsFirstLevelView extends GetWidget { subtitle: AppLocalizations.of(context).allowsTwakeMailToNotifyYouWhenANewMessageArrivesOnYourPhone, ) ], + Obx(() { + if (controller.manageAccountDashboardController.isContactSupportCapabilitySupported) { + return Column(children: [ + Divider( + color: AppColor.colorDividerHorizontal, + height: 1, + indent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils), + endIndent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils) + ), + SettingFirstLevelTileBuilder( + AccountMenuItem.contactSupport.getName(context), + AccountMenuItem.contactSupport.getIcon(controller.imagePaths), + () => controller.onGetHelpOrReportBug( + controller.manageAccountDashboardController.contactSupportCapability!, + controller.mailboxDashBoardController)), + ]); + } else { + return const SizedBox.shrink(); + } + }), Divider( color: AppColor.colorDividerHorizontal, height: 1, diff --git a/lib/features/manage_account/presentation/model/account_menu_item.dart b/lib/features/manage_account/presentation/model/account_menu_item.dart index e0915ee4f..15ca130f2 100644 --- a/lib/features/manage_account/presentation/model/account_menu_item.dart +++ b/lib/features/manage_account/presentation/model/account_menu_item.dart @@ -12,6 +12,7 @@ enum AccountMenuItem { vacation, mailboxVisibility, notification, + contactSupport, none; String getIcon(ImagePaths imagePaths) { @@ -32,6 +33,8 @@ enum AccountMenuItem { return imagePaths.icMailboxVisibility; case AccountMenuItem.notification: return imagePaths.icNotification; + case AccountMenuItem.contactSupport: + return imagePaths.icHelp; case AccountMenuItem.none: return imagePaths.icProfiles; } @@ -55,6 +58,8 @@ enum AccountMenuItem { return AppLocalizations.of(context).folderVisibility; case AccountMenuItem.notification: return AppLocalizations.of(context).notification; + case AccountMenuItem.contactSupport: + return AppLocalizations.of(context).contactSupport; case AccountMenuItem.none: return AppLocalizations.of(context).profiles; } @@ -78,6 +83,8 @@ enum AccountMenuItem { return 'folder-visibility'; case AccountMenuItem.notification: return 'notification'; + case AccountMenuItem.contactSupport: + return 'contact-support'; case AccountMenuItem.none: return 'profiles'; } diff --git a/lib/l10n/intl_messages.arb b/lib/l10n/intl_messages.arb index 3d784abb2..cbbcd7955 100644 --- a/lib/l10n/intl_messages.arb +++ b/lib/l10n/intl_messages.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2024-12-12T15:50:46.911821", + "@@last_modified": "2025-01-28T10:49:54.473622", "initializing_data": "Initializing data...", "@initializing_data": { "type": "text", @@ -2350,6 +2350,12 @@ "placeholders_order": [], "placeholders": {} }, + "contactSupport": "Contact support", + "@contactSupport": { + "type": "text", + "placeholders_order": [], + "placeholders": {} + }, "subTitleReadReceiptRequestNotificationMessage": "The sender has requested a Read receipt for this email. Send Read receipt?", "@subTitleReadReceiptRequestNotificationMessage": { "type": "text", diff --git a/lib/main/localizations/app_localizations.dart b/lib/main/localizations/app_localizations.dart index 43dde4fb0..5f701cdee 100644 --- a/lib/main/localizations/app_localizations.dart +++ b/lib/main/localizations/app_localizations.dart @@ -2430,6 +2430,13 @@ class AppLocalizations { ); } + String get contactSupport { + return Intl.message( + 'Contact support', + name: 'contactSupport', + ); + } + String get subTitleReadReceiptRequestNotificationMessage { return Intl.message( 'The sender has requested a Read receipt for this email. Send Read receipt?',