TF-3416 Handle open EML attachment in EML previewer on mobile

This commit is contained in:
dab246
2025-01-14 02:02:58 +07:00
committed by Dat H. Pham
parent 94e347f703
commit 27f64d97a8
5 changed files with 83 additions and 38 deletions
@@ -6,6 +6,7 @@ import 'package:core/utils/app_logger.dart';
import 'package:core/utils/html/html_interaction.dart';
import 'package:core/utils/html/html_utils.dart';
import 'package:core/utils/platform_info.dart';
import 'package:core/utils/preview_eml_file_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
@@ -16,6 +17,7 @@ import 'package:url_launcher/url_launcher_string.dart';
typedef OnScrollHorizontalEndAction = Function(bool leftDirection);
typedef OnLoadWidthHtmlViewerAction = Function(bool isScrollPageViewActivated);
typedef OnMailtoDelegateAction = Future<void> Function(Uri? uri);
typedef OnPreviewEMLDelegateAction = Future<void> Function(Uri? uri);
class HtmlContentViewer extends StatefulWidget {
@@ -26,6 +28,7 @@ class HtmlContentViewer extends StatefulWidget {
final OnLoadWidthHtmlViewerAction? onLoadWidthHtmlViewer;
final OnMailtoDelegateAction? onMailtoDelegateAction;
final OnScrollHorizontalEndAction? onScrollHorizontalEnd;
final OnPreviewEMLDelegateAction? onPreviewEMLDelegateAction;
const HtmlContentViewer({
Key? key,
@@ -34,7 +37,8 @@ class HtmlContentViewer extends StatefulWidget {
this.direction,
this.onLoadWidthHtmlViewer,
this.onMailtoDelegateAction,
this.onScrollHorizontalEnd
this.onScrollHorizontalEnd,
this.onPreviewEMLDelegateAction,
}) : super(key: key);
@override
@@ -246,7 +250,7 @@ class _HtmlContentViewState extends State<HtmlContentViewer> {
NavigationAction navigationAction
) async {
final url = navigationAction.request.url?.toString();
log('_HtmlContentViewState::_shouldOverrideUrlLoading: URL = $url');
if (url == null) {
return NavigationActionPolicy.CANCEL;
}
@@ -256,9 +260,15 @@ class _HtmlContentViewState extends State<HtmlContentViewer> {
}
final requestUri = Uri.parse(url);
final mailtoHandler = widget.onMailtoDelegateAction;
if (mailtoHandler != null && requestUri.isScheme('mailto')) {
await mailtoHandler(requestUri);
if (widget.onMailtoDelegateAction != null &&
requestUri.isScheme('mailto')) {
await widget.onMailtoDelegateAction?.call(requestUri);
return NavigationActionPolicy.CANCEL;
}
if (widget.onPreviewEMLDelegateAction != null &&
requestUri.isScheme(PreviewEmlFileUtils.emlPreviewerScheme)) {
await widget.onPreviewEMLDelegateAction?.call(requestUri);
return NavigationActionPolicy.CANCEL;
}
@@ -7,6 +7,7 @@ import 'package:html/dom.dart';
import 'package:html/parser.dart';
class PreviewEmlFileUtils {
static const String emlPreviewerScheme = 'eml-previewer';
Element? _createEmailElement({
required String subjectPrefix,