Committed by
David PHAM-VAN
added subject, body and email parameters in sharePdf
Showing
9 changed files
with
61 additions
and
8 deletions
| @@ -49,7 +49,10 @@ public class PrintingHandler implements MethodChannel.MethodCallHandler { | @@ -49,7 +49,10 @@ public class PrintingHandler implements MethodChannel.MethodCallHandler { | ||
| 49 | case "sharePdf": { | 49 | case "sharePdf": { |
| 50 | final byte[] document = call.argument("doc"); | 50 | final byte[] document = call.argument("doc"); |
| 51 | final String name = call.argument("name"); | 51 | final String name = call.argument("name"); |
| 52 | - PrintingJob.sharePdf(activity, document, name); | 52 | + final String subject = call.argument("subject"); |
| 53 | + final String body = call.argument("body"); | ||
| 54 | + final ArrayList<String> emails = call.argument("emails"); | ||
| 55 | + PrintingJob.sharePdf(activity, document, name, subject, body, emails); | ||
| 53 | result.success(1); | 56 | result.success(1); |
| 54 | break; | 57 | break; |
| 55 | } | 58 | } |
| @@ -207,7 +207,8 @@ public class PrintingJob extends PrintDocumentAdapter { | @@ -207,7 +207,8 @@ public class PrintingJob extends PrintDocumentAdapter { | ||
| 207 | printing.onCompleted(PrintingJob.this, false, message); | 207 | printing.onCompleted(PrintingJob.this, false, message); |
| 208 | } | 208 | } |
| 209 | 209 | ||
| 210 | - static void sharePdf(final Context context, final byte[] data, final String name) { | 210 | + static void sharePdf(final Context context, final byte[] data, final String name, |
| 211 | + final String subject, final String body, final ArrayList<String> emails) { | ||
| 211 | assert name != null; | 212 | assert name != null; |
| 212 | 213 | ||
| 213 | try { | 214 | try { |
| @@ -233,6 +234,9 @@ public class PrintingJob extends PrintDocumentAdapter { | @@ -233,6 +234,9 @@ public class PrintingJob extends PrintDocumentAdapter { | ||
| 233 | shareIntent.setType("application/pdf"); | 234 | shareIntent.setType("application/pdf"); |
| 234 | shareIntent.putExtra(Intent.EXTRA_STREAM, apkURI); | 235 | shareIntent.putExtra(Intent.EXTRA_STREAM, apkURI); |
| 235 | shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); | 236 | shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); |
| 237 | + shareIntent.putExtra(Intent.EXTRA_SUBJECT, subject); | ||
| 238 | + shareIntent.putExtra(Intent.EXTRA_TEXT, body); | ||
| 239 | + shareIntent.putExtra(Intent.EXTRA_EMAIL, emails != null ? emails.toArray(new String[0]) : null); | ||
| 236 | Intent chooserIntent = Intent.createChooser(shareIntent, null); | 240 | Intent chooserIntent = Intent.createChooser(shareIntent, null); |
| 237 | List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities( | 241 | List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities( |
| 238 | chooserIntent, PackageManager.MATCH_DEFAULT_ONLY); | 242 | chooserIntent, PackageManager.MATCH_DEFAULT_ONLY); |
| @@ -186,7 +186,7 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | @@ -186,7 +186,7 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | ||
| 186 | ) | 186 | ) |
| 187 | } | 187 | } |
| 188 | 188 | ||
| 189 | - static func sharePdf(data: Data, withSourceRect rect: CGRect, andName name: String) { | 189 | + static func sharePdf(data: Data, withSourceRect rect: CGRect, andName name: String, subject: String?, body: String?) { |
| 190 | let tmpDirURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true) | 190 | let tmpDirURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true) |
| 191 | let fileURL = tmpDirURL.appendingPathComponent(name) | 191 | let fileURL = tmpDirURL.appendingPathComponent(name) |
| 192 | 192 | ||
| @@ -197,7 +197,8 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | @@ -197,7 +197,8 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | ||
| 197 | return | 197 | return |
| 198 | } | 198 | } |
| 199 | 199 | ||
| 200 | - let activityViewController = UIActivityViewController(activityItems: [fileURL], applicationActivities: nil) | 200 | + let activityViewController = UIActivityViewController(activityItems: [fileURL, body], applicationActivities: nil) |
| 201 | + activityViewController.setValue(subject , forKey: "subject") | ||
| 201 | if UI_USER_INTERFACE_IDIOM() == .pad { | 202 | if UI_USER_INTERFACE_IDIOM() == .pad { |
| 202 | let controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController | 203 | let controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController |
| 203 | activityViewController.popoverPresentationController?.sourceView = controller?.view | 204 | activityViewController.popoverPresentationController?.sourceView = controller?.view |
| @@ -84,7 +84,9 @@ public class PrintingPlugin: NSObject, FlutterPlugin { | @@ -84,7 +84,9 @@ public class PrintingPlugin: NSObject, FlutterPlugin { | ||
| 84 | width: CGFloat((args["w"] as? NSNumber)?.floatValue ?? 0.0), | 84 | width: CGFloat((args["w"] as? NSNumber)?.floatValue ?? 0.0), |
| 85 | height: CGFloat((args["h"] as? NSNumber)?.floatValue ?? 0.0) | 85 | height: CGFloat((args["h"] as? NSNumber)?.floatValue ?? 0.0) |
| 86 | ), | 86 | ), |
| 87 | - andName: args["name"] as! String | 87 | + andName: args["name"] as! String, |
| 88 | + subject: args["subject"] as? String, | ||
| 89 | + body: args["body"] as? String | ||
| 88 | ) | 90 | ) |
| 89 | result(NSNumber(value: 1)) | 91 | result(NSNumber(value: 1)) |
| 90 | } else if call.method == "convertHtml" { | 92 | } else if call.method == "convertHtml" { |
| @@ -159,6 +159,9 @@ class PrintingPlugin extends PrintingPlatform { | @@ -159,6 +159,9 @@ class PrintingPlugin extends PrintingPlatform { | ||
| 159 | Uint8List bytes, | 159 | Uint8List bytes, |
| 160 | String filename, | 160 | String filename, |
| 161 | Rect bounds, | 161 | Rect bounds, |
| 162 | + String? subject, | ||
| 163 | + String? body, | ||
| 164 | + List<String>? emails, | ||
| 162 | ) async { | 165 | ) async { |
| 163 | final pdfFile = html.Blob( | 166 | final pdfFile = html.Blob( |
| 164 | <Uint8List>[Uint8List.fromList(bytes)], | 167 | <Uint8List>[Uint8List.fromList(bytes)], |
| @@ -73,11 +73,26 @@ abstract class PrintingPlatform extends PlatformInterface { | @@ -73,11 +73,26 @@ abstract class PrintingPlatform extends PlatformInterface { | ||
| 73 | /// Opens the native printer picker interface, and returns the URL of the selected printer. | 73 | /// Opens the native printer picker interface, and returns the URL of the selected printer. |
| 74 | Future<Printer?> pickPrinter(Rect bounds); | 74 | Future<Printer?> pickPrinter(Rect bounds); |
| 75 | 75 | ||
| 76 | - /// Displays a platform popup to share the Pdf document to another application | 76 | + /// Displays a platform popup to share the Pdf document to another application. |
| 77 | + /// | ||
| 78 | + /// [subject] will be the email subject if selected application is email. | ||
| 79 | + /// | ||
| 80 | + /// [body] will be the extra text that can be shared along with the Pdf document. | ||
| 81 | + /// For email application [body] will be the email body text. | ||
| 82 | + /// | ||
| 83 | + /// [emails] will be the list of emails to which you want to share the Pdf document. | ||
| 84 | + /// If the selected application is email application then the these [emails] will be | ||
| 85 | + /// filled in the to address. | ||
| 86 | + /// | ||
| 87 | + /// [subject] and [body] will only work for Android and iOS platforms. | ||
| 88 | + /// [emails] will only work for Android Platform. | ||
| 77 | Future<bool> sharePdf( | 89 | Future<bool> sharePdf( |
| 78 | Uint8List bytes, | 90 | Uint8List bytes, |
| 79 | String filename, | 91 | String filename, |
| 80 | Rect bounds, | 92 | Rect bounds, |
| 93 | + String? subject, | ||
| 94 | + String? body, | ||
| 95 | + List<String>? emails, | ||
| 81 | ); | 96 | ); |
| 82 | 97 | ||
| 83 | /// Convert an html document to a pdf data | 98 | /// Convert an html document to a pdf data |
| @@ -225,10 +225,16 @@ class MethodChannelPrinting extends PrintingPlatform { | @@ -225,10 +225,16 @@ class MethodChannelPrinting extends PrintingPlatform { | ||
| 225 | Uint8List bytes, | 225 | Uint8List bytes, |
| 226 | String filename, | 226 | String filename, |
| 227 | Rect bounds, | 227 | Rect bounds, |
| 228 | + String? subject, | ||
| 229 | + String? body, | ||
| 230 | + List<String>? emails, | ||
| 228 | ) async { | 231 | ) async { |
| 229 | final params = <String, dynamic>{ | 232 | final params = <String, dynamic>{ |
| 230 | 'doc': Uint8List.fromList(bytes), | 233 | 'doc': Uint8List.fromList(bytes), |
| 231 | 'name': filename, | 234 | 'name': filename, |
| 235 | + 'subject': subject, | ||
| 236 | + 'body': body, | ||
| 237 | + 'emails': emails, | ||
| 232 | 'x': bounds.left, | 238 | 'x': bounds.left, |
| 233 | 'y': bounds.top, | 239 | 'y': bounds.top, |
| 234 | 'w': bounds.width, | 240 | 'w': bounds.width, |
| @@ -135,11 +135,26 @@ mixin Printing { | @@ -135,11 +135,26 @@ mixin Printing { | ||
| 135 | ); | 135 | ); |
| 136 | } | 136 | } |
| 137 | 137 | ||
| 138 | - /// Displays a platform popup to share the Pdf document to another application | 138 | + /// Displays a platform popup to share the Pdf document to another application. |
| 139 | + /// | ||
| 140 | + /// [subject] will be the email subject if selected application is email. | ||
| 141 | + /// | ||
| 142 | + /// [body] will be the extra text that can be shared along with the Pdf document. | ||
| 143 | + /// For email application [body] will be the email body text. | ||
| 144 | + /// | ||
| 145 | + /// [emails] will be the list of emails to which you want to share the Pdf document. | ||
| 146 | + /// If the selected application is email application then the these [emails] will be | ||
| 147 | + /// filled in the to address. | ||
| 148 | + /// | ||
| 149 | + /// [subject] and [body] will only work for Android and iOS platforms. | ||
| 150 | + /// [emails] will only work for Android Platform. | ||
| 139 | static Future<bool> sharePdf({ | 151 | static Future<bool> sharePdf({ |
| 140 | required Uint8List bytes, | 152 | required Uint8List bytes, |
| 141 | String filename = 'document.pdf', | 153 | String filename = 'document.pdf', |
| 142 | Rect? bounds, | 154 | Rect? bounds, |
| 155 | + String? subject, | ||
| 156 | + String? body, | ||
| 157 | + List<String>? emails, | ||
| 143 | }) { | 158 | }) { |
| 144 | bounds ??= Rect.fromCircle(center: Offset.zero, radius: 10); | 159 | bounds ??= Rect.fromCircle(center: Offset.zero, radius: 10); |
| 145 | 160 | ||
| @@ -147,6 +162,9 @@ mixin Printing { | @@ -147,6 +162,9 @@ mixin Printing { | ||
| 147 | bytes, | 162 | bytes, |
| 148 | filename, | 163 | filename, |
| 149 | bounds, | 164 | bounds, |
| 165 | + subject, | ||
| 166 | + body, | ||
| 167 | + emails, | ||
| 150 | ); | 168 | ); |
| 151 | } | 169 | } |
| 152 | 170 |
| @@ -118,7 +118,8 @@ class MockPrinting extends Mock | @@ -118,7 +118,8 @@ class MockPrinting extends Mock | ||
| 118 | true; | 118 | true; |
| 119 | 119 | ||
| 120 | @override | 120 | @override |
| 121 | - Future<bool> sharePdf(Uint8List bytes, String filename, Rect bounds) async => | 121 | + Future<bool> sharePdf(Uint8List bytes, String filename, Rect bounds, |
| 122 | + String? subject, String? body, List<String>? emails) async => | ||
| 122 | true; | 123 | true; |
| 123 | 124 | ||
| 124 | @override | 125 | @override |
-
Please register or login to post a comment