TF-359 Open a web address and mailto link from EmailView
This commit is contained in:
@@ -260,18 +260,22 @@ class ComposerController extends BaseController {
|
||||
|
||||
if (listToEmailAddress.isNotEmpty || listCcEmailAddress.isNotEmpty || listBccEmailAddress.isNotEmpty) {
|
||||
isInitialRecipient.value = true;
|
||||
toAddressExpandMode.value = ExpandMode.COLLAPSE;
|
||||
}
|
||||
|
||||
if (listCcEmailAddress.isNotEmpty) {
|
||||
listEmailAddressType.add(PrefixEmailAddress.cc);
|
||||
ccAddressExpandMode.value = ExpandMode.COLLAPSE;
|
||||
}
|
||||
|
||||
if (listBccEmailAddress.isNotEmpty) {
|
||||
listEmailAddressType.add(PrefixEmailAddress.bcc);
|
||||
bccAddressExpandMode.value = ExpandMode.COLLAPSE;
|
||||
}
|
||||
} else if (arguments.emailAddress != null) {
|
||||
listToEmailAddress.add(arguments.emailAddress!);
|
||||
isInitialRecipient.value = true;
|
||||
toAddressExpandMode.value = ExpandMode.COLLAPSE;
|
||||
}
|
||||
_updateStatusEmailSendButton();
|
||||
}
|
||||
|
||||
@@ -484,11 +484,11 @@ class EmailController extends BaseController {
|
||||
showDialog(
|
||||
context: context,
|
||||
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
|
||||
builder: (BuildContext context) => (EmailAddressDialogBuilder(context, imagePaths, emailAddress)
|
||||
builder: (BuildContext context) => PointerInterceptor(child: (EmailAddressDialogBuilder(context, imagePaths, emailAddress)
|
||||
..addOnCloseContextMenuAction(() => popBack())
|
||||
..addOnCopyEmailAddressAction((emailAddress) => copyEmailAddress(context, emailAddress))
|
||||
..addOnComposeEmailAction((emailAddress) => composeEmailFromEmailAddress(emailAddress)))
|
||||
.build());
|
||||
.build()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -518,6 +518,29 @@ class EmailController extends BaseController {
|
||||
}
|
||||
}
|
||||
|
||||
void openMailToLink(Uri? uri) {
|
||||
log('EmailController::openMailToLink(): ${uri.toString()}');
|
||||
String address = uri?.path ?? '';
|
||||
log('EmailController::openMailToLink(): address: $address');
|
||||
if (address.isNotEmpty) {
|
||||
final emailAddress = EmailAddress(null, address);
|
||||
final arguments = ComposerArguments(
|
||||
emailActionType: EmailActionType.composeFromEmailAddress,
|
||||
emailAddress: emailAddress,
|
||||
mailboxRole: mailboxDashBoardController.selectedMailbox.value?.role);
|
||||
if (kIsWeb) {
|
||||
if (mailboxDashBoardController.dashBoardAction != DashBoardAction.compose) {
|
||||
mailboxDashBoardController.dispatchDashBoardAction(DashBoardAction.compose, arguments: arguments);
|
||||
}
|
||||
if (Get.currentRoute == AppRoutes.EMAIL) {
|
||||
popBack();
|
||||
}
|
||||
} else {
|
||||
push(AppRoutes.COMPOSER, arguments: arguments);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void deleteEmailPermanently(BuildContext context, PresentationEmail email) {
|
||||
if (responsiveUtils.isMobile(context)) {
|
||||
(ConfirmationDialogActionSheetBuilder(context)
|
||||
|
||||
@@ -536,12 +536,14 @@ class EmailView extends GetView with UserSettingPopupMenuMixin, NetworkConnectio
|
||||
widthContent: constraints.maxWidth,
|
||||
heightContent: MediaQuery.of(context).size.height,
|
||||
contentHtml: allEmailContents,
|
||||
controller: HtmlViewerControllerForWeb());
|
||||
controller: HtmlViewerControllerForWeb(),
|
||||
mailtoDelegate: (uri) => emailController.openMailToLink(uri));
|
||||
} else {
|
||||
return HtmlContentViewer(
|
||||
widthContent: MediaQuery.of(context).size.width,
|
||||
contentHtml: allEmailContents,
|
||||
loadingWidget: EmailContentPlaceHolderLoading(responsiveUtils: responsiveUtils));
|
||||
loadingWidget: EmailContentPlaceHolderLoading(responsiveUtils: responsiveUtils),
|
||||
mailtoDelegate: (uri) async => emailController.openMailToLink(uri));
|
||||
}
|
||||
} else {
|
||||
return SizedBox.shrink();
|
||||
|
||||
@@ -5,6 +5,7 @@ import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
typedef OnCloseBottomSheetAction = void Function();
|
||||
@@ -56,7 +57,7 @@ class EmailAddressBottomSheetBuilder {
|
||||
|
||||
void show() {
|
||||
Get.bottomSheet(
|
||||
GestureDetector(
|
||||
PointerInterceptor(child: GestureDetector(
|
||||
onTap: () => _onCloseBottomSheetAction?.call(),
|
||||
child: SingleChildScrollView(
|
||||
child: Container(
|
||||
@@ -73,11 +74,11 @@ class EmailAddressBottomSheetBuilder {
|
||||
onPressed: () => _onCloseBottomSheetAction?.call(),
|
||||
icon: SvgPicture.asset(_imagePaths.icCloseMailbox, width: 24, height: 24, fit: BoxFit.fill))),
|
||||
(AvatarBuilder()
|
||||
..text('${_emailAddress.asString().characters.first.toUpperCase()}')
|
||||
..size(64)
|
||||
..addTextStyle(TextStyle(fontWeight: FontWeight.w600, fontSize: 23, color: Colors.white))
|
||||
..avatarColor(_emailAddress.avatarColors))
|
||||
.build(),
|
||||
..text('${_emailAddress.asString().characters.first.toUpperCase()}')
|
||||
..size(64)
|
||||
..addTextStyle(TextStyle(fontWeight: FontWeight.w600, fontSize: 23, color: Colors.white))
|
||||
..avatarColor(_emailAddress.avatarColors))
|
||||
.build(),
|
||||
if (_emailAddress.displayName.isNotEmpty)
|
||||
Padding(
|
||||
padding: EdgeInsets.only(left: 16, right: 16, top: 16),
|
||||
@@ -125,7 +126,7 @@ class EmailAddressBottomSheetBuilder {
|
||||
)),
|
||||
),
|
||||
),
|
||||
),
|
||||
)),
|
||||
useRootNavigator: true,
|
||||
shape: _shape(),
|
||||
isScrollControlled: true,
|
||||
|
||||
Reference in New Issue
Block a user