From 1e0013260f9037627776aee5ec209e8583fbb6e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Huy=20Nguy=E1=BB=85n?= Date: Tue, 7 Mar 2023 00:15:11 +0700 Subject: [PATCH] Handle some case about share intent from android phone --- .../home/presentation/home_controller.dart | 9 ++++++--- .../mailbox_dashboard_controller.dart | 16 ++++++++++++++++ lib/main/utils/email_receive_manager.dart | 17 +++++++++++++++++ pubspec.lock | 14 +++++++++++--- pubspec.yaml | 4 ++-- 5 files changed, 52 insertions(+), 8 deletions(-) diff --git a/lib/features/home/presentation/home_controller.dart b/lib/features/home/presentation/home_controller.dart index 131d2b49b..4b76ed68a 100644 --- a/lib/features/home/presentation/home_controller.dart +++ b/lib/features/home/presentation/home_controller.dart @@ -110,12 +110,15 @@ class HomeController extends BaseController { _emailReceiveManager.receivingSharingStream.listen((uri) { log('HomeController::onReady(): Received Email: ${uri.toString()}'); if (uri != null) { - if(GetUtils.isEmail(uri.path)) { + if (GetUtils.isEmail(uri.path)) { log('HomeController::onReady(): Address: ${uri.path}'); _emailReceiveManager.setPendingEmailAddress(EmailAddress(null, uri.path)); - } else { - log('HomeController::onInit(): SharedMediaFilePath: ${uri.path}'); + } else if (uri.scheme == "file") { + log('HomeController::onReady(): SharedMediaFilePath: ${uri.path}'); _emailReceiveManager.setPendingFileInfo([SharedMediaFile(uri.path, null, null, SharedMediaType.FILE)]); + } else { + log('HomeController::onReady(): EmailContent: ${uri.path}'); + _emailReceiveManager.setPendingEmailContent(EmailContent(EmailContentType.textPlain, Uri.decodeComponent(uri.path))); } } }); diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 7555c0e45..870998f94 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -216,6 +216,7 @@ class MailboxDashBoardController extends ReloadableController { @override void onReady() { _registerPendingEmailAddress(); + _registerPendingEmailContents(); _registerPendingFileInfo(); _getSessionCurrent(); _getAppVersion(); @@ -358,6 +359,21 @@ class MailboxDashBoardController extends ReloadableController { }); } + void _registerPendingEmailContents() { + _emailReceiveManagerStreamSubscription = + _emailReceiveManager.pendingEmailContentInfo.stream.listen((emailContent) { + log('MailboxDashBoardController::_registerPendingEmailContents(): ${emailContent?.content}'); + if (emailContent != null && emailContent.content.isNotEmpty == true) { + _emailReceiveManager.clearPendingEmailContent(); + final arguments = ComposerArguments( + emailActionType: EmailActionType.edit, + emailContents: [emailContent], + mailboxRole: selectedMailbox.value?.role); + goToComposer(arguments); + } + }); + } + void _registerPendingFileInfo() { _fileReceiveManagerStreamSubscription = _emailReceiveManager.pendingFileInfo.stream.listen((listFile) { diff --git a/lib/main/utils/email_receive_manager.dart b/lib/main/utils/email_receive_manager.dart index 86f32da3e..07172fa90 100644 --- a/lib/main/utils/email_receive_manager.dart +++ b/lib/main/utils/email_receive_manager.dart @@ -1,5 +1,6 @@ import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; +import 'package:model/email/email_content.dart'; import 'package:receive_sharing_intent/receive_sharing_intent.dart'; import 'package:rxdart/rxdart.dart'; @@ -8,6 +9,9 @@ class EmailReceiveManager { BehaviorSubject _pendingEmailAddressInfo = BehaviorSubject.seeded(null); BehaviorSubject get pendingEmailAddressInfo => _pendingEmailAddressInfo; + BehaviorSubject _pendingEmailContentInfo = BehaviorSubject.seeded(null); + BehaviorSubject get pendingEmailContentInfo => _pendingEmailContentInfo; + BehaviorSubject> _pendingFileInfo = BehaviorSubject.seeded(List.empty(growable: true)); BehaviorSubject> get pendingFileInfo => _pendingFileInfo; @@ -29,6 +33,19 @@ class EmailReceiveManager { _pendingEmailAddressInfo.add(emailAddress); } + void setPendingEmailContent(EmailContent emailContent) async { + clearPendingEmailAddress(); + _pendingEmailContentInfo.add(emailContent); + } + + void clearPendingEmailContent() { + if(_pendingEmailContentInfo.isClosed) { + _pendingEmailContentInfo = BehaviorSubject.seeded(null); + } else { + _pendingEmailContentInfo.add(null); + } + } + void clearPendingEmailAddress() { if(_pendingEmailAddressInfo.isClosed) { _pendingEmailAddressInfo = BehaviorSubject.seeded(null); diff --git a/pubspec.lock b/pubspec.lock index 965c7530d..87d95d080 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1291,9 +1291,9 @@ packages: dependency: "direct main" description: path: "." - ref: master - resolved-ref: e1a945c3da610cdb0ec2788f1b89a96e3f0c6f32 - url: "https://github.com/KasemJaffer/receive_sharing_intent.git" + ref: handle-share-for-vcard-and-mailto + resolved-ref: "48f12f2f2dca76fbfac39b31d638cacef6d1d95e" + url: "https://github.com/nqhhdev/receive_sharing_intent.git" source: git version: "1.4.5" rich_text_composer: @@ -1480,10 +1480,18 @@ packages: super_tag_editor: dependency: "direct main" description: +<<<<<<< HEAD name: super_tag_editor sha256: "381896629b7004b30079f485196b9f067340313e717b239506e0fcc893b667a7" url: "https://pub.dev" source: hosted +======= + path: "." + ref: master + resolved-ref: "1df7366f29940c68788de240aba114ebbc38bef8" + url: "https://github.com/dab246/super_tag_editor.git" + source: git +>>>>>>> 2c179930 (Handle some case about share intent from android phone) version: "0.1.0" syncfusion_flutter_core: dependency: transitive diff --git a/pubspec.yaml b/pubspec.yaml index 60d6e6927..b48fb6756 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -68,8 +68,8 @@ dependencies: receive_sharing_intent: git: - url: https://github.com/KasemJaffer/receive_sharing_intent.git - ref: master + url: https://github.com/nqhhdev/receive_sharing_intent.git + ref: handle-share-for-vcard-and-mailto flutter_appauth_web: git: