diff --git a/assets/images/ic_bad_signature.svg b/assets/images/ic_bad_signature.svg
new file mode 100644
index 000000000..32c50a0a4
--- /dev/null
+++ b/assets/images/ic_bad_signature.svg
@@ -0,0 +1,5 @@
+
diff --git a/assets/images/ic_good_signature.svg b/assets/images/ic_good_signature.svg
new file mode 100644
index 000000000..d08c8771f
--- /dev/null
+++ b/assets/images/ic_good_signature.svg
@@ -0,0 +1,5 @@
+
diff --git a/core/lib/presentation/resources/image_paths.dart b/core/lib/presentation/resources/image_paths.dart
index 31228104a..eca728238 100644
--- a/core/lib/presentation/resources/image_paths.dart
+++ b/core/lib/presentation/resources/image_paths.dart
@@ -216,6 +216,8 @@ class ImagePaths {
String get icRemoveRule => _getImagePath('ic_remove_rule.svg');
String get icCheckboxUnselected => _getImagePath('ic_checkbox_unselected.svg');
String get icCheckboxSelected => _getImagePath('ic_checkbox_selected.svg');
+ String get icGoodSignature => _getImagePath('ic_good_signature.svg');
+ String get icBadSignature => _getImagePath('ic_bad_signature.svg');
String _getImagePath(String imageName) {
return AssetsPaths.images + imageName;
diff --git a/lib/features/email/presentation/model/smime_signature_status.dart b/lib/features/email/presentation/model/smime_signature_status.dart
index 2f70565a1..141e7329f 100644
--- a/lib/features/email/presentation/model/smime_signature_status.dart
+++ b/lib/features/email/presentation/model/smime_signature_status.dart
@@ -1,5 +1,32 @@
+
+import 'package:core/presentation/resources/image_paths.dart';
+import 'package:flutter/material.dart';
+import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
+
enum SMimeSignatureStatus {
goodSignature,
badSignature,
- notSigned
+ notSigned;
+
+ String getIcon(ImagePaths imagePaths) {
+ switch(this) {
+ case SMimeSignatureStatus.goodSignature:
+ return imagePaths.icGoodSignature;
+ case SMimeSignatureStatus.badSignature:
+ return imagePaths.icBadSignature;
+ case SMimeSignatureStatus.notSigned:
+ return '';
+ }
+ }
+
+ String getTooltipMessage(BuildContext context) {
+ switch(this) {
+ case SMimeSignatureStatus.goodSignature:
+ return AppLocalizations.of(context).sMimeGoodSignatureMessage;
+ case SMimeSignatureStatus.badSignature:
+ return AppLocalizations.of(context).sMimeBadSignatureMessage;
+ case SMimeSignatureStatus.notSigned:
+ return '';
+ }
+ }
}
\ No newline at end of file
diff --git a/lib/features/email/presentation/widgets/information_sender_and_receiver_builder.dart b/lib/features/email/presentation/widgets/information_sender_and_receiver_builder.dart
index d28f0d1db..c9f164bfa 100644
--- a/lib/features/email/presentation/widgets/information_sender_and_receiver_builder.dart
+++ b/lib/features/email/presentation/widgets/information_sender_and_receiver_builder.dart
@@ -3,11 +3,14 @@ import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/button/tmail_button_widget.dart';
import 'package:flutter/material.dart';
+import 'package:flutter_svg/flutter_svg.dart';
import 'package:model/email/email_action_type.dart';
import 'package:model/email/presentation_email.dart';
import 'package:model/extensions/presentation_email_extension.dart';
import 'package:tmail_ui_user/features/base/widget/email_avatar_builder.dart';
+import 'package:tmail_ui_user/features/email/presentation/extensions/presentation_email_extension.dart';
import 'package:tmail_ui_user/features/email/presentation/model/email_unsubscribe.dart';
+import 'package:tmail_ui_user/features/email/presentation/model/smime_signature_status.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/email_receiver_widget.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/email_sender_builder.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_app_bar_widget.dart';
@@ -61,6 +64,17 @@ class InformationSenderAndReceiverBuilder extends StatelessWidget {
openEmailAddressDetailAction: openEmailAddressDetailAction,
)
)),
+ if (emailSelected.sMimeStatus != SMimeSignatureStatus.notSigned)
+ Tooltip(
+ message: emailSelected.sMimeStatus.getTooltipMessage(context),
+ child: MouseRegion(
+ cursor: SystemMouseCursors.click,
+ child: SvgPicture.asset(
+ emailSelected.sMimeStatus.getIcon(imagePaths),
+ fit: BoxFit.fill,
+ ),
+ ),
+ ),
if (!emailSelected.isSubscribed && emailUnsubscribe != null && !responsiveUtils.isPortraitMobile(context))
TMailButtonWidget.fromText(
text: AppLocalizations.of(context).unsubscribe,
diff --git a/lib/l10n/intl_messages.arb b/lib/l10n/intl_messages.arb
index 870f8bed6..ddb80ff94 100644
--- a/lib/l10n/intl_messages.arb
+++ b/lib/l10n/intl_messages.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2024-07-17T01:36:03.095458",
+ "@@last_modified": "2024-08-05T16:49:32.139855",
"initializing_data": "Initializing data...",
"@initializing_data": {
"type": "text",
@@ -3963,5 +3963,17 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "sMimeGoodSignatureMessage": "The authenticity of this message had been verified with SMime signature.",
+ "@sMimeGoodSignatureMessage": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "sMimeBadSignatureMessage": "This message failed SMime signature verification.",
+ "@sMimeBadSignatureMessage": {
+ "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 86a25edd8..0538c1253 100644
--- a/lib/main/localizations/app_localizations.dart
+++ b/lib/main/localizations/app_localizations.dart
@@ -4148,4 +4148,18 @@ class AppLocalizations {
name: 'dialogMessageSessionHasExpired',
);
}
+
+ String get sMimeGoodSignatureMessage {
+ return Intl.message(
+ 'The authenticity of this message had been verified with SMime signature.',
+ name: 'sMimeGoodSignatureMessage',
+ );
+ }
+
+ String get sMimeBadSignatureMessage {
+ return Intl.message(
+ 'This message failed SMime signature verification.',
+ name: 'sMimeBadSignatureMessage',
+ );
+ }
}
\ No newline at end of file