From a1061e148912f40946a5a8fc115a668592d0229f Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 14 Jun 2022 11:45:33 +0700 Subject: [PATCH] TF-644 Update new icon for attachment --- assets/images/ic_file_docx.svg | 4 +++ assets/images/ic_file_epup.svg | 4 +++ assets/images/ic_file_pdf.svg | 7 ++++ assets/images/ic_file_png.svg | 4 +++ assets/images/ic_file_pptx.svg | 5 +++ assets/images/ic_file_xlsx.svg | 4 +++ assets/images/ic_file_zip.svg | 8 +++++ .../extensions/media_type_extension.dart | 10 ++++++ .../preview/supported_preview_file_types.dart | 35 +++++++++++++++++++ .../presentation/resources/image_paths.dart | 7 ++++ .../email/presentation/email_view.dart | 1 + .../extensions/attachment_extension.dart | 28 +++++++++++++++ .../widgets/attachment_file_tile_builder.dart | 30 ++++++++++++---- 13 files changed, 141 insertions(+), 6 deletions(-) create mode 100644 assets/images/ic_file_docx.svg create mode 100644 assets/images/ic_file_epup.svg create mode 100644 assets/images/ic_file_pdf.svg create mode 100644 assets/images/ic_file_png.svg create mode 100644 assets/images/ic_file_pptx.svg create mode 100644 assets/images/ic_file_xlsx.svg create mode 100644 assets/images/ic_file_zip.svg create mode 100644 lib/features/email/presentation/extensions/attachment_extension.dart diff --git a/assets/images/ic_file_docx.svg b/assets/images/ic_file_docx.svg new file mode 100644 index 000000000..f809ecc45 --- /dev/null +++ b/assets/images/ic_file_docx.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/ic_file_epup.svg b/assets/images/ic_file_epup.svg new file mode 100644 index 000000000..7d561c8e1 --- /dev/null +++ b/assets/images/ic_file_epup.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/ic_file_pdf.svg b/assets/images/ic_file_pdf.svg new file mode 100644 index 000000000..f404dee74 --- /dev/null +++ b/assets/images/ic_file_pdf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/images/ic_file_png.svg b/assets/images/ic_file_png.svg new file mode 100644 index 000000000..d1d36d1e8 --- /dev/null +++ b/assets/images/ic_file_png.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/ic_file_pptx.svg b/assets/images/ic_file_pptx.svg new file mode 100644 index 000000000..0c80e9829 --- /dev/null +++ b/assets/images/ic_file_pptx.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/ic_file_xlsx.svg b/assets/images/ic_file_xlsx.svg new file mode 100644 index 000000000..25738a203 --- /dev/null +++ b/assets/images/ic_file_xlsx.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/ic_file_zip.svg b/assets/images/ic_file_zip.svg new file mode 100644 index 000000000..09f67c425 --- /dev/null +++ b/assets/images/ic_file_zip.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/core/lib/domain/extensions/media_type_extension.dart b/core/lib/domain/extensions/media_type_extension.dart index d09d3ae61..79e719af4 100644 --- a/core/lib/domain/extensions/media_type_extension.dart +++ b/core/lib/domain/extensions/media_type_extension.dart @@ -9,5 +9,15 @@ extension MediaTypeExtension on MediaType { bool isImageFile() => SupportedPreviewFileTypes.imageMimeTypes.contains(mimeType); + bool isDocFile() => SupportedPreviewFileTypes.docMimeTypes.contains(mimeType); + + bool isPowerPointFile() => SupportedPreviewFileTypes.pptMimeTypes.contains(mimeType); + + bool isExcelFile() => SupportedPreviewFileTypes.xlsMimeTypes.contains(mimeType); + + bool isZipFile() => SupportedPreviewFileTypes.zipMimeTypes.contains(mimeType); + + bool isPdfFile() => SupportedPreviewFileTypes.pdfMimeTypes.contains(mimeType); + DocumentUti getDocumentUti() => DocumentUti(SupportedPreviewFileTypes.iOSSupportedTypes[mimeType]); } diff --git a/core/lib/domain/preview/supported_preview_file_types.dart b/core/lib/domain/preview/supported_preview_file_types.dart index 378e2e58b..2689a1d1e 100644 --- a/core/lib/domain/preview/supported_preview_file_types.dart +++ b/core/lib/domain/preview/supported_preview_file_types.dart @@ -5,6 +5,41 @@ class SupportedPreviewFileTypes { 'image/gif', 'image/png',]; + static const docMimeTypes = [ + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'application/vnd.oasis.opendocument.text', + 'application/vnd.oasis.opendocument.text-template', + 'application/vnd.oasis.opendocument.text-web', + 'application/vnd.oasis.opendocument.text-master', + 'application/msword', + 'application/vnd.ms-works']; + + static const pdfMimeTypes = [ + 'application/pdf', + 'application/rtf']; + + static const xlsMimeTypes = [ + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'application/vnd.oasis.opendocument.spreadsheet', + 'application/vnd.oasis.opendocument.spreadsheet-template', + 'application/vnd.oasis.opendocument.chart', + 'application/vnd.oasis.opendocument.formula', + 'application/vnd.ms-excel']; + + static const pptMimeTypes = [ + 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'application/vnd.oasis.opendocument.presentation', + 'application/vnd.oasis.opendocument.presentation-template', + 'application/vnd.ms-powerpoint']; + + static const zipMimeTypes = [ + 'application/x-tar', + 'application/x-gtar', + 'application/x-gzip', + 'application/x-compressed', + 'application/x-zip-compressed', + 'application/java-archive']; + static const iOSSupportedTypes = { 'text/plain' : 'public.plain-text', 'text/html' : 'public.html', diff --git a/core/lib/presentation/resources/image_paths.dart b/core/lib/presentation/resources/image_paths.dart index 6e480151e..826b4ea70 100644 --- a/core/lib/presentation/resources/image_paths.dart +++ b/core/lib/presentation/resources/image_paths.dart @@ -118,6 +118,13 @@ class ImagePaths { String get icSelectedSB => _getImagePath('ic_selected_sb.svg'); String get icUserSB => _getImagePath('ic_user_sb.svg'); String get icComposeWeb => _getImagePath('ic_compose_web.svg'); + String get icFileDocx => _getImagePath('ic_file_docx.svg'); + String get icFileZip => _getImagePath('ic_file_zip.svg'); + String get icFileXlsx => _getImagePath('ic_file_xlsx.svg'); + String get icFilePng => _getImagePath('ic_file_png.svg'); + String get icFilePdf => _getImagePath('ic_file_pdf.svg'); + String get icFilePptx => _getImagePath('ic_file_pptx.svg'); + String get icFileEPup => _getImagePath('ic_file_epup.svg'); String _getImagePath(String imageName) { return AssetsPaths.images + imageName; diff --git a/lib/features/email/presentation/email_view.dart b/lib/features/email/presentation/email_view.dart index d3d26a1a7..bb776f9be 100644 --- a/lib/features/email/presentation/email_view.dart +++ b/lib/features/email/presentation/email_view.dart @@ -479,6 +479,7 @@ class EmailView extends GetView with NetworkConnectionMixin { icon: SvgPicture.asset(imagePaths.icExpandAttachment, width: 20, height: 20, + color: AppColor.primaryColor, fit: BoxFit.fill), onPressed: () => emailController.toggleDisplayAttachmentsAction() )) diff --git a/lib/features/email/presentation/extensions/attachment_extension.dart b/lib/features/email/presentation/extensions/attachment_extension.dart new file mode 100644 index 000000000..f31e7ad52 --- /dev/null +++ b/lib/features/email/presentation/extensions/attachment_extension.dart @@ -0,0 +1,28 @@ + +import 'package:core/core.dart'; +import 'package:model/email/attachment.dart'; + +extension AttachmentExtension on Attachment { + + String getIcon(ImagePaths imagePaths) { + final mediaType = type; + log('AttachmentExtension::getIcon(): mediaType: $mediaType'); + if (mediaType == null) { + return imagePaths.icFileEPup; + } + if (mediaType.isDocFile()) { + return imagePaths.icFileDocx; + } else if (mediaType.isExcelFile()) { + return imagePaths.icFileXlsx; + } else if (mediaType.isPowerPointFile()) { + return imagePaths.icFilePptx; + } else if (mediaType.isPdfFile()) { + return imagePaths.icFilePdf; + } else if (mediaType.isZipFile()) { + return imagePaths.icFileZip; + } else if (mediaType.isImageFile()) { + return imagePaths.icFilePng; + } + return imagePaths.icFileEPup; + } +} \ No newline at end of file diff --git a/lib/features/email/presentation/widgets/attachment_file_tile_builder.dart b/lib/features/email/presentation/widgets/attachment_file_tile_builder.dart index d49304111..72d6d4c2d 100644 --- a/lib/features/email/presentation/widgets/attachment_file_tile_builder.dart +++ b/lib/features/email/presentation/widgets/attachment_file_tile_builder.dart @@ -4,6 +4,7 @@ import 'package:filesize/filesize.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:model/model.dart'; +import 'package:tmail_ui_user/features/email/presentation/extensions/attachment_extension.dart'; typedef OnDownloadAttachmentFileActionClick = void Function(Attachment attachment); typedef OnExpandAttachmentActionClick = void Function(); @@ -59,6 +60,7 @@ class AttachmentFileTileBuilder { alignment: Alignment.center, margin: EdgeInsets.only(top:heightItem != null ? 8 : 0), height: heightItem, + padding: EdgeInsets.zero, decoration: BoxDecoration( borderRadius: BorderRadius.circular(8), border: Border.all(color: AppColor.attachmentFileBorderColor), @@ -76,11 +78,19 @@ class AttachmentFileTileBuilder { if (_onDownloadAttachmentFileActionClick != null) { _onDownloadAttachmentFileActionClick!(_attachment); }}, - leading: Transform( - transform: Matrix4.translationValues(14.0, 2.0, 0.0), - child: SvgPicture.asset(_imagePaths.icFileAttachment, width: 24, height: 24, fit: BoxFit.fill)), + leading: Padding( + padding: const EdgeInsets.only(left: 8, bottom: BuildUtils.isWeb ? 6 : 14), + child: SvgPicture.asset( + _attachment.getIcon(_imagePaths), + width: 44, + height: 44, + fit: BoxFit.fill), + ), title: Transform( - transform: Matrix4.translationValues(-8.0, -8.0, 0.0), + transform: Matrix4.translationValues( + BuildUtils.isWeb ? 0.0 : -8.0, + BuildUtils.isWeb ? -8.0 : -10.0, + 0.0), child: Text( _attachment.name ?? '', maxLines: 1, @@ -89,7 +99,10 @@ class AttachmentFileTileBuilder { )), subtitle: _attachment.size != null && _attachment.size?.value != 0 ? Transform( - transform: Matrix4.translationValues(-8.0, -8.0, 0.0), + transform: Matrix4.translationValues( + BuildUtils.isWeb ? 0.0 : -8.0, + BuildUtils.isWeb ? -8.0 : -10.0, + 0.0), child: Text( filesize(_attachment.size?.value), maxLines: 1, @@ -106,7 +119,12 @@ class AttachmentFileTileBuilder { Transform( transform: Matrix4.translationValues(5.0, 5.0, 0.0), child: IconButton( - icon: SvgPicture.asset(_imagePaths.icDownload, width: 24, height: 24, fit: BoxFit.fill), + icon: SvgPicture.asset( + _imagePaths.icDownload, + width: 24, + height: 24, + color: AppColor.primaryColor, + fit: BoxFit.fill), onPressed: () { if (_onDownloadAttachmentFileActionClick != null) { _onDownloadAttachmentFileActionClick!(_attachment);