From 9a5fa290356b1f2fd99d45d04c1422ff1466cba2 Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 19 Oct 2022 16:22:12 +0700 Subject: [PATCH] TF-657 Show notification message dialog when email has read receipt requested --- assets/images/ic_read_receipt_message.svg | 7 ++ contact/pubspec.lock | 18 +-- .../presentation/resources/image_paths.dart | 1 + .../dialog/confirmation_dialog_builder.dart | 116 +++++++++++------- core/pubspec.lock | 4 +- forward/pubspec.lock | 16 +-- ios/Podfile.lock | 2 +- .../mixin/message_dialog_action_mixin.dart | 64 ++++++++-- .../presentation/composer_controller.dart | 19 ++- .../email/presentation/email_controller.dart | 18 +++ lib/l10n/intl_messages.arb | 26 +++- lib/main/localizations/app_localizations.dart | 26 ++++ model/pubspec.lock | 16 +-- pubspec.lock | 20 +-- rule_filter/pubspec.lock | 16 +-- 15 files changed, 254 insertions(+), 115 deletions(-) create mode 100644 assets/images/ic_read_receipt_message.svg diff --git a/assets/images/ic_read_receipt_message.svg b/assets/images/ic_read_receipt_message.svg new file mode 100644 index 000000000..31fffd563 --- /dev/null +++ b/assets/images/ic_read_receipt_message.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/contact/pubspec.lock b/contact/pubspec.lock index 9b439da8e..4cf82f3a3 100644 --- a/contact/pubspec.lock +++ b/contact/pubspec.lock @@ -77,7 +77,7 @@ packages: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "7.2.4" + version: "7.2.6" built_collection: dependency: transitive description: @@ -140,7 +140,7 @@ packages: name: convert url: "https://pub.dartlang.org" source: hosted - version: "3.0.2" + version: "3.1.0" core: dependency: transitive description: @@ -420,7 +420,7 @@ packages: description: path: "." ref: master - resolved-ref: "5a27adb39dd8690ebbbea13171128633fe7aeae0" + resolved-ref: ab07a8a03d63e20f6ea5e62bcc1ca8cdc1fd93ff url: "https://github.com/linagora/jmap-dart-client.git" source: git version: "0.0.1" @@ -458,7 +458,7 @@ packages: name: logging url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.1.0" matcher: dependency: transitive description: @@ -563,7 +563,7 @@ packages: name: pub_semver url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.2" pubspec_parse: dependency: transitive description: @@ -603,7 +603,7 @@ packages: name: source_gen url: "https://pub.dartlang.org" source: hosted - version: "1.2.5" + version: "1.2.6" source_helper: dependency: transitive description: @@ -652,7 +652,7 @@ packages: name: stream_transform url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.1" string_scanner: dependency: transitive description: @@ -785,7 +785,7 @@ packages: name: watcher url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.0.2" web_socket_channel: dependency: transitive description: @@ -806,7 +806,7 @@ packages: name: webview_flutter_android url: "https://pub.dartlang.org" source: hosted - version: "2.10.3" + version: "2.10.4" webview_flutter_platform_interface: dependency: transitive description: diff --git a/core/lib/presentation/resources/image_paths.dart b/core/lib/presentation/resources/image_paths.dart index 92961fd4d..0c7cd3fc9 100644 --- a/core/lib/presentation/resources/image_paths.dart +++ b/core/lib/presentation/resources/image_paths.dart @@ -165,6 +165,7 @@ class ImagePaths { String get icDownloadAttachment => _getImagePath('ic_download_attachment.svg'); String get icAppDashboard => _getImagePath('ic_app_dashboard.svg'); String get icRequestReadReceipt => _getImagePath('ic_request_read_receipt.svg'); + String get icReadReceiptMessage => _getImagePath('ic_read_receipt_message.svg'); String _getImagePath(String imageName) { return AssetsPaths.images + imageName; diff --git a/core/lib/presentation/views/dialog/confirmation_dialog_builder.dart b/core/lib/presentation/views/dialog/confirmation_dialog_builder.dart index 49a5b60c7..fe920d53a 100644 --- a/core/lib/presentation/views/dialog/confirmation_dialog_builder.dart +++ b/core/lib/presentation/views/dialog/confirmation_dialog_builder.dart @@ -27,12 +27,18 @@ class ConfirmDialogBuilder { EdgeInsets? _paddingContent; EdgeInsets? _paddingButton; EdgeInsets? _marginIcon; + EdgeInsets? _margin; + double? _widthDialog; + bool showAsBottomSheet; OnConfirmButtonAction? _onConfirmButtonAction; OnCancelButtonAction? _onCancelButtonAction; OnCloseButtonAction? _onCloseButtonAction; - ConfirmDialogBuilder(this._imagePath); + ConfirmDialogBuilder( + this._imagePath, + {this.showAsBottomSheet = false} + ); void key(Key key) { _key = key; @@ -94,6 +100,14 @@ class ConfirmDialogBuilder { _marginIcon = value; } + void margin(EdgeInsets? value) { + _margin = value; + } + + void widthDialog(double? value) { + _widthDialog = value; + } + void onConfirmButtonAction(String confirmText, OnConfirmButtonAction? onConfirmButtonAction) { _confirmText = confirmText; _onConfirmButtonAction = onConfirmButtonAction; @@ -109,27 +123,38 @@ class ConfirmDialogBuilder { } Widget build() { - return Dialog( - key: _key, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(16))), - insetPadding: EdgeInsets.symmetric(horizontal: 24.0, vertical: 16.0), - child: Container( - margin: EdgeInsets.zero, - padding: EdgeInsets.zero, - width: 400, + if (showAsBottomSheet) { + return _bodyContent(); + } else { + return Dialog( + key: _key, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(16))), + insetPadding: EdgeInsets.symmetric( + horizontal: 24.0, + vertical: 16.0), + child: _bodyContent(), + ); + } + } + + Widget _bodyContent() { + return Container( + width: _widthDialog ?? 400, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(16))), + margin: _margin, child: Wrap(children: [ if (_onCloseButtonAction != null) Align( - alignment: Alignment.centerRight, - child: Padding( - padding: EdgeInsets.only(top: 8, right: 8), - child: buildIconWeb( - icon: SvgPicture.asset(_imagePath.icCloseMailbox, fit: BoxFit.fill), - onTap: () => _onCloseButtonAction?.call()) - )), + alignment: Alignment.centerRight, + child: Padding( + padding: EdgeInsets.only(top: 8, right: 8), + child: buildIconWeb( + icon: SvgPicture.asset(_imagePath.icCloseMailbox, fit: BoxFit.fill), + onTap: () => _onCloseButtonAction?.call()) + )), if (_iconWidget != null) Container( margin: _marginIcon ?? EdgeInsets.only(top: 24), @@ -138,48 +163,47 @@ class ConfirmDialogBuilder { ), if (_title.isNotEmpty) Padding( - padding: _paddingTitle ?? EdgeInsets.only(top: 12), - child: Center( - child: Text( - _title, - textAlign: TextAlign.center, - style: _styleTitle ?? TextStyle(fontSize: 20.0, color: AppColor.colorActionDeleteConfirmDialog, fontWeight: FontWeight.w500) + padding: _paddingTitle ?? EdgeInsets.only(top: 12), + child: Center( + child: Text( + _title, + textAlign: TextAlign.center, + style: _styleTitle ?? TextStyle(fontSize: 20.0, color: AppColor.colorActionDeleteConfirmDialog, fontWeight: FontWeight.w500) + ) ) - ) ), if (_content.isNotEmpty) Padding( padding: _paddingContent ?? EdgeInsets.symmetric(horizontal: 16, vertical: 24), child: Center( child: Text(_content, - textAlign: TextAlign.center, - style: _styleContent ?? TextStyle(fontSize: 17.0, color: AppColor.colorMessageDialog) + textAlign: TextAlign.center, + style: _styleContent ?? TextStyle(fontSize: 17.0, color: AppColor.colorMessageDialog) ), ), ), Padding( - padding: _paddingButton ?? EdgeInsets.only(bottom: 16, left: 16, right: 16), - child: Row( - children: [ - if (_cancelText.isNotEmpty) - Expanded(child: _buildButton( - name: _cancelText, - bgColor: _colorCancelButton, - radius: _radiusButton, - textStyle: _styleTextCancelButton, - action: _onCancelButtonAction)), - if (_confirmText.isNotEmpty && _cancelText.isNotEmpty) SizedBox(width: 16), - if (_confirmText.isNotEmpty) - Expanded(child: _buildButton( - name: _confirmText, - bgColor: _colorConfirmButton, - radius: _radiusButton, - textStyle: _styleTextConfirmButton, - action: _onConfirmButtonAction)) - ] - )) + padding: _paddingButton ?? EdgeInsets.only(bottom: 16, left: 16, right: 16), + child: Row( + children: [ + if (_cancelText.isNotEmpty) + Expanded(child: _buildButton( + name: _cancelText, + bgColor: _colorCancelButton, + radius: _radiusButton, + textStyle: _styleTextCancelButton, + action: _onCancelButtonAction)), + if (_confirmText.isNotEmpty && _cancelText.isNotEmpty) SizedBox(width: 16), + if (_confirmText.isNotEmpty) + Expanded(child: _buildButton( + name: _confirmText, + bgColor: _colorConfirmButton, + radius: _radiusButton, + textStyle: _styleTextConfirmButton, + action: _onConfirmButtonAction)) + ] + )) ]) - ), ); } diff --git a/core/pubspec.lock b/core/pubspec.lock index f2c3cc95a..974cde380 100644 --- a/core/pubspec.lock +++ b/core/pubspec.lock @@ -246,7 +246,7 @@ packages: name: http_parser url: "https://pub.dartlang.org" source: hosted - version: "4.0.1" + version: "4.0.2" js: dependency: transitive description: @@ -482,7 +482,7 @@ packages: name: webview_flutter_android url: "https://pub.dartlang.org" source: hosted - version: "2.10.3" + version: "2.10.4" webview_flutter_platform_interface: dependency: transitive description: diff --git a/forward/pubspec.lock b/forward/pubspec.lock index 2cec9c0d1..ea090ecff 100644 --- a/forward/pubspec.lock +++ b/forward/pubspec.lock @@ -77,7 +77,7 @@ packages: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "7.2.4" + version: "7.2.6" built_collection: dependency: transitive description: @@ -140,7 +140,7 @@ packages: name: convert url: "https://pub.dartlang.org" source: hosted - version: "3.0.2" + version: "3.1.0" crypto: dependency: transitive description: @@ -268,7 +268,7 @@ packages: description: path: "." ref: master - resolved-ref: "5a27adb39dd8690ebbbea13171128633fe7aeae0" + resolved-ref: ab07a8a03d63e20f6ea5e62bcc1ca8cdc1fd93ff url: "https://github.com/linagora/jmap-dart-client.git" source: git version: "0.0.1" @@ -306,7 +306,7 @@ packages: name: logging url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.1.0" matcher: dependency: transitive description: @@ -369,7 +369,7 @@ packages: name: pub_semver url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.2" pubspec_parse: dependency: transitive description: @@ -409,7 +409,7 @@ packages: name: source_gen url: "https://pub.dartlang.org" source: hosted - version: "1.2.5" + version: "1.2.6" source_helper: dependency: transitive description: @@ -444,7 +444,7 @@ packages: name: stream_transform url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.1" string_scanner: dependency: transitive description: @@ -493,7 +493,7 @@ packages: name: watcher url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.0.2" web_socket_channel: dependency: transitive description: diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 3ef56b7bf..e02083e49 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -246,4 +246,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 91efd4097cc41f032416d67ecaac21cc2de8dd55 -COCOAPODS: 1.11.3 +COCOAPODS: 1.11.2 diff --git a/lib/features/base/mixin/message_dialog_action_mixin.dart b/lib/features/base/mixin/message_dialog_action_mixin.dart index bc3063fa6..e13e6c891 100644 --- a/lib/features/base/mixin/message_dialog_action_mixin.dart +++ b/lib/features/base/mixin/message_dialog_action_mixin.dart @@ -15,18 +15,58 @@ mixin MessageDialogActionMixin { BuildContext context, String message, String actionName, - Function onConfirmAction, - {String? title, bool hasCancelButton = true, Widget? icon} + { + Function? onConfirmAction, + String? title, + String? cancelTitle, + bool hasCancelButton = true, + bool showAsBottomSheet = false, + Widget? icon + } ) { if (_responsiveUtils.isMobile(context)) { - (ConfirmationDialogActionSheetBuilder(context) - ..messageText(message) - ..styleConfirmButton(const TextStyle(fontSize: 20, fontWeight: FontWeight.normal, color: Colors.black)) - ..onCancelAction(AppLocalizations.of(context).cancel, () => popBack()) - ..onConfirmAction(actionName, () { - popBack(); - onConfirmAction.call(); - })).show(); + if (showAsBottomSheet) { + showModalBottomSheet( + context: context, + isScrollControlled: true, + barrierColor: AppColor.colorDefaultCupertinoActionSheet, + backgroundColor: Colors.transparent, + enableDrag: true, + builder: (BuildContext context) => PointerInterceptor( + child: (ConfirmDialogBuilder(_imagePaths, showAsBottomSheet: true) + ..key(const Key('confirm_dialog_action')) + ..title(title ?? '') + ..content(message) + ..addIcon(icon) + ..margin(const EdgeInsets.symmetric(vertical: 42, horizontal: 16)) + ..widthDialog(_responsiveUtils.getSizeScreenWidth(context)) + ..colorConfirmButton(AppColor.colorTextButton) + ..colorCancelButton(AppColor.colorCancelButton) + ..paddingTitle(icon != null ? const EdgeInsets.only(top: 34) : EdgeInsets.zero) + ..marginIcon(EdgeInsets.zero) + ..paddingContent(const EdgeInsets.only(left: 44, right: 44, bottom: 24, top: 8)) + ..paddingButton(hasCancelButton ? null : const EdgeInsets.only(bottom: 16, left: 44, right: 44)) + ..styleTitle(const TextStyle(fontSize: 20, fontWeight: FontWeight.bold, color: Colors.black)) + ..styleContent(const TextStyle(fontSize: 14, fontWeight: FontWeight.normal, color: AppColor.colorContentEmail)) + ..styleTextCancelButton(const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: AppColor.colorTextButton)) + ..styleTextConfirmButton(const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: Colors.white)) + ..onConfirmButtonAction(actionName, () { + popBack(); + onConfirmAction?.call(); + }) + ..onCancelButtonAction(hasCancelButton ? cancelTitle ?? AppLocalizations.of(context).cancel : '', () => popBack()) + ..onCloseButtonAction(() => popBack())) + .build())); + } else { + (ConfirmationDialogActionSheetBuilder(context) + ..messageText(message) + ..styleConfirmButton(const TextStyle(fontSize: 20, fontWeight: FontWeight.normal, color: Colors.black)) + ..onCancelAction(cancelTitle ?? AppLocalizations.of(context).cancel, () => popBack()) + ..onConfirmAction(actionName, () { + popBack(); + onConfirmAction?.call(); + })).show(); + } } else { showDialog( context: context, @@ -48,9 +88,9 @@ mixin MessageDialogActionMixin { ..styleTextConfirmButton(const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: Colors.white)) ..onConfirmButtonAction(actionName, () { popBack(); - onConfirmAction.call(); + onConfirmAction?.call(); }) - ..onCancelButtonAction(hasCancelButton ? AppLocalizations.of(context).cancel : '', () => popBack()) + ..onCancelButtonAction(hasCancelButton ? cancelTitle ?? AppLocalizations.of(context).cancel : '', () => popBack()) ..onCloseButtonAction(() => popBack())) .build())); } diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 836fe422f..caf1ca4f3 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -637,7 +637,7 @@ class ComposerController extends BaseController { showConfirmDialogAction(context, AppLocalizations.of(context).message_dialog_send_email_without_recipient, AppLocalizations.of(context).add_recipients, - () => {}, + onConfirmAction: () => {}, title: AppLocalizations.of(context).sending_failed, icon: SvgPicture.asset(_imagePaths.icSendToastError, fit: BoxFit.fill), hasCancelButton: false); @@ -652,7 +652,7 @@ class ComposerController extends BaseController { showConfirmDialogAction(context, AppLocalizations.of(context).message_dialog_send_email_with_email_address_invalid, AppLocalizations.of(context).fix_email_addresses, - () { + onConfirmAction: () { toAddressExpandMode.value = ExpandMode.EXPAND; ccAddressExpandMode.value = ExpandMode.EXPAND; bccAddressExpandMode.value = ExpandMode.EXPAND; @@ -667,7 +667,7 @@ class ComposerController extends BaseController { showConfirmDialogAction(context, AppLocalizations.of(context).message_dialog_send_email_without_a_subject, AppLocalizations.of(context).send_anyway, - () => _handleSendMessages(context), + onConfirmAction: () => _handleSendMessages(context), title: AppLocalizations.of(context).empty_subject, icon: SvgPicture.asset(_imagePaths.icEmpty, fit: BoxFit.fill), ); @@ -679,7 +679,7 @@ class ComposerController extends BaseController { context, AppLocalizations.of(context).messageDialogSendEmailUploadingAttachment, AppLocalizations.of(context).got_it, - () => {}, + onConfirmAction: () => {}, title: AppLocalizations.of(context).sending_failed, icon: SvgPicture.asset(_imagePaths.icSendToastError, fit: BoxFit.fill), hasCancelButton: false); @@ -692,7 +692,7 @@ class ComposerController extends BaseController { AppLocalizations.of(context).message_dialog_send_email_exceeds_maximum_size( filesize(mailboxDashBoardController.maxSizeAttachmentsPerEmail?.value ?? 0, 0)), AppLocalizations.of(context).got_it, - () => {}, + onConfirmAction: () => {}, title: AppLocalizations.of(context).sending_failed, icon: SvgPicture.asset(_imagePaths.icSendToastError, fit: BoxFit.fill), hasCancelButton: false); @@ -707,7 +707,6 @@ class ComposerController extends BaseController { final accountId = mailboxDashBoardController.accountId.value; final sentMailboxId = mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent]; final outboxMailboxId = mailboxDashBoardController.outboxMailbox?.id; - log('ComposerController::_handleSendMessages(): outboxMailboxId: $outboxMailboxId'); final userProfile = mailboxDashBoardController.userProfile.value; if (arguments != null && accountId != null && userProfile != null) { final email = await _generateEmail(context, userProfile, outboxMailboxId: outboxMailboxId); @@ -842,7 +841,7 @@ class ComposerController extends BaseController { AppLocalizations.of(currentContext!).message_dialog_upload_attachments_exceeds_maximum_size( filesize(mailboxDashBoardController.maxSizeAttachmentsPerEmail?.value ?? 0, 0)), AppLocalizations.of(currentContext!).got_it, - () => {}, + onConfirmAction: () => {}, title: AppLocalizations.of(currentContext!).maximum_files_size, hasCancelButton: false); } @@ -1027,7 +1026,7 @@ class ComposerController extends BaseController { AppLocalizations.of(currentContext!).message_dialog_upload_attachments_exceeds_maximum_size( filesize(mailboxDashBoardController.maxSizeAttachmentsPerEmail?.value ?? 0, 0)), AppLocalizations.of(currentContext!).got_it, - () => {}, + onConfirmAction: () => {}, title: AppLocalizations.of(currentContext!).maximum_files_size, hasCancelButton: false, ); @@ -1038,7 +1037,7 @@ class ComposerController extends BaseController { if(arguments.emailContents != null && arguments.emailContents!.isNotEmpty) { _emailContents = arguments.emailContents; - emailContentsViewState.value = Right(GetEmailContentSuccess(_emailContents!,[],[])); + emailContentsViewState.value = Right(GetEmailContentSuccess(_emailContents!, [], [], false)); } else { final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl(); final accountId = mailboxDashBoardController.sessionCurrent?.accounts.keys.first; @@ -1339,7 +1338,7 @@ class ComposerController extends BaseController { AppLocalizations.of(currentContext!).message_dialog_upload_attachments_exceeds_maximum_size( filesize(mailboxDashBoardController.maxSizeAttachmentsPerEmail?.value ?? 0, 0)), AppLocalizations.of(currentContext!).got_it, - () => {}, + onConfirmAction: () => {}, title: AppLocalizations.of(currentContext!).maximum_files_size, hasCancelButton: false); } diff --git a/lib/features/email/presentation/email_controller.dart b/lib/features/email/presentation/email_controller.dart index 1f40e3227..59d8d879d 100644 --- a/lib/features/email/presentation/email_controller.dart +++ b/lib/features/email/presentation/email_controller.dart @@ -215,6 +215,24 @@ class EmailController extends BaseController with AppLoaderMixin { emailContents.value = success.emailContentsDisplayed; initialEmailContents = success.emailContents; attachments.value = success.attachments; + + if (success.readReceiptRequested) { + _handleReadReceipt(); + } + } + + void _handleReadReceipt() { + if (currentContext != null) { + showConfirmDialogAction(currentContext!, + AppLocalizations.of(currentContext!).subTitleReadReceiptRequestNotificationMessage, + AppLocalizations.of(currentContext!).yes, + onConfirmAction: () => {}, + showAsBottomSheet: true, + title: AppLocalizations.of(currentContext!).titleReadReceiptRequestNotificationMessage, + cancelTitle: AppLocalizations.of(currentContext!).no, + icon: SvgPicture.asset(imagePaths.icReadReceiptMessage, fit: BoxFit.fill), + ); + } } void _resetToOriginalValue() { diff --git a/lib/l10n/intl_messages.arb b/lib/l10n/intl_messages.arb index a6cd91566..066ab4e1e 100644 --- a/lib/l10n/intl_messages.arb +++ b/lib/l10n/intl_messages.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2022-10-19T11:34:56.881127", + "@@last_modified": "2022-10-19T15:56:55.354560", "initializing_data": "Initializing data...", "@initializing_data": { "type": "text", @@ -2301,5 +2301,29 @@ "type": "text", "placeholders_order": [], "placeholders": {} + }, + "titleReadReceiptRequestNotificationMessage": "Read receipt request", + "@titleReadReceiptRequestNotificationMessage": { + "type": "text", + "placeholders_order": [], + "placeholders": {} + }, + "subTitleReadReceiptRequestNotificationMessage": "The sender has requested a Read receipt for this email. Send Read receipt?", + "@subTitleReadReceiptRequestNotificationMessage": { + "type": "text", + "placeholders_order": [], + "placeholders": {} + }, + "yes": "Yes", + "@yes": { + "type": "text", + "placeholders_order": [], + "placeholders": {} + }, + "no": "No", + "@no": { + "type": "text", + "placeholders_order": [], + "placeholders": {} } } \ No newline at end of file diff --git a/lib/main/localizations/app_localizations.dart b/lib/main/localizations/app_localizations.dart index f0c2c4cd5..6a0d4b56f 100644 --- a/lib/main/localizations/app_localizations.dart +++ b/lib/main/localizations/app_localizations.dart @@ -2383,4 +2383,30 @@ class AppLocalizations { name: 'appGridTittle' ); } + + String get titleReadReceiptRequestNotificationMessage { + return Intl.message( + 'Read receipt request', + name: 'titleReadReceiptRequestNotificationMessage', + ); + } + + String get subTitleReadReceiptRequestNotificationMessage { + return Intl.message( + 'The sender has requested a Read receipt for this email. Send Read receipt?', + name: 'subTitleReadReceiptRequestNotificationMessage', + ); + } + + String get yes { + return Intl.message( + 'Yes', + name: 'yes'); + } + + String get no { + return Intl.message( + 'No', + name: 'no'); + } } \ No newline at end of file diff --git a/model/pubspec.lock b/model/pubspec.lock index 4ddaa0f1a..db02f4cb2 100644 --- a/model/pubspec.lock +++ b/model/pubspec.lock @@ -77,7 +77,7 @@ packages: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "7.2.4" + version: "7.2.6" built_collection: dependency: transitive description: @@ -147,7 +147,7 @@ packages: name: convert url: "https://pub.dartlang.org" source: hosted - version: "3.0.2" + version: "3.1.0" core: dependency: "direct main" description: @@ -413,7 +413,7 @@ packages: description: path: "." ref: master - resolved-ref: "5a27adb39dd8690ebbbea13171128633fe7aeae0" + resolved-ref: ab07a8a03d63e20f6ea5e62bcc1ca8cdc1fd93ff url: "https://github.com/linagora/jmap-dart-client.git" source: git version: "0.0.1" @@ -444,7 +444,7 @@ packages: name: logging url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.1.0" matcher: dependency: transitive description: @@ -535,7 +535,7 @@ packages: name: pub_semver url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.2" pubspec_parse: dependency: transitive description: @@ -624,7 +624,7 @@ packages: name: stream_transform url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.1" string_scanner: dependency: transitive description: @@ -757,7 +757,7 @@ packages: name: watcher url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.0.2" web_socket_channel: dependency: transitive description: @@ -778,7 +778,7 @@ packages: name: webview_flutter_android url: "https://pub.dartlang.org" source: hosted - version: "2.10.3" + version: "2.10.4" webview_flutter_platform_interface: dependency: transitive description: diff --git a/pubspec.lock b/pubspec.lock index 1f536d08a..aed2984a5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -21,7 +21,7 @@ packages: name: archive url: "https://pub.dartlang.org" source: hosted - version: "3.3.1" + version: "3.3.2" args: dependency: transitive description: @@ -91,7 +91,7 @@ packages: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "7.2.4" + version: "7.2.6" built_collection: dependency: "direct main" description: @@ -182,7 +182,7 @@ packages: name: connectivity_plus_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.2.1" + version: "1.2.2" connectivity_plus_web: dependency: transitive description: @@ -365,7 +365,7 @@ packages: description: path: "." ref: email_supported - resolved-ref: d81ae0169ae5030c0f250ac203056a2479dfd83a + resolved-ref: "241d7ba620137d6534cc9bbb5fd10e182b93b94a" url: "https://github.com/linagora/enough_html_editor.git" source: git version: "0.0.5" @@ -723,7 +723,7 @@ packages: name: image url: "https://pub.dartlang.org" source: hosted - version: "3.2.0" + version: "3.2.2" infinite_listview: dependency: transitive description: @@ -1005,7 +1005,7 @@ packages: name: permission_handler_apple url: "https://pub.dartlang.org" source: hosted - version: "9.0.6" + version: "9.0.7" permission_handler_platform_interface: dependency: transitive description: @@ -1019,7 +1019,7 @@ packages: name: permission_handler_windows url: "https://pub.dartlang.org" source: hosted - version: "0.1.1" + version: "0.1.2" petitparser: dependency: transitive description: @@ -1075,7 +1075,7 @@ packages: name: pub_semver url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.2" pubspec_parse: dependency: transitive description: @@ -1273,7 +1273,7 @@ packages: name: syncfusion_flutter_core url: "https://pub.dartlang.org" source: hosted - version: "20.3.49" + version: "20.3.50" syncfusion_flutter_datepicker: dependency: transitive description: @@ -1434,7 +1434,7 @@ packages: name: watcher url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.0.2" web_socket_channel: dependency: transitive description: diff --git a/rule_filter/pubspec.lock b/rule_filter/pubspec.lock index 2cec9c0d1..ea090ecff 100644 --- a/rule_filter/pubspec.lock +++ b/rule_filter/pubspec.lock @@ -77,7 +77,7 @@ packages: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "7.2.4" + version: "7.2.6" built_collection: dependency: transitive description: @@ -140,7 +140,7 @@ packages: name: convert url: "https://pub.dartlang.org" source: hosted - version: "3.0.2" + version: "3.1.0" crypto: dependency: transitive description: @@ -268,7 +268,7 @@ packages: description: path: "." ref: master - resolved-ref: "5a27adb39dd8690ebbbea13171128633fe7aeae0" + resolved-ref: ab07a8a03d63e20f6ea5e62bcc1ca8cdc1fd93ff url: "https://github.com/linagora/jmap-dart-client.git" source: git version: "0.0.1" @@ -306,7 +306,7 @@ packages: name: logging url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.1.0" matcher: dependency: transitive description: @@ -369,7 +369,7 @@ packages: name: pub_semver url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.2" pubspec_parse: dependency: transitive description: @@ -409,7 +409,7 @@ packages: name: source_gen url: "https://pub.dartlang.org" source: hosted - version: "1.2.5" + version: "1.2.6" source_helper: dependency: transitive description: @@ -444,7 +444,7 @@ packages: name: stream_transform url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.1" string_scanner: dependency: transitive description: @@ -493,7 +493,7 @@ packages: name: watcher url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.0.2" web_socket_channel: dependency: transitive description: