diff --git a/assets/images/ic_send_disable.svg b/assets/images/ic_send_disable.svg index d2ce6d5d23..69097aeeb1 100644 --- a/assets/images/ic_send_disable.svg +++ b/assets/images/ic_send_disable.svg @@ -1,3 +1,3 @@ - + diff --git a/lib/features/composer/presentation/composer_view.dart b/lib/features/composer/presentation/composer_view.dart index 18743df6e7..a805c443f8 100644 --- a/lib/features/composer/presentation/composer_view.dart +++ b/lib/features/composer/presentation/composer_view.dart @@ -19,10 +19,10 @@ import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/app_ import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/from_composer_mobile_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/mobile_attachment_composer_widget.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/tablet_app_bar_composer_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/tablet_bottom_bar_composer_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/recipient_composer_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/subject_composer_widget.dart'; -import 'package:tmail_ui_user/features/composer/presentation/widgets/web/desktop_app_bar_composer_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/web/from_composer_drop_down_widget.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; @@ -36,18 +36,8 @@ class ComposerView extends GetWidget { return ResponsiveWidget( responsiveUtils: controller.responsiveUtils, mobile: MobileContainerView( - keyboardRichTextController: controller.richTextMobileTabletController!.richTextController, onCloseViewAction: () => controller.handleClickCloseComposer(context), onClearFocusAction: () => controller.clearFocus(context), - onAttachFileAction: () => controller.isNetworkConnectionAvailable - ? controller.openPickAttachmentMenu( - context, - _pickAttachmentsActionTiles(context) - ) - : null, - onInsertImageAction: (constraints) => controller.isNetworkConnectionAvailable - ? controller.insertImage(context, constraints.maxWidth) - : null, backgroundColor: MobileAppBarComposerWidgetStyle.backgroundColor, childBuilder: (context, constraints) => SafeArea( left: !controller.responsiveUtils.isLandscapeMobile(context), @@ -69,6 +59,17 @@ class ComposerView extends GetWidget { radius: ComposerStyle.popupMenuRadius ); }, + isNetworkConnectionAvailable: controller.isNetworkConnectionAvailable, + attachFileAction: () => controller.openPickAttachmentMenu( + context, + _pickAttachmentsActionTiles(context) + ), + insertImageAction: () => controller.insertImage(context, constraints.maxWidth), + openRichToolbarAction: () => + controller.richTextMobileTabletController?.showFormatStyleBottomSheet( + context: context, + richTextController: controller.richTextMobileTabletController?.richTextController + ), )) else Obx(() => AppBarComposerWidget( @@ -83,6 +84,17 @@ class ComposerView extends GetWidget { radius: ComposerStyle.popupMenuRadius ); }, + isNetworkConnectionAvailable: controller.isNetworkConnectionAvailable, + attachFileAction: () => controller.openPickAttachmentMenu( + context, + _pickAttachmentsActionTiles(context) + ), + insertImageAction: () => controller.insertImage(context, constraints.maxWidth), + openRichToolbarAction: () => + controller.richTextMobileTabletController?.showFormatStyleBottomSheet( + context: context, + richTextController: controller.richTextMobileTabletController?.richTextController + ), )), Expanded( child: SafeArea( @@ -231,23 +243,20 @@ class ComposerView extends GetWidget { keyboardRichTextController: controller.richTextMobileTabletController!.richTextController, onCloseViewAction: () => controller.handleClickCloseComposer(context), onClearFocusAction: () => controller.clearFocus(context), - onAttachFileAction: () => controller.isNetworkConnectionAvailable - ? controller.openPickAttachmentMenu( - context, - _pickAttachmentsActionTiles(context) - ) - : null, - onInsertImageAction: (constraints) => controller.isNetworkConnectionAvailable - ? controller.insertImage(context, constraints.maxWidth) - : null, childBuilder: (context, constraints) => Container( color: ComposerStyle.mobileBackgroundColor, child: Column( children: [ - Obx(() => DesktopAppBarComposerWidget( + Obx(() => TabletAppBarComposerWidget( emailSubject: controller.subjectEmail.value ?? '', onCloseViewAction: () => controller.handleClickCloseComposer(context), constraints: constraints, + isNetworkConnectionAvailable: controller.isNetworkConnectionAvailable, + attachFileAction: () => controller.openPickAttachmentMenu( + context, + _pickAttachmentsActionTiles(context) + ), + insertImageAction: () => controller.insertImage(context, constraints.maxWidth), )), Expanded( child: SingleChildScrollView( diff --git a/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart b/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart index ec887b5f1c..953cea15b7 100644 --- a/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart +++ b/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart @@ -1,12 +1,15 @@ import 'dart:io'; +import 'package:core/presentation/utils/keyboard_utils.dart'; import 'package:core/utils/app_logger.dart'; import 'package:core/utils/html/html_utils.dart'; import 'package:file_picker/file_picker.dart'; +import 'package:flutter/cupertino.dart'; import 'package:rich_text_composer/rich_text_composer.dart'; import 'package:tmail_ui_user/features/composer/presentation/controller/base_rich_text_controller.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/header_style_type.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/inline_image.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; class RichTextMobileTabletController extends BaseRichTextController { HtmlEditorApi? htmlEditorApi; @@ -14,11 +17,13 @@ class RichTextMobileTabletController extends BaseRichTextController { final RichTextController richTextController = RichTextController(); void insertImage(InlineImage inlineImage) async { - if (inlineImage.fileInfo.isShared == true) { - await htmlEditorApi?.moveCursorAtLastNode(); + bool isEditorFocused = await htmlEditorApi?.hasFocus() ?? false; + log('RichTextMobileTabletController::insertImage: isEditorFocused = $isEditorFocused'); + if (!isEditorFocused) { + await htmlEditorApi?.requestFocusLastChild(); } if (inlineImage.base64Uri?.isNotEmpty == true) { - await htmlEditorApi?.insertHtml(inlineImage.base64Uri!); + await htmlEditorApi?.insertHtml('${inlineImage.base64Uri ?? ''}

'); } } @@ -44,6 +49,28 @@ class RichTextMobileTabletController extends BaseRichTextController { } } + Future showFormatStyleBottomSheet({ + required BuildContext context, + required RichTextController? richTextController + }) async { + if (Platform.isAndroid) { + await htmlEditorApi?.storeSelectionRange(); + KeyboardUtils.hideSystemKeyboardMobile(); + } else { + await htmlEditorApi?.unfocus(); + } + + if (context.mounted) { + richTextController?.showRichTextBottomSheet( + context: context, + titleFormatBottomSheet: AppLocalizations.of(context).titleFormat, + titleQuickStyleBottomSheet: AppLocalizations.of(context).titleQuickStyles, + titleForegroundBottomSheet: AppLocalizations.of(context).titleForeground, + titleBackgroundBottomSheet: AppLocalizations.of(context).titleBackground, + ); + } + } + @override void onClose() { richTextController.dispose(); diff --git a/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart b/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart index 9496250503..827574f819 100644 --- a/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart +++ b/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart @@ -5,9 +5,8 @@ import 'package:flutter/material.dart'; class MobileAppBarComposerWidgetStyle { static const double height = 56; static const double iconSize = 24; - static const double space = 12; - static const double iconRadius = 8; - static const double sendButtonIconSize = 28; + static const double space = 4; + static const double sendButtonIconSize = 30; static const double richTextIconSize = 28; static const Color backgroundColor = AppColor.colorComposerAppBar; @@ -17,5 +16,5 @@ class MobileAppBarComposerWidgetStyle { static const EdgeInsetsGeometry padding = EdgeInsetsDirectional.symmetric(horizontal: 12); static const EdgeInsetsGeometry iconPadding = EdgeInsetsDirectional.all(3); - static const EdgeInsetsGeometry richTextIconPadding = EdgeInsetsDirectional.all(2); + static const EdgeInsetsGeometry richTextIconPadding = EdgeInsetsDirectional.all(5); } \ No newline at end of file diff --git a/lib/features/composer/presentation/view/mobile/mobile_container_view.dart b/lib/features/composer/presentation/view/mobile/mobile_container_view.dart index de1ffcd81c..5e67b80061 100644 --- a/lib/features/composer/presentation/view/mobile/mobile_container_view.dart +++ b/lib/features/composer/presentation/view/mobile/mobile_container_view.dart @@ -1,33 +1,18 @@ -import 'package:core/presentation/utils/responsive_utils.dart'; -import 'package:core/utils/app_logger.dart'; import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:rich_text_composer/rich_text_composer.dart' as rich_composer; -import 'package:rich_text_composer/views/widgets/rich_text_keyboard_toolbar.dart'; +import 'package:core/utils/app_logger.dart'; import 'package:tmail_ui_user/features/composer/presentation/styles/mobile/mobile_container_view_style.dart'; -import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; - -typedef OnInsertImageAction = Function(BoxConstraints constraints); class MobileContainerView extends StatelessWidget { final Widget Function(BuildContext context, BoxConstraints constraints) childBuilder; - final rich_composer.RichTextController keyboardRichTextController; final VoidCallback onCloseViewAction; - final VoidCallback? onAttachFileAction; - final OnInsertImageAction? onInsertImageAction; final VoidCallback? onClearFocusAction; final Color? backgroundColor; - final _responsiveUtils = Get.find(); - - MobileContainerView({ + const MobileContainerView({ super.key, required this.childBuilder, - required this.keyboardRichTextController, required this.onCloseViewAction, - this.onAttachFileAction, - this.onInsertImageAction, this.onClearFocusAction, this.backgroundColor, }); @@ -48,25 +33,7 @@ class MobileContainerView extends StatelessWidget { backgroundColor: backgroundColor ?? MobileContainerViewStyle.outSideBackgroundColor, resizeToAvoidBottomInset: false, body: LayoutBuilder(builder: (context, constraints) { - return rich_composer.KeyboardRichText( - richTextController: keyboardRichTextController, - keyBroadToolbar: RichTextKeyboardToolBar( - backgroundKeyboardToolBarColor: MobileContainerViewStyle.keyboardToolbarBackgroundColor, - isLandScapeMode: _responsiveUtils.isLandscapeMobile(context), - insertAttachment: onAttachFileAction, - insertImage: () => onInsertImageAction != null - ? onInsertImageAction!(constraints) - : null, - richTextController: keyboardRichTextController, - titleQuickStyleBottomSheet: AppLocalizations.of(context).titleQuickStyles, - titleBackgroundBottomSheet: AppLocalizations.of(context).titleBackground, - titleForegroundBottomSheet: AppLocalizations.of(context).titleForeground, - titleFormatBottomSheet: AppLocalizations.of(context).titleFormat, - titleBack: AppLocalizations.of(context).format, - ), - paddingChild: EdgeInsets.zero, - child: childBuilder(context, constraints), - ); + return childBuilder(context, constraints); }) ), ) diff --git a/lib/features/composer/presentation/view/mobile/tablet_container_view.dart b/lib/features/composer/presentation/view/mobile/tablet_container_view.dart index 9af4547939..511599fff5 100644 --- a/lib/features/composer/presentation/view/mobile/tablet_container_view.dart +++ b/lib/features/composer/presentation/view/mobile/tablet_container_view.dart @@ -5,9 +5,10 @@ import 'package:get/get.dart'; import 'package:rich_text_composer/rich_text_composer.dart'; import 'package:rich_text_composer/views/widgets/rich_text_keyboard_toolbar.dart'; import 'package:tmail_ui_user/features/composer/presentation/styles/mobile/tablet_container_view_style.dart'; -import 'package:tmail_ui_user/features/composer/presentation/view/mobile/mobile_container_view.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; +typedef OnInsertImageAction = Function(BoxConstraints constraints); + class TabletContainerView extends StatelessWidget { final Widget Function(BuildContext context, BoxConstraints constraints) childBuilder; @@ -50,8 +51,8 @@ class TabletContainerView extends StatelessWidget { backgroundKeyboardToolBarColor: TabletContainerViewStyle.keyboardToolbarBackgroundColor, isLandScapeMode: _responsiveUtils.isLandscapeMobile(context), insertAttachment: onAttachFileAction, - insertImage: () => onInsertImageAction != null - ? onInsertImageAction!(constraints) + insertImage: onInsertImageAction != null + ? () => onInsertImageAction!(constraints) : null, richTextController: keyboardRichTextController, titleQuickStyleBottomSheet: AppLocalizations.of(context).titleQuickStyles, diff --git a/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart index 2d174c4a05..0200424ec8 100644 --- a/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart @@ -9,8 +9,12 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; class AppBarComposerWidget extends StatelessWidget { final bool isSendButtonEnabled; + final bool isNetworkConnectionAvailable; final VoidCallback onCloseViewAction; final VoidCallback sendMessageAction; + final VoidCallback? attachFileAction; + final VoidCallback? insertImageAction; + final VoidCallback openRichToolbarAction; final OnOpenContextMenuAction openContextMenuAction; final _imagePaths = Get.find(); @@ -21,6 +25,10 @@ class AppBarComposerWidget extends StatelessWidget { required this.onCloseViewAction, required this.sendMessageAction, required this.openContextMenuAction, + required this.openRichToolbarAction, + this.isNetworkConnectionAvailable = false, + this.attachFileAction, + this.insertImageAction, }); @override @@ -37,10 +45,40 @@ class AppBarComposerWidget extends StatelessWidget { tooltipMessage: AppLocalizations.of(context).saveAndClose, iconSize: MobileAppBarComposerWidgetStyle.iconSize, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - padding: MobileAppBarComposerWidgetStyle.iconPadding, onTapActionCallback: onCloseViewAction ), const Spacer(), + TMailButtonWidget.fromIcon( + icon: _imagePaths.icRichToolbar, + iconColor: MobileAppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: MobileAppBarComposerWidgetStyle.richTextIconSize, + padding: MobileAppBarComposerWidgetStyle.richTextIconPadding, + tooltipMessage: AppLocalizations.of(context).formattingOptions, + onTapActionCallback: openRichToolbarAction, + ), + if (isNetworkConnectionAvailable) + ...[ + const SizedBox(width: MobileAppBarComposerWidgetStyle.space), + TMailButtonWidget.fromIcon( + icon: _imagePaths.icAttachFile, + iconColor: MobileAppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: MobileAppBarComposerWidgetStyle.iconSize, + tooltipMessage: AppLocalizations.of(context).attach_file, + onTapActionCallback: attachFileAction, + ), + const SizedBox(width: MobileAppBarComposerWidgetStyle.space), + TMailButtonWidget.fromIcon( + icon: _imagePaths.icInsertImage, + iconColor: MobileAppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: MobileAppBarComposerWidgetStyle.iconSize, + tooltipMessage: AppLocalizations.of(context).insertImage, + onTapActionCallback: insertImageAction, + ), + const SizedBox(width: MobileAppBarComposerWidgetStyle.space), + ], TMailButtonWidget.fromIcon( icon: isSendButtonEnabled ? _imagePaths.icSendMobile @@ -55,7 +93,6 @@ class AppBarComposerWidget extends StatelessWidget { TMailButtonWidget.fromIcon( icon: _imagePaths.icMore, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - borderRadius: MobileAppBarComposerWidgetStyle.iconRadius, backgroundColor: Colors.transparent, padding: MobileAppBarComposerWidgetStyle.iconPadding, iconSize: MobileAppBarComposerWidgetStyle.iconSize, diff --git a/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart index 67e266f390..2d74fc0566 100644 --- a/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart @@ -9,8 +9,12 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; class LandscapeAppBarComposerWidget extends StatelessWidget { final bool isSendButtonEnabled; + final bool isNetworkConnectionAvailable; final VoidCallback onCloseViewAction; final VoidCallback sendMessageAction; + final VoidCallback? attachFileAction; + final VoidCallback? insertImageAction; + final VoidCallback openRichToolbarAction; final OnOpenContextMenuAction openContextMenuAction; final _imagePaths = Get.find(); @@ -21,6 +25,10 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { required this.onCloseViewAction, required this.sendMessageAction, required this.openContextMenuAction, + required this.openRichToolbarAction, + this.isNetworkConnectionAvailable = false, + this.attachFileAction, + this.insertImageAction, }); @override @@ -40,10 +48,40 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { tooltipMessage: AppLocalizations.of(context).saveAndClose, iconSize: MobileAppBarComposerWidgetStyle.iconSize, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - padding: MobileAppBarComposerWidgetStyle.iconPadding, onTapActionCallback: onCloseViewAction ), const Spacer(), + TMailButtonWidget.fromIcon( + icon: _imagePaths.icRichToolbar, + iconColor: MobileAppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: MobileAppBarComposerWidgetStyle.richTextIconSize, + padding: MobileAppBarComposerWidgetStyle.richTextIconPadding, + tooltipMessage: AppLocalizations.of(context).formattingOptions, + onTapActionCallback: openRichToolbarAction, + ), + if (isNetworkConnectionAvailable) + ...[ + const SizedBox(width: MobileAppBarComposerWidgetStyle.space), + TMailButtonWidget.fromIcon( + icon: _imagePaths.icAttachFile, + iconColor: MobileAppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: MobileAppBarComposerWidgetStyle.iconSize, + tooltipMessage: AppLocalizations.of(context).attach_file, + onTapActionCallback: attachFileAction, + ), + const SizedBox(width: MobileAppBarComposerWidgetStyle.space), + TMailButtonWidget.fromIcon( + icon: _imagePaths.icInsertImage, + iconColor: MobileAppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: MobileAppBarComposerWidgetStyle.iconSize, + tooltipMessage: AppLocalizations.of(context).insertImage, + onTapActionCallback: insertImageAction, + ), + const SizedBox(width: MobileAppBarComposerWidgetStyle.space), + ], TMailButtonWidget.fromIcon( icon: isSendButtonEnabled ? _imagePaths.icSendMobile @@ -58,7 +96,6 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { TMailButtonWidget.fromIcon( icon: _imagePaths.icMore, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - borderRadius: MobileAppBarComposerWidgetStyle.iconRadius, backgroundColor: Colors.transparent, padding: MobileAppBarComposerWidgetStyle.iconPadding, iconSize: MobileAppBarComposerWidgetStyle.iconSize, diff --git a/lib/features/composer/presentation/widgets/mobile/tablet_app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/mobile/tablet_app_bar_composer_widget.dart new file mode 100644 index 0000000000..09686971cd --- /dev/null +++ b/lib/features/composer/presentation/widgets/mobile/tablet_app_bar_composer_widget.dart @@ -0,0 +1,90 @@ +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/views/button/tmail_button_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart'; +import 'package:tmail_ui_user/features/composer/presentation/styles/app_bar_composer_widget_style.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/title_composer_widget.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +class TabletAppBarComposerWidget extends StatelessWidget { + + final String emailSubject; + final VoidCallback onCloseViewAction; + final ScreenDisplayMode? displayMode; + final BoxConstraints? constraints; + final VoidCallback attachFileAction; + final VoidCallback insertImageAction; + final bool isNetworkConnectionAvailable; + + final _imagePaths = Get.find(); + + TabletAppBarComposerWidget({ + super.key, + required this.emailSubject, + required this.onCloseViewAction, + required this.attachFileAction, + required this.insertImageAction, + this.displayMode, + this.constraints, + this.isNetworkConnectionAvailable = false, + }); + + @override + Widget build(BuildContext context) { + return Container( + height: AppBarComposerWidgetStyle.height, + padding: AppBarComposerWidgetStyle.padding, + color: AppBarComposerWidgetStyle.backgroundColor, + child: Stack( + children: [ + Center( + child: Container( + constraints: constraints != null + ? BoxConstraints(maxWidth: constraints!.maxWidth / 2) + : null, + child: TitleComposerWidget(emailSubject: emailSubject), + ), + ), + Align( + alignment: AlignmentDirectional.centerEnd, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (isNetworkConnectionAvailable) + ...[ + TMailButtonWidget.fromIcon( + icon: _imagePaths.icAttachFile, + iconColor: AppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: AppBarComposerWidgetStyle.iconSize, + tooltipMessage: AppLocalizations.of(context).attach_file, + onTapActionCallback: attachFileAction, + ), + const SizedBox(width: AppBarComposerWidgetStyle.space), + TMailButtonWidget.fromIcon( + icon: _imagePaths.icInsertImage, + iconColor: AppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: AppBarComposerWidgetStyle.iconSize, + tooltipMessage: AppLocalizations.of(context).insertImage, + onTapActionCallback: insertImageAction, + ), + const SizedBox(width: AppBarComposerWidgetStyle.space), + ], + TMailButtonWidget.fromIcon( + icon: _imagePaths.icCancel, + backgroundColor: Colors.transparent, + tooltipMessage: AppLocalizations.of(context).saveAndClose, + iconSize: AppBarComposerWidgetStyle.iconSize, + iconColor: AppBarComposerWidgetStyle.iconColor, + onTapActionCallback: onCloseViewAction + ), + ], + ), + ) + ], + ), + ); + } +} \ No newline at end of file diff --git a/lib/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart index 72cd05b5c1..5c7b0790e3 100644 --- a/lib/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart @@ -48,13 +48,11 @@ class MobileResponsiveAppBarComposerWidget extends StatelessWidget { tooltipMessage: AppLocalizations.of(context).saveAndClose, iconSize: MobileAppBarComposerWidgetStyle.iconSize, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - padding: MobileAppBarComposerWidgetStyle.iconPadding, onTapActionCallback: onCloseViewAction ), const Spacer(), TMailButtonWidget.fromIcon( icon: _imagePaths.icRichToolbar, - borderRadius: MobileAppBarComposerWidgetStyle.iconRadius, padding: MobileAppBarComposerWidgetStyle.richTextIconPadding, backgroundColor: isFormattingOptionsEnabled ? MobileAppBarComposerWidgetStyle.selectedBackgroundColor @@ -70,27 +68,21 @@ class MobileResponsiveAppBarComposerWidget extends StatelessWidget { TMailButtonWidget.fromIcon( icon: _imagePaths.icAttachFile, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - borderRadius: MobileAppBarComposerWidgetStyle.iconRadius, backgroundColor: Colors.transparent, - padding: MobileAppBarComposerWidgetStyle.iconPadding, iconSize: MobileAppBarComposerWidgetStyle.iconSize, tooltipMessage: AppLocalizations.of(context).attach_file, onTapActionCallback: attachFileAction, ), const SizedBox(width: MobileAppBarComposerWidgetStyle.space), - AbsorbPointer( - absorbing: isCodeViewEnabled, - child: TMailButtonWidget.fromIcon( + if (!isCodeViewEnabled) + TMailButtonWidget.fromIcon( icon: _imagePaths.icInsertImage, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - borderRadius: MobileAppBarComposerWidgetStyle.iconRadius, backgroundColor: Colors.transparent, - padding: MobileAppBarComposerWidgetStyle.iconPadding, iconSize: MobileAppBarComposerWidgetStyle.iconSize, tooltipMessage: AppLocalizations.of(context).insertImage, onTapActionCallback: insertImageAction, ), - ), const SizedBox(width: MobileAppBarComposerWidgetStyle.space), TMailButtonWidget.fromIcon( icon: isSendButtonEnabled @@ -106,9 +98,7 @@ class MobileResponsiveAppBarComposerWidget extends StatelessWidget { TMailButtonWidget.fromIcon( icon: _imagePaths.icMore, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - borderRadius: MobileAppBarComposerWidgetStyle.iconRadius, backgroundColor: Colors.transparent, - padding: MobileAppBarComposerWidgetStyle.iconPadding, iconSize: MobileAppBarComposerWidgetStyle.iconSize, tooltipMessage: AppLocalizations.of(context).more, onTapActionAtPositionCallback: openContextMenuAction, 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 6cbc94eb79..0b766ba8a7 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -416,7 +416,6 @@ class MailboxDashBoardController extends ReloadableController { _emailAddressStreamSubscription = _emailReceiveManager.pendingEmailAddressInfo.stream.listen((emailAddress) { if (emailAddress?.email?.isNotEmpty == true) { - _emailReceiveManager.clearPendingEmailAddress(); goToComposer(ComposerArguments.fromEmailAddress(emailAddress!)); } }); @@ -426,7 +425,6 @@ class MailboxDashBoardController extends ReloadableController { _emailContentStreamSubscription = _emailReceiveManager.pendingEmailContentInfo.stream.listen((emailContent) { if (emailContent?.content.isNotEmpty == true) { - _emailReceiveManager.clearPendingEmailContent(); goToComposer(ComposerArguments.fromContentShared([emailContent!].asHtmlString)); } }); @@ -436,7 +434,6 @@ class MailboxDashBoardController extends ReloadableController { _fileReceiveManagerStreamSubscription = _emailReceiveManager.pendingFileInfo.stream.listen((listFile) { if (listFile.isNotEmpty) { - _emailReceiveManager.clearPendingFileInfo(); goToComposer(ComposerArguments.fromFileShared(listFile)); } }); diff --git a/lib/features/upload/presentation/controller/upload_controller.dart b/lib/features/upload/presentation/controller/upload_controller.dart index b32d4425db..37569703b1 100644 --- a/lib/features/upload/presentation/controller/upload_controller.dart +++ b/lib/features/upload/presentation/controller/upload_controller.dart @@ -170,9 +170,6 @@ class UploadController extends BaseController { cid: uuid.v1() ); - final uploadFileState = _uploadingStateInlineFiles.getUploadFileStateById(success.uploadId); - log('UploadController::_handleProgressUploadInlineImageStateStream:uploadId: ${uploadFileState?.uploadTaskId} | fromFileShared: ${uploadFileState?.file?.isShared}'); - _uploadingStateInlineFiles.updateElementByUploadTaskId( success.uploadId, (currentState) { diff --git a/lib/main/utils/email_receive_manager.dart b/lib/main/utils/email_receive_manager.dart index 4b0943c554..2d2c84c6c2 100644 --- a/lib/main/utils/email_receive_manager.dart +++ b/lib/main/utils/email_receive_manager.dart @@ -29,16 +29,16 @@ class EmailReceiveManager { } void setPendingEmailAddress(EmailAddress emailAddress) async { - clearPendingEmailAddress(); + _clearPendingEmailAddress(); _pendingEmailAddressInfo.add(emailAddress); } void setPendingEmailContent(EmailContent emailContent) async { - clearPendingEmailAddress(); + _clearPendingEmailContent(); _pendingEmailContentInfo.add(emailContent); } - void clearPendingEmailContent() { + void _clearPendingEmailContent() { if (_pendingEmailContentInfo.isClosed) { _pendingEmailContentInfo = BehaviorSubject.seeded(null); } else { @@ -46,7 +46,7 @@ class EmailReceiveManager { } } - void clearPendingEmailAddress() { + void _clearPendingEmailAddress() { if(_pendingEmailAddressInfo.isClosed) { _pendingEmailAddressInfo = BehaviorSubject.seeded(null); } else { @@ -56,22 +56,20 @@ class EmailReceiveManager { void closeEmailReceiveManagerStream() { _pendingEmailAddressInfo.close(); + _pendingEmailContentInfo.close(); + _pendingFileInfo.close(); } void setPendingFileInfo(List list) async { - clearPendingFileInfo(); + _clearPendingFileInfo(); _pendingFileInfo.add(list); } - void clearPendingFileInfo() { + void _clearPendingFileInfo() { if(_pendingFileInfo.isClosed) { _pendingFileInfo = BehaviorSubject.seeded(List.empty(growable: true)); } else { _pendingFileInfo.add(List.empty(growable: true)); } } - - void closeFileSharingStream() { - _pendingFileInfo.close(); - } } \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index c2272824e9..a5478ce23b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -437,7 +437,7 @@ packages: description: path: "." ref: cnb_supported - resolved-ref: "6409f47b01c5992906971f2d8fdb8be3278bf787" + resolved-ref: "532bc9de03c273ec88db7bd66436c808b570a934" url: "https://github.com/linagora/enough_html_editor.git" source: git version: "0.0.5"