From 36e332bfa2aabb9b17fcc9b297160ab2437df49c Mon Sep 17 00:00:00 2001 From: Darren Chan Date: Mon, 5 Dec 2022 09:22:12 -0800 Subject: [PATCH 01/47] Update changelog (#283) * update changelog * Updating package version Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 2 +- pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 882c9847..609c1344 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# 1.0.0-56 - Dec 2, 2022 +# 1.0.0-2 - Dec 2, 2022 - Update Android to v9.4.1 # 1.0.0-beta.55 - Oct 13, 2022 diff --git a/pubspec.yaml b/pubspec.yaml index a36d9f37..e0d3c309 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-2 +version: 1.0.1-3 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From bae1124bf59472b770794d3ae7ca3037c4338f96 Mon Sep 17 00:00:00 2001 From: Darren Chan Date: Fri, 16 Dec 2022 10:15:18 -0800 Subject: [PATCH 02/47] API to call setFitMode / setLayoutMode outside of config (#284) * android implementation setLayoutMode + setFitMode * documentation fix main.dart * ios changes added some default logic - still need to implement feature * iOS implementation added iOS implementation - completed * Updating package version * update changelog * Updating pubspec.yaml * Updating package version Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 4 + .../pdftronflutter/helpers/PluginUtils.java | 67 ++++++++++++++- ios/Classes/PdftronFlutterPlugin.h | 4 + ios/Classes/PdftronFlutterPlugin.m | 81 +++++++++++++++++++ lib/pdftron_flutter.dart | 14 ++++ lib/src/constants.dart | 4 + lib/src/document_view.dart | 12 +++ pubspec.yaml | 2 +- 8 files changed, 183 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 609c1344..7384bdbe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.0.0-3 - Dec 16, 2022 +- setFitMode() +- setLayoutMode() + # 1.0.0-2 - Dec 2, 2022 - Update Android to v9.4.1 diff --git a/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java b/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java index 66ca0864..24e29df2 100644 --- a/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java +++ b/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java @@ -259,6 +259,10 @@ public class PluginUtils { public static final String KEY_MATCH_WHOLE_WORD = "matchWholeWord"; // Hygen Generated Method Parameters + public static final String KEY_LAYOUT_MODE = "layoutMode"; + + public static final String KEY_FIT_MODE = "fitMode"; + public static final String EVENT_EXPORT_ANNOTATION_COMMAND = "export_annotation_command_event"; public static final String EVENT_EXPORT_BOOKMARK = "export_bookmark_event"; @@ -355,6 +359,8 @@ public class PluginUtils { public static final String FUNCTION_GET_VISIBLE_PAGES = "getVisiblePages"; // Hygen Generated Method Constants + public static final String FUNCTION_SET_LAYOUT_MODE = "setLayoutMode"; + public static final String FUNCTION_SET_FIT_MODE = "setFitMode"; public static final String FUNCTION_GET_ANNOTATIONS_ON_PAGE = "getAnnotationsOnPage"; public static final String BUTTON_TOOLS = "toolsButton"; @@ -461,10 +467,10 @@ public class PluginUtils { private static final String LAYOUT_MODE_SINGLE = "Single"; private static final String LAYOUT_MODE_CONTINUOUS = "Continuous"; - private static final String LAYOUT_MODE_FACING = "facing"; - private static final String LAYOUT_MODE_FACING_CONTINUOUS = "facingContinuous"; - private static final String LAYOUT_MODE_FACING_OVER = "facingOver"; - private static final String LAYOUT_MODE_FACING_OVER_CONTINUOUS = "facingOverContinuous"; + private static final String LAYOUT_MODE_FACING = "Facing"; + private static final String LAYOUT_MODE_FACING_CONTINUOUS = "FacingContinuous"; + private static final String LAYOUT_MODE_FACING_OVER = "FacingOver"; + private static final String LAYOUT_MODE_FACING_OVER_CONTINUOUS = "FacingOverContinuous"; private static final String FIT_MODE_FIT_PAGE = "FitPage"; private static final String FIT_MODE_FIT_WIDTH = "FitWidth"; @@ -1692,6 +1698,24 @@ private static String convStringToLayoutMode(String layoutString) { return layoutMode; } + private static PDFViewCtrl.PagePresentationMode convStringToPagePresentationMode(String pagePresentationString) { + PDFViewCtrl.PagePresentationMode mode = null; + if (LAYOUT_MODE_SINGLE.equals(pagePresentationString)) { + mode = PDFViewCtrl.PagePresentationMode.SINGLE; + } else if (LAYOUT_MODE_CONTINUOUS.equals(pagePresentationString)) { + mode = PDFViewCtrl.PagePresentationMode.SINGLE_CONT; + } else if (LAYOUT_MODE_FACING.equals(pagePresentationString)) { + mode = PDFViewCtrl.PagePresentationMode.FACING; + } else if (LAYOUT_MODE_FACING_CONTINUOUS.equals(pagePresentationString)) { + mode = PDFViewCtrl.PagePresentationMode.FACING_CONT; + } else if (LAYOUT_MODE_FACING_OVER.equals(pagePresentationString)) { + mode = PDFViewCtrl.PagePresentationMode.FACING_COVER; + } else if (LAYOUT_MODE_FACING_OVER_CONTINUOUS.equals(pagePresentationString)) { + mode = PDFViewCtrl.PagePresentationMode.FACING_COVER_CONT; + } + return mode; + } + private static PDFViewCtrl.PageViewMode convStringToFitMode(String fitString) { PDFViewCtrl.PageViewMode fitMode = null; if (FIT_MODE_FIT_PAGE.equals(fitString)) { @@ -2660,6 +2684,16 @@ public static void onMethodCall(MethodCall call, MethodChannel.Result result, Vi break; } // Hygen Generated Method Cases + case FUNCTION_SET_LAYOUT_MODE: { + checkFunctionPrecondition(component); + setLayoutMode(call, result, component); + break; + } + case FUNCTION_SET_FIT_MODE: { + checkFunctionPrecondition(component); + setFitMode(call, result, component); + break; + } case FUNCTION_GET_ANNOTATIONS_ON_PAGE: { checkFunctionPrecondition(component); getAnnotationsOnPage(call, result, component); @@ -4129,6 +4163,31 @@ private static void getVisiblePages(MethodChannel.Result result, ViewerComponent } // Hygen Generated Methods + public static void setLayoutMode(MethodCall call, MethodChannel.Result result, ViewerComponent component) { + PDFViewCtrl pdfViewCtrl = component.getPdfViewCtrl(); + String layoutString = call.argument(KEY_LAYOUT_MODE); + + if (pdfViewCtrl == null) { + result.error("InvalidState", "PDFViewCtrl not found", null); + return; + } + + pdfViewCtrl.setPagePresentationMode(convStringToPagePresentationMode(layoutString)); + result.success(null); + } + + public static void setFitMode(MethodCall call, MethodChannel.Result result, ViewerComponent component) { + PDFViewCtrl pdfViewCtrl = component.getPdfViewCtrl(); + String fitString = call.argument(KEY_FIT_MODE); + + if (pdfViewCtrl == null) { + result.error("InvalidState", "PDFViewCtrl not found", null); + return; + } + pdfViewCtrl.setPageViewMode(convStringToFitMode(fitString)); + result.success(null); + } + public static void getAnnotationsOnPage(MethodCall call, MethodChannel.Result result, ViewerComponent component) { int pageNumber = call.argument(KEY_PAGE_NUMBER); diff --git a/ios/Classes/PdftronFlutterPlugin.h b/ios/Classes/PdftronFlutterPlugin.h index 3072d513..62c55b77 100644 --- a/ios/Classes/PdftronFlutterPlugin.h +++ b/ios/Classes/PdftronFlutterPlugin.h @@ -273,6 +273,8 @@ static NSString * const PTStartSearchModeKey = @"startSearchMode"; static NSString * const PTExitSearchModeKey = @"exitSearchMode"; // Hygen Generated Methods +static NSString * const PTSetLayoutModeKey = @"setLayoutMode"; +static NSString * const PTSetFitModeKey = @"setFitMode"; static NSString * const PTGetAnnotationsOnPageKey = @"getAnnotationsOnPage"; // argument @@ -311,6 +313,8 @@ static NSString * const PTMatchWholeWordArgumentKey = @"matchWholeWord"; static NSString * const PTAnimatedArgumentKey = @"animated"; // Hygen Generated Method Parameters +static NSString * const PTLayoutModeArgumentKey = @"layoutMode"; +static NSString * const PTFitModeArgumentKey = @"fitMode"; // event strings static NSString * const PTExportAnnotationCommandEventKey = @"export_annotation_command_event"; diff --git a/ios/Classes/PdftronFlutterPlugin.m b/ios/Classes/PdftronFlutterPlugin.m index 4736d852..90e3ed0e 100644 --- a/ios/Classes/PdftronFlutterPlugin.m +++ b/ios/Classes/PdftronFlutterPlugin.m @@ -1696,6 +1696,12 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { [self smartZoom:result call:call]; } // Hygen Generated Method Call Cases + else if ([call.method isEqualToString:PTSetLayoutModeKey]) { + [self setLayoutMode:result call:call]; + } + else if ([call.method isEqualToString:PTSetFitModeKey]) { + [self setFitMode:result call:call]; + } else if ([call.method isEqualToString:PTGetAnnotationsOnPageKey]) { [self getAnnotationsOnPage:result call:call]; } @@ -3543,6 +3549,81 @@ -(void)zoomToRect:(FlutterResult)flutterResult call:(FlutterMethodCall*)call { } // Hygen Generated Methods +- (void)setLayoutMode:(FlutterResult)flutterResult call:(FlutterMethodCall*)call +{ + PTDocumentController *documentController = [self getDocumentController]; + PTPDFViewCtrl *pdfViewCtrl = documentController.pdfViewCtrl; + NSString* layoutMode = [PdftronFlutterPlugin PT_idAsNSString:call.arguments[PTLayoutModeArgumentKey]]; + + if(documentController == Nil) + { + // something is wrong, document view controller is not present + NSLog(@"Error: The document view controller is not initialized."); + flutterResult([FlutterError errorWithCode:@"set_layout_mode" message:@"Failed to set page presentation mode" details:@"Error: The document view controller is not initialized."]); + return; + } + + if ([layoutMode isEqualToString:PTSingleKey]) { + [pdfViewCtrl SetPagePresentationMode:e_trn_single_page]; + } + else if ([layoutMode isEqualToString:PTContinuousKey]) { + [pdfViewCtrl SetPagePresentationMode:e_trn_single_continuous]; + } + else if ([layoutMode isEqualToString:PTFacingKey]) { + [pdfViewCtrl SetPagePresentationMode:e_trn_facing]; + } + else if ([layoutMode isEqualToString:PTFacingContinuousKey]) { + [pdfViewCtrl SetPagePresentationMode:e_trn_facing_continuous]; + } + else if ([layoutMode isEqualToString:PTFacingCoverKey]) { + [pdfViewCtrl SetPagePresentationMode:e_trn_facing_cover]; + } + else if ([layoutMode isEqualToString:PTFacingCoverContinuousKey]) { + [pdfViewCtrl SetPagePresentationMode:e_trn_facing_continuous_cover]; + } + [pdfViewCtrl Update:YES]; + flutterResult(nil); +} + +- (void)setFitMode:(FlutterResult)flutterResult call:(FlutterMethodCall*)call +{ + PTDocumentController *documentController = [self getDocumentController]; + PTPDFViewCtrl *pdfViewCtrl = documentController.pdfViewCtrl; + NSString* fitMode = [PdftronFlutterPlugin PT_idAsNSString:call.arguments[PTFitModeArgumentKey]]; + + if(documentController == Nil) + { + // something is wrong, document view controller is not present + NSLog(@"Error: The document view controller is not initialized."); + flutterResult([FlutterError errorWithCode:@"set_fit_mode" message:@"Failed to set page view mode" details:@"Error: The document view controller is not initialized."]); + return; + } + + if (!fitMode) { + return; + } + + if ([fitMode isEqualToString:PTFitPageKey]) { + [pdfViewCtrl SetPageViewMode:e_trn_fit_page]; + [pdfViewCtrl SetPageRefViewMode:e_trn_fit_page]; + } + else if ([fitMode isEqualToString:PTFitWidthKey]) { + [pdfViewCtrl SetPageViewMode:e_trn_fit_width]; + [pdfViewCtrl SetPageRefViewMode:e_trn_fit_width]; + } + else if ([fitMode isEqualToString:PTFitHeightKey]) { + [pdfViewCtrl SetPageViewMode:e_trn_fit_height]; + [pdfViewCtrl SetPageRefViewMode:e_trn_fit_height]; + } + else if ([fitMode isEqualToString:PTZoomKey]) { + [pdfViewCtrl SetPageViewMode:e_trn_zoom]; + [pdfViewCtrl SetPageRefViewMode:e_trn_zoom]; + } + + [pdfViewCtrl Update:YES]; + flutterResult(nil); +} + - (void)getAnnotationsOnPage:(FlutterResult)result call:(FlutterMethodCall*)call { PTDocumentController *documentController = [self getDocumentController]; diff --git a/lib/pdftron_flutter.dart b/lib/pdftron_flutter.dart index cfc13d2a..42431ee9 100644 --- a/lib/pdftron_flutter.dart +++ b/lib/pdftron_flutter.dart @@ -749,6 +749,20 @@ class PdftronFlutter { } // Hygen Generated Methods + /// Sets the page presentation mode in the viewer + static Future setLayoutMode(String layoutMode) { + return _channel.invokeMethod(Functions.setLayoutMode, { + Parameters.layoutMode: layoutMode + }); + } + + /// Sets the page view mode in the viewer + static Future setFitMode(String fitMode) { + return _channel.invokeMethod(Functions.setFitMode, { + Parameters.fitMode: fitMode + }); + } + /// Gets the list of annotations on the given page. static Future?> getAnnotationsOnPage(int pageNumber) { return _channel.invokeMethod(Functions.getAnnotationsOnPage, { diff --git a/lib/src/constants.dart b/lib/src/constants.dart index ac496644..1604e422 100644 --- a/lib/src/constants.dart +++ b/lib/src/constants.dart @@ -79,6 +79,8 @@ class Functions { static const getVisiblePages = "getVisiblePages"; // Hygen Generated Methods + static const setLayoutMode = "setLayoutMode"; + static const setFitMode = "setFitMode"; static const getAnnotationsOnPage = "getAnnotationsOnPage"; } @@ -120,6 +122,8 @@ class Parameters { static const animated = "animated"; // Hygen Generated Method Parameters + static const layoutMode = "layoutMode"; + static const fitMode = "fitMode"; } /// Parameters of events. diff --git a/lib/src/document_view.dart b/lib/src/document_view.dart index 00d7d67f..b115b023 100644 --- a/lib/src/document_view.dart +++ b/lib/src/document_view.dart @@ -767,6 +767,18 @@ class DocumentViewController { } // Hygen Generated Methods + Future setLayoutMode(String layoutMode) { + return _channel.invokeMethod(Functions.setLayoutMode, { + Parameters.layoutMode: layoutMode + }); + } + + Future setFitMode(String fitMode) { + return _channel.invokeMethod(Functions.setFitMode, { + Parameters.fitMode: fitMode + }); + } + /// Gets the list of annotations on the given page. Future?> getAnnotationsOnPage(int pageNumber) { return _channel.invokeMethod(Functions.getAnnotationsOnPage, { diff --git a/pubspec.yaml b/pubspec.yaml index e0d3c309..f7c1c668 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-3 +version: 1.0.1-4 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From c68cb8acf9251ebabc0f813e17152f1174e8bbc8 Mon Sep 17 00:00:00 2001 From: Darren Chan Date: Tue, 3 Jan 2023 09:35:09 -0800 Subject: [PATCH 03/47] Android 9.4.2 Release (#285) * update 9.4.2 * Updating package version Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7384bdbe..0dd309e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-4 - Dec 19, 2022 +- Update Android to v9.4.2 + # 1.0.0-3 - Dec 16, 2022 - setFitMode() - setLayoutMode() diff --git a/android/build.gradle b/android/build.gradle index 7eab6a6b..1263a9d0 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,6 +38,6 @@ android { dependencies { // PDFTron SDK dependencies - implementation "com.pdftron:pdftron:9.4.1" - implementation "com.pdftron:tools:9.4.1" + implementation "com.pdftron:pdftron:9.4.2" + implementation "com.pdftron:tools:9.4.2" } diff --git a/pubspec.yaml b/pubspec.yaml index f7c1c668..25f0ab98 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-4 +version: 1.0.1-5 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 4a85d08dc4875018eef633e028e2449770b81136 Mon Sep 17 00:00:00 2001 From: ama-pdftron <83238520+ama-pdftron@users.noreply.github.com> Date: Tue, 10 Jan 2023 09:50:01 -0800 Subject: [PATCH 04/47] Rename applications.properties into application.properties (#286) * Rename applications.properties into application.properties * Updating package version Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- applications.properties => application.properties | 0 pubspec.yaml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename applications.properties => application.properties (100%) diff --git a/applications.properties b/application.properties similarity index 100% rename from applications.properties rename to application.properties diff --git a/pubspec.yaml b/pubspec.yaml index 25f0ab98..d6bcff5c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-5 +version: 1.0.1-6 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 61ed45c14cb4f77f5edabc262f9e8afd3dc5a6d4 Mon Sep 17 00:00:00 2001 From: ama-pdftron <83238520+ama-pdftron@users.noreply.github.com> Date: Tue, 10 Jan 2023 11:33:33 -0800 Subject: [PATCH 05/47] Update gradle-wrapper.jar to 6.7.1 (#287) * Update gradle-wrapper.jar to 6.7.1 * Updating package version Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- android/gradle/wrapper/gradle-wrapper.jar | Bin 54329 -> 85559 bytes pubspec.yaml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar index f6b961fd5a86aa5fbfe90f707c3138408be7c718..98314ba651cb61543f6b5f22c171538c86398e5f 100644 GIT binary patch literal 85559 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 Dal$dv literal 54329 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

<5G2M1WZP5 zzqSuO91lJod(SBDDw<*sX(+F6Uq~YAeYV#2A;XQu_p=N5X+#cmu19Qk>QAnV=k!?wbk5I;tDWgFc}0NkvC*G=V+Yh1cyeJVq~9czZiDXe+S=VfL2g`LWo8om z$Y~FQc6MFjV-t1Y`^D9XMwY*U_re2R?&(O~68T&D4S{X`6JYU-pz=}ew-)V0AOUT1 zVOkHAB-8uBcRjLvz<9HS#a@X*Kc@|W)nyiSgi|u5$Md|P()%2(?olGg@ypoJwp6>m z*dnfjjWC>?_1p;%1brqZyDRR;8EntVA92EJ3ByOxj6a+bhPl z;a?m4rQAV1@QU^#M1HX)0+}A<7TCO`ZR_RzF}X9-M>cRLyN4C+lCk2)kT^3gN^`IT zNP~fAm(wyIoR+l^lQDA(e1Yv}&$I!n?&*p6?lZcQ+vGLLd~fM)qt}wsbf3r=tmVYe zl)ntf#E!P7wlakP9MXS7m0nsAmqxZ*)#j;M&0De`oNmFgi$ov#!`6^4)iQyxg5Iuj zjLAhzQ)r`^hf7`*1`Rh`X;LVBtDSz@0T?kkT1o!ijeyTGt5vc^Cd*tmNgiNo^EaWvaC8$e+nb_{W01j3%=1Y&92YacjCi>eNbwk%-gPQ@H-+4xskQ}f_c=jg^S-# zYFBDf)2?@5cy@^@FHK5$YdAK9cI;!?Jgd}25lOW%xbCJ>By3=HiK@1EM+I46A)Lsd zeT|ZH;KlCml=@;5+hfYf>QNOr^XNH%J-lvev)$Omy8MZ`!{`j>(J5cG&ZXXgv)TaF zg;cz99i$4CX_@3MIb?GL0s*8J=3`#P(jXF(_(6DXZjc@(@h&=M&JG)9&Te1?(^XMW zjjC_70|b=9hB6pKQi`S^Ls7JyJw^@P>Ko^&q8F&?>6i;#CbxUiLz1ZH4lNyd@QACd zu>{!sqjB!2Dg}pbAXD>d!3jW}=5aN0b;rw*W>*PAxm7D)aw(c*RX2@bTGEI|RRp}vw7;NR2wa;rXN{L{Q#=Fa z$x@ms6pqb>!8AuV(prv>|aU8oWV={C&$c zMa=p=CDNOC2tISZcd8~18GN5oTbKY+Vrq;3_obJlfSKRMk;Hdp1`y`&LNSOqeauR_ z^j*Ojl3Ohzb5-a49A8s|UnM*NM8tg}BJXdci5%h&;$afbmRpN0&~9rCnBA`#lG!p zc{(9Y?A0Y9yo?wSYn>iigf~KP$0*@bGZ>*YM4&D;@{<%Gg5^uUJGRrV4 z(aZOGB&{_0f*O=Oi0k{@8vN^BU>s3jJRS&CJOl3o|BE{FAA&a#2YYiX3pZz@|Go-F z|Fly;7eX2OTs>R}<`4RwpHFs9nwh)B28*o5qK1Ge=_^w0m`uJOv!=&!tzt#Save(C zgKU=Bsgql|`ui(e1KVxR`?>Dx>(rD1$iWp&m`v)3A!j5(6vBm*z|aKm*T*)mo(W;R zNGo2`KM!^SS7+*9YxTm6YMm_oSrLceqN*nDOAtagULuZl5Q<7mOnB@Hq&P|#9y{5B z!2x+2s<%Cv2Aa0+u{bjZXS);#IFPk(Ph-K7K?3i|4ro> zRbqJoiOEYo(Im^((r}U4b8nvo_>4<`)ut`24?ILnglT;Pd&U}$lV3U$F9#PD(O=yV zgNNA=GW|(E=&m_1;uaNmipQe?pon4{T=zK!N!2_CJL0E*R^XXIKf*wi!>@l}3_P9Z zF~JyMbW!+n-+>!u=A1ESxzkJy$DRuG+$oioG7(@Et|xVbJ#BCt;J43Nvj@MKvTxzy zMmjNuc#LXBxFAwIGZJk~^!q$*`FME}yKE8d1f5Mp}KHNq(@=Z8YxV}0@;YS~|SpGg$_jG7>_8WWYcVx#4SxpzlV9N4aO>K{c z$P?a_fyDzGX$Of3@ykvedGd<@-R;M^Shlj*SswJLD+j@hi_&_>6WZ}#AYLR0iWMK|A zH_NBeu(tMyG=6VO-=Pb>-Q#$F*or}KmEGg*-n?vWQREURdB#+6AvOj*I%!R-4E_2$ zU5n9m>RWs|Wr;h2DaO&mFBdDb-Z{APGQx$(L`if?C|njd*fC=rTS%{o69U|meRvu?N;Z|Y zbT|ojL>j;q*?xXmnHH#3R4O-59NV1j=uapkK7}6@Wo*^Nd#(;$iuGsb;H315xh3pl zHaJ>h-_$hdNl{+|Zb%DZH%ES;*P*v0#}g|vrKm9;j-9e1M4qX@zkl&5OiwnCz=tb6 zz<6HXD+rGIVpGtkb{Q^LIgExOm zz?I|oO9)!BOLW#krLmWvX5(k!h{i>ots*EhpvAE;06K|u_c~y{#b|UxQ*O@Ks=bca z^_F0a@61j3I(Ziv{xLb8AXQj3;R{f_l6a#H5ukg5rxwF9A$?Qp-Mo54`N-SKc}fWp z0T)-L@V$$&my;l#Ha{O@!fK4-FSA)L&3<${Hcwa7ue`=f&YsXY(NgeDU#sRlT3+9J z6;(^(sjSK@3?oMo$%L-nqy*E;3pb0nZLx6 z;h5)T$y8GXK1DS-F@bGun8|J(v-9o=42&nLJy#}M5D0T^5VWBNn$RpC zZzG6Bt66VY4_?W=PX$DMpKAI!d`INr) zkMB{XPQ<52rvWVQqgI0OL_NWxoe`xxw&X8yVftdODPj5|t}S6*VMqN$-h9)1MBe0N zYq?g0+e8fJCoAksr0af1)FYtz?Me!Cxn`gUx&|T;)695GG6HF7!Kg1zzRf_{VWv^bo81v4$?F6u2g|wxHc6eJQAg&V z#%0DnWm2Rmu71rPJ8#xFUNFC*V{+N_qqFH@gYRLZ6C?GAcVRi>^n3zQxORPG)$-B~ z%_oB?-%Zf7d*Fe;cf%tQwcGv2S?rD$Z&>QC2X^vwYjnr5pa5u#38cHCt4G3|efuci z@3z=#A13`+ztmp;%zjXwPY_aq-;isu*hecWWX_=Z8paSqq7;XYnUjK*T>c4~PR4W7 z#C*%_H&tfGx`Y$w7`dXvVhmovDnT>btmy~SLf>>~84jkoQ%cv=MMb+a{JV&t0+1`I z32g_Y@yDhKe|K^PevP~MiiVl{Ou7^Mt9{lOnXEQ`xY^6L8D$705GON{!1?1&YJEl#fTf5Z)da=yiEQ zGgtC-soFGOEBEB~ZF_{7b(76En>d}mI~XIwNw{e>=Fv)sgcw@qOsykWr?+qAOZSVrQfg}TNI ztKNG)1SRrAt6#Q?(me%)>&A_^DM`pL>J{2xu>xa$3d@90xR61TQDl@fu%_85DuUUA za9tn64?At;{`BAW6oykwntxHeDpXsV#{tmt5RqdN7LtcF4vR~_kZNT|wqyR#z^Xcd zFdymVRZvyLfTpBT>w9<)Ozv@;Yk@dOSVWbbtm^y@@C>?flP^EgQPAwsy75bveo=}T zFxl(f)s)j(0#N_>Or(xEuV(n$M+`#;Pc$1@OjXEJZumkaekVqgP_i}p`oTx;terTx zZpT+0dpUya2hqlf`SpXN{}>PfhajNk_J0`H|2<5E;U5Vh4F8er z;RxLSFgpGhkU>W?IwdW~NZTyOBrQ84H7_?gviIf71l`EETodG9a1!8e{jW?DpwjL? zGEM&eCzwoZt^P*8KHZ$B<%{I}>46IT%jJ3AnnB5P%D2E2Z_ z1M!vr#8r}1|KTqWA4%67ZdbMW2YJ81b(KF&SQ2L1Qn(y-=J${p?xLMx3W7*MK;LFQ z6Z`aU;;mTL4XrrE;HY*Rkh6N%?qviUGNAKiCB~!P}Z->IpO6E(gGd7I#eDuT7j|?nZ zK}I(EJ>$Kb&@338M~O+em9(L!+=0zBR;JAQesx|3?Ok90)D1aS9P?yTh6Poh8Cr4X zk3zc=f2rE7jj+aP7nUsr@~?^EGP>Q>h#NHS?F{Cn`g-gD<8F&dqOh-0sa%pfL`b+1 zUsF*4a~)KGb4te&K0}bE>z3yb8% zibb5Q%Sfiv7feb1r0tfmiMv z@^4XYwg@KZI=;`wC)`1jUA9Kv{HKe2t$WmRcR4y8)VAFjRi zaz&O7Y2tDmc5+SX(bj6yGHYk$dBkWc96u3u&F)2yEE~*i0F%t9Kg^L6MJSb&?wrXi zGSc;_rln$!^ybwYBeacEFRsVGq-&4uC{F)*Y;<0y7~USXswMo>j4?~5%Zm!m@i@-> zXzi82sa-vpU{6MFRktJy+E0j#w`f`>Lbog{zP|9~hg(r{RCa!uGe>Yl536cn$;ouH za#@8XMvS-kddc1`!1LVq;h57~zV`7IYR}pp3u!JtE6Q67 zq3H9ZUcWPm2V4IukS}MCHSdF0qg2@~ufNx9+VMjQP&exiG_u9TZAeAEj*jw($G)zL zq9%#v{wVyOAC4A~AF=dPX|M}MZV)s(qI9@aIK?Pe+~ch|>QYb+78lDF*Nxz2-vpRbtQ*F4$0fDbvNM#CCatgQ@z1+EZWrt z2dZfywXkiW=no5jus-92>gXn5rFQ-COvKyegmL=4+NPzw6o@a?wGE-1Bt;pCHe;34K%Z z-FnOb%!nH;)gX+!a3nCk?5(f1HaWZBMmmC@lc({dUah+E;NOros{?ui1zPC-Q0);w zEbJmdE$oU$AVGQPdm{?xxI_0CKNG$LbY*i?YRQ$(&;NiA#h@DCxC(U@AJ$Yt}}^xt-EC_ z4!;QlLkjvSOhdx!bR~W|Ezmuf6A#@T`2tsjkr>TvW*lFCMY>Na_v8+{Y|=MCu1P8y z89vPiH5+CKcG-5lzk0oY>~aJC_0+4rS@c@ZVKLAp`G-sJB$$)^4*A!B zmcf}lIw|VxV9NSoJ8Ag3CwN&d7`|@>&B|l9G8tXT^BDHOUPrtC70NgwN4${$k~d_4 zJ@eo6%YQnOgq$th?0{h`KnqYa$Nz@vlHw<%!C5du6<*j1nwquk=uY}B8r7f|lY+v7 zm|JU$US08ugor8E$h3wH$c&i~;guC|3-tqJy#T;v(g( zBZtPMSyv%jzf->435yM(-UfyHq_D=6;ouL4!ZoD+xI5uCM5ay2m)RPmm$I}h>()hS zO!0gzMxc`BPkUZ)WXaXam%1;)gedA7SM8~8yIy@6TPg!hR0=T>4$Zxd)j&P-pXeSF z9W`lg6@~YDhd19B9ETv(%er^Xp8Yj@AuFVR_8t*KS;6VHkEDKI#!@l!l3v6`W1`1~ zP{C@keuV4Q`Rjc08lx?zmT$e$!3esc9&$XZf4nRL(Z*@keUbk!GZi(2Bmyq*saOD? z3Q$V<*P-X1p2}aQmuMw9nSMbOzuASsxten7DKd6A@ftZ=NhJ(0IM|Jr<91uAul4JR zADqY^AOVT3a(NIxg|U;fyc#ZnSzw2cr}#a5lZ38>nP{05D)7~ad7JPhw!LqOwATXtRhK!w0X4HgS1i<%AxbFmGJx9?sEURV+S{k~g zGYF$IWSlQonq6}e;B(X(sIH|;52+(LYW}v_gBcp|x%rEAVB`5LXg_d5{Q5tMDu0_2 z|LOm$@K2?lrLNF=mr%YP|U-t)~9bqd+wHb4KuPmNK<}PK6e@aosGZK57=Zt+kcszVOSbe;`E^dN! ze7`ha3WUUU7(nS0{?@!}{0+-VO4A{7+nL~UOPW9_P(6^GL0h${SLtqG!} zKl~Ng5#@Sy?65wk9z*3SA`Dpd4b4T^@C8Fhd8O)k_4%0RZL5?#b~jmgU+0|DB%0Z) zql-cPC>A9HPjdOTpPC` zQwvF}uB5kG$Xr4XnaH#ruSjM*xG?_hT7y3G+8Ox`flzU^QIgb_>2&-f+XB6MDr-na zSi#S+c!ToK84<&m6sCiGTd^8pNdXo+$3^l3FL_E`0 z>8it5YIDxtTp2Tm(?}FX^w{fbfgh7>^8mtvN>9fWgFN_*a1P`Gz*dyOZF{OV7BC#j zQV=FQM5m>47xXgapI$WbPM5V`V<7J9tD)oz@d~MDoM`R^Y6-Na(lO~uvZlpu?;zw6 zVO1faor3dg#JEb5Q*gz4<W8tgC3nE2BG2jeIQs1)<{In&7hJ39x=;ih;CJDy)>0S1at*7n?Wr0ahYCpFjZ|@u91Zl7( zv;CSBRC65-6f+*JPf4p1UZ)k=XivKTX6_bWT~7V#rq0Xjas6hMO!HJN8GdpBKg_$B zwDHJF6;z?h<;GXFZan8W{XFNPpOj!(&I1`&kWO86p?Xz`a$`7qV7Xqev|7nn_lQuX ziGpU1MMYt&5dE2A62iX3;*0WzNB9*nSTzI%62A+N?f?;S>N@8M=|ef3gtQTIA*=yq zQAAjOqa!CkHOQo4?TsqrrsJLclXcP?dlAVv?v`}YUjo1Htt;6djP@NPFH+&p1I+f_ z)Y279{7OWomY8baT(4TAOlz1OyD{4P?(DGv3XyJTA2IXe=kqD)^h(@*E3{I~w;ws8 z)ZWv7E)pbEM zd3MOXRH3mQhks9 zv6{s;k0y5vrcjXaVfw8^>YyPo=oIqd5IGI{)+TZq5Z5O&hXAw%ZlL}^6FugH;-%vP zAaKFtt3i^ag226=f0YjzdPn6|4(C2sC5wHFX{7QF!tG1E-JFA`>eZ`}$ymcRJK?0c zN363o{&ir)QySOFY0vcu6)kX#;l??|7o{HBDVJN+17rt|w3;(C_1b>d;g9Gp=8YVl zYTtA52@!7AUEkTm@P&h#eg+F*lR zQ7iotZTcMR1frJ0*V@Hw__~CL>_~2H2cCtuzYIUD24=Cv!1j6s{QS!v=PzwQ(a0HS zBKx04KA}-Ue+%9d`?PG*hIij@54RDSQpA7|>qYVIrK_G6%6;#ZkR}NjUgmGju)2F`>|WJoljo)DJgZr4eo1k1i1+o z1D{>^RlpIY8OUaOEf5EBu%a&~c5aWnqM zxBpJq98f=%M^{4mm~5`CWl%)nFR64U{(chmST&2jp+-r z3675V<;Qi-kJud%oWnCLdaU-)xTnMM%rx%Jw6v@=J|Ir=4n-1Z23r-EVf91CGMGNz zb~wyv4V{H-hkr3j3WbGnComiqmS0vn?n?5v2`Vi>{Ip3OZUEPN7N8XeUtF)Ry6>y> zvn0BTLCiqGroFu|m2zG-;Xb6;W`UyLw)@v}H&(M}XCEVXZQoWF=Ykr5lX3XWwyNyF z#jHv)A*L~2BZ4lX?AlN3X#axMwOC)PoVy^6lCGse9bkGjb=qz%kDa6}MOmSwK`cVO zt(e*MW-x}XtU?GY5}9{MKhRhYOlLhJE5=ca+-RmO04^ z66z{40J=s=ey9OCdc(RCzy zd7Zr1%!y3}MG(D=wM_ebhXnJ@MLi7cImDkhm0y{d-Vm81j`0mbi4lF=eirlr)oW~a zCd?26&j^m4AeXEsIUXiTal)+SPM4)HX%%YWF1?(FV47BaA`h9m67S9x>hWMVHx~Hg z1meUYoLL(p@b3?x|9DgWeI|AJ`Ia84*P{Mb%H$ZRROouR4wZhOPX15=KiBMHl!^JnCt$Az`KiH^_d>cev&f zaG2>cWf$=A@&GP~DubsgYb|L~o)cn5h%2`i^!2)bzOTw2UR!>q5^r&2Vy}JaWFUQE04v>2;Z@ZPwXr?y&G(B^@&y zsd6kC=hHdKV>!NDLIj+3rgZJ|dF`%N$DNd;B)9BbiT9Ju^Wt%%u}SvfM^=|q-nxDG zuWCQG9e#~Q5cyf8@y76#kkR^}{c<_KnZ0QsZcAT|YLRo~&tU|N@BjxOuy`#>`X~Q< z?R?-Gsk$$!oo(BveQLlUrcL#eirhgBLh`qHEMg`+sR1`A=1QX7)ZLMRT+GBy?&mM8 zQG^z-!Oa&J-k7I(3_2#Q6Bg=NX<|@X&+YMIOzfEO2$6Mnh}YV!m!e^__{W@-CTprr zbdh3f=BeCD$gHwCrmwgM3LAv3!Mh$wM)~KWzp^w)Cu6roO7uUG5z*}i0_0j47}pK; ztN530`ScGatLOL06~zO)Qmuv`h!gq5l#wx(EliKe&rz-5qH(hb1*fB#B+q`9=jLp@ zOa2)>JTl7ovxMbrif`Xe9;+fqB1K#l=Dv!iT;xF zdkCvS>C5q|O;}ns3AgoE({Ua-zNT-9_5|P0iANmC6O76Sq_(AN?UeEQJ>#b54fi3k zFmh+P%b1x3^)0M;QxXLP!BZ^h|AhOde*{9A=f3|Xq*JAs^Y{eViF|=EBfS6L%k4ip zk+7M$gEKI3?bQg?H3zaE@;cyv9kv;cqK$VxQbFEsy^iM{XXW0@2|DOu$!-k zSFl}Y=jt-VaT>Cx*KQnHTyXt}f9XswFB9ibYh+k2J!ofO+nD?1iw@mwtrqI4_i?nE zhLkPp41ED62me}J<`3RN80#vjW;wt`pP?%oQ!oqy7`miL>d-35a=qotK$p{IzeSk# ze_$CFYp_zIkrPFVaW^s#U4xT1lI^A0IBe~Y<4uS%zSV=wcuLr%gQT=&5$&K*bwqx| zWzCMiz>7t^Et@9CRUm9E+@hy~sBpm9fri$sE1zgLU((1?Yg{N1Sars=DiW&~Zw=3I zi7y)&oTC?UWD2w97xQ&5vx zRXEBGeJ(I?Y}eR0_O{$~)bMJRTsNUPIfR!xU9PE7A>AMNr_wbrFK>&vVw=Y;RH zO$mlpmMsQ}-FQ2cSj7s7GpC+~^Q~dC?y>M}%!-3kq(F3hGWo9B-Gn02AwUgJ>Z-pKOaj zysJBQx{1>Va=*e@sLb2z&RmQ7ira;aBijM-xQ&cpR>X3wP^foXM~u1>sv9xOjzZpX z0K;EGouSYD~oQ&lAafj3~EaXfFShC+>VsRlEMa9cg9i zFxhCKO}K0ax6g4@DEA?dg{mo>s+~RPI^ybb^u--^nTF>**0l5R9pocwB?_K)BG_)S zyLb&k%XZhBVr7U$wlhMqwL)_r&&n%*N$}~qijbkfM|dIWP{MyLx}X&}ES?}7i;9bW zmTVK@zR)7kE2+L42Q`n4m0VVg5l5(W`SC9HsfrLZ=v%lpef=Gj)W59VTLe+Z$8T8i z4V%5+T0t8LnM&H>Rsm5C%qpWBFqgTwL{=_4mE{S3EnBXknM&u8n}A^IIM4$s3m(Rd z>zq=CP-!9p9es2C*)_hoL@tDYABn+o#*l;6@7;knWIyDrt5EuakO99S$}n((Fj4y} zD!VvuRzghcE{!s;jC*<_H$y6!6QpePo2A3ZbX*ZzRnQq*b%KK^NF^z96CHaWmzU@f z#j;y?X=UP&+YS3kZx7;{ zDA{9(wfz7GF`1A6iB6fnXu0?&d|^p|6)%3$aG0Uor~8o? z*e}u#qz7Ri?8Uxp4m_u{a@%bztvz-BzewR6bh*1Xp+G=tQGpcy|4V_&*aOqu|32CM zz3r*E8o8SNea2hYJpLQ-_}R&M9^%@AMx&`1H8aDx4j%-gE+baf2+9zI*+Pmt+v{39 zDZ3Ix_vPYSc;Y;yn68kW4CG>PE5RoaV0n@#eVmk?p$u&Fy&KDTy!f^Hy6&^-H*)#u zdrSCTJPJw?(hLf56%2;_3n|ujUSJOU8VPOTlDULwt0jS@j^t1WS z!n7dZIoT+|O9hFUUMbID4Ec$!cc($DuQWkocVRcYSikFeM&RZ=?BW)mG4?fh#)KVG zcJ!<=-8{&MdE)+}?C8s{k@l49I|Zwswy^ZN3;E!FKyglY~Aq?4m74P-0)sMTGXqd5(S<-(DjjM z&7dL-Mr8jhUCAG$5^mI<|%`;JI5FVUnNj!VO2?Jiqa|c2;4^n!R z`5KK0hyB*F4w%cJ@Un6GC{mY&r%g`OX|1w2$B7wxu97%<@~9>NlXYd9RMF2UM>(z0 zouu4*+u+1*k;+nFPk%ly!nuMBgH4sL5Z`@Rok&?Ef=JrTmvBAS1h?C0)ty5+yEFRz zY$G=coQtNmT@1O5uk#_MQM1&bPPnspy5#>=_7%WcEL*n$;sSAZcXxMpcXxLe;_mLA z5F_paad+bGZV*oh@8h0(|D2P!q# zTHjmiphJ=AazSeKQPkGOR-D8``LjzToyx{lfK-1CDD6M7?pMZOdLKFtjZaZMPk4}k zW)97Fh(Z+_Fqv(Q_CMH-YYi?fR5fBnz7KOt0*t^cxmDoIokc=+`o# zrud|^h_?KW=Gv%byo~(Ln@({?3gnd?DUf-j2J}|$Mk>mOB+1{ZQ8HgY#SA8END(Zw z3T+W)a&;OO54~m}ffemh^oZ!Vv;!O&yhL0~hs(p^(Yv=(3c+PzPXlS5W79Er8B1o* z`c`NyS{Zj_mKChj+q=w)B}K za*zzPhs?c^`EQ;keH{-OXdXJet1EsQ)7;{3eF!-t^4_Srg4(Ot7M*E~91gwnfhqaM zNR7dFaWm7MlDYWS*m}CH${o?+YgHiPC|4?X?`vV+ws&Hf1ZO-w@OGG^o4|`b{bLZj z&9l=aA-Y(L11!EvRjc3Zpxk7lc@yH1e$a}8$_-r$)5++`_eUr1+dTb@ zU~2P1HM#W8qiNN3b*=f+FfG1!rFxnNlGx{15}BTIHgxO>Cq4 z;#9H9YjH%>Z2frJDJ8=xq>Z@H%GxXosS@Z>cY9ppF+)e~t_hWXYlrO6)0p7NBMa`+ z^L>-#GTh;k_XnE)Cgy|0Dw;(c0* zSzW14ZXozu)|I@5mRFF1eO%JM=f~R1dkNpZM+Jh(?&Zje3NgM{2ezg1N`AQg5%+3Y z64PZ0rPq6;_)Pj-hyIOgH_Gh`1$j1!jhml7ksHA1`CH3FDKiHLz+~=^u@kUM{ilI5 z^FPiJ7mSrzBs9{HXi2{sFhl5AyqwUnU{sPcUD{3+l-ZHAQ)C;c$=g1bdoxeG(5N01 zZy=t8i{*w9m?Y>V;uE&Uy~iY{pY4AV3_N;RL_jT_QtLFx^KjcUy~q9KcLE3$QJ{!)@$@En{UGG7&}lc*5Kuc^780;7Bj;)X?1CSy*^^ zPP^M)Pr5R>mvp3_hmCtS?5;W^e@5BjE>Cs<`lHDxj<|gtOK4De?Sf0YuK5GX9G93i zMYB{8X|hw|T6HqCf7Cv&r8A$S@AcgG1cF&iJ5=%+x;3yB`!lQ}2Hr(DE8=LuNb~Vs z=FO&2pdc16nD$1QL7j+!U^XWTI?2qQKt3H8=beVTdHHa9=MiJ&tM1RRQ-=+vy!~iz zj3O{pyRhCQ+b(>jC*H)J)%Wq}p>;?@W*Eut@P&?VU+Sdw^4kE8lvX|6czf{l*~L;J zFm*V~UC;3oQY(ytD|D*%*uVrBB}BbAfjK&%S;z;7$w68(8PV_whC~yvkZmX)xD^s6 z{$1Q}q;99W?*YkD2*;)tRCS{q2s@JzlO~<8x9}X<0?hCD5vpydvOw#Z$2;$@cZkYrp83J0PsS~!CFtY%BP=yxG?<@#{7%2sy zOc&^FJxsUYN36kSY)d7W=*1-{7ghPAQAXwT7z+NlESlkUH&8ODlpc8iC*iQ^MAe(B z?*xO4i{zFz^G=^G#9MsLKIN64rRJykiuIVX5~0#vAyDWc9-=6BDNT_aggS2G{B>dD ze-B%d3b6iCfc5{@yz$>=@1kdK^tX9qh0=ocv@9$ai``a_ofxT=>X7_Y0`X}a^M?d# z%EG)4@`^Ej_=%0_J-{ga!gFtji_byY&Vk@T1c|ucNAr(JNr@)nCWj?QnCyvXg&?FW;S-VOmNL6^km_dqiVjJuIASVGSFEos@EVF7St$WE&Z%)`Q##+0 zjaZ=JI1G@0!?l|^+-ZrNd$WrHBi)DA0-Eke>dp=_XpV<%CO_Wf5kQx}5e<90dt>8k zAi00d0rQ821nA>B4JHN7U8Zz=0;9&U6LOTKOaC1FC8GgO&kc=_wHIOGycL@c*$`ce703t%>S}mvxEnD-V!;6c`2(p74V7D0No1Xxt`urE66$0(ThaAZ1YVG#QP$ zy~NN%kB*zhZ2Y!kjn826pw4bh)75*e!dse+2Db(;bN34Uq7bLpr47XTX{8UEeC?2i z*{$`3dP}32${8pF$!$2Vq^gY|#w+VA_|o(oWmQX8^iw#n_crb(K3{69*iU?<%C-%H zuKi)3M1BhJ@3VW>JA`M>L~5*_bxH@Euy@niFrI$82C1}fwR$p2E&ZYnu?jlS}u7W9AyfdXh2pM>78bIt3 z)JBh&XE@zA!kyCDfvZ1qN^np20c1u#%P6;6tU&dx0phT1l=(mw7`u!-0e=PxEjDds z9E}{E!7f9>jaCQhw)&2TtG-qiD)lD(4jQ!q{`x|8l&nmtHkdul# zy+CIF8lKbp9_w{;oR+jSLtTfE+B@tOd6h=QePP>rh4@~!8c;Hlg9m%%&?e`*Z?qz5-zLEWfi>`ord5uHF-s{^bexKAoMEV@9nU z^5nA{f{dW&g$)BAGfkq@r5D)jr%!Ven~Q58c!Kr;*Li#`4Bu_?BU0`Y`nVQGhNZk@ z!>Yr$+nB=`z#o2nR0)V3M7-eVLuY`z@6CT#OTUXKnxZn$fNLPv7w1y7eGE=Qv@Hey`n;`U=xEl|q@CCV^#l)s0ZfT+mUf z^(j5r4)L5i2jnHW4+!6Si3q_LdOLQi<^fu?6WdohIkn79=jf%Fs3JkeXwF(?_tcF? z?z#j6iXEd(wJy4|p6v?xNk-)iIf2oX5^^Y3q3ziw16p9C6B;{COXul%)`>nuUoM*q zzmr|NJ5n)+sF$!yH5zwp=iM1#ZR`O%L83tyog-qh1I z0%dcj{NUs?{myT~33H^(%0QOM>-$hGFeP;U$puxoJ>>o-%Lk*8X^rx1>j|LtH$*)>1C!Pv&gd16%`qw5LdOIUbkNhaBBTo}5iuE%K&ZV^ zAr_)kkeNKNYJRgjsR%vexa~&8qMrQYY}+RbZ)egRg9_$vkoyV|Nc&MH@8L)`&rpqd zXnVaI@~A;Z^c3+{x=xgdhnocA&OP6^rr@rTvCnhG6^tMox$ulw2U7NgUtW%|-5VeH z_qyd47}1?IbuKtqNbNx$HR`*+9o=8`%vM8&SIKbkX9&%TS++x z5|&6P<%=F$C?owUI`%uvUq^yW0>`>yz!|WjzsoB9dT;2Dx8iSuK%%_XPgy0dTD4kd zDXF@&O_vBVVKQq(9YTClUPM30Sk7B!v7nOyV`XC!BA;BIVwphh+c)?5VJ^(C;GoQ$ zvBxr7_p*k$T%I1ke}`U&)$uf}I_T~#3XTi53OX)PoXVgxEcLJgZG^i47U&>LY(l%_ z;9vVDEtuMCyu2fqZeez|RbbIE7@)UtJvgAcVwVZNLccswxm+*L&w`&t=ttT=sv6Aq z!HouSc-24Y9;0q$>jX<1DnnGmAsP))- z^F~o99gHZw`S&Aw7e4id6Lg7kMk-e)B~=tZ!kE7sGTOJ)8@q}np@j7&7Sy{2`D^FH zI7aX%06vKsfJ168QnCM2=l|i>{I{%@gcr>ExM0Dw{PX6ozEuqFYEt z087%MKC;wVsMV}kIiuu9Zz9~H!21d!;Cu#b;hMDIP7nw3xSX~#?5#SSjyyg+Y@xh| z%(~fv3`0j#5CA2D8!M2TrG=8{%>YFr(j)I0DYlcz(2~92?G*?DeuoadkcjmZszH5& zKI@Lis%;RPJ8mNsbrxH@?J8Y2LaVjUIhRUiO-oqjy<&{2X~*f|)YxnUc6OU&5iac= z*^0qwD~L%FKiPmlzi&~a*9sk2$u<7Al=_`Ox^o2*kEv?p`#G(p(&i|ot8}T;8KLk- zPVf_4A9R`5^e`Om2LV*cK59EshYXse&IoByj}4WZaBomoHAPKqxRKbPcD`lMBI)g- zeMRY{gFaUuecSD6q!+b5(?vAnf>c`Z(8@RJy%Ulf?W~xB1dFAjw?CjSn$ph>st5bc zUac1aD_m6{l|$#g_v6;=32(mwpveQDWhmjR7{|B=$oBhz`7_g7qNp)n20|^^op3 zSfTdWV#Q>cb{CMKlWk91^;mHap{mk)o?udk$^Q^^u@&jd zfZ;)saW6{e*yoL6#0}oVPb2!}r{pAUYtn4{P~ES9tTfC5hXZnM{HrC8^=Pof{G4%Bh#8 ze~?C9m*|fd8MK;{L^!+wMy>=f^8b&y?yr6KnTq28$pFMBW9Oy7!oV5z|VM$s-cZ{I|Xf@}-)1=$V&x7e;9v81eiTi4O5-vs?^5pCKy2l>q);!MA zS!}M48l$scB~+Umz}7NbwyTn=rqt@`YtuwiQSMvCMFk2$83k50Q>OK5&fe*xCddIm)3D0I6vBU<+!3=6?(OhkO|b4fE_-j zimOzyfBB_*7*p8AmZi~X2bgVhyPy>KyGLAnOpou~sx9)S9%r)5dE%ADs4v%fFybDa_w*0?+>PsEHTbhKK^G=pFz z@IxLTCROWiKy*)cV3y%0FwrDvf53Ob_XuA1#tHbyn%Ko!1D#sdhBo`;VC*e1YlhrC z?*y3rp86m#qI|qeo8)_xH*G4q@70aXN|SP+6MQ!fJQqo1kwO_v7zqvUfU=Gwx`CR@ zRFb*O8+54%_8tS(ADh}-hUJzE`s*8wLI>1c4b@$al)l}^%GuIXjzBK!EWFO8W`>F^ ze7y#qPS0NI7*aU)g$_ziF(1ft;2<}6Hfz10cR8P}67FD=+}MfhrpOkF3hFhQu;Q1y zu%=jJHTr;0;oC94Hi@LAF5quAQ(rJG(uo%BiRQ@8U;nhX)j0i?0SL2g-A*YeAqF>RVCBOTrn{0R27vu}_S zS>tX4!#&U4W;ikTE!eFH+PKw%p+B(MR2I%n#+m0{#?qRP_tR@zpgCb=4rcrL!F=;A zh%EIF8m6%JG+qb&mEfuFTLHSxUAZEvC-+kvZKyX~SA3Umt`k}}c!5dy?-sLIM{h@> z!2=C)@nx>`;c9DdwZ&zeUc(7t<21D7qBj!|1^Mp1eZ6)PuvHx+poKSDCSBMFF{bKy z;9*&EyKitD99N}%mK8431rvbT+^%|O|HV23{;RhmS{$5tf!bIPoH9RKps`-EtoW5h zo6H_!s)Dl}2gCeGF6>aZtah9iLuGd19^z0*OryPNt{70RvJSM<#Ox9?HxGg04}b^f zrVEPceD%)#0)v5$YDE?f`73bQ6TA6wV;b^x*u2Ofe|S}+q{s5gr&m~4qGd!wOu|cZ||#h_u=k*fB;R6&k?FoM+c&J;ISg70h!J7*xGus)ta4veTdW)S^@sU@ z4$OBS=a~@F*V0ECic;ht4@?Jw<9kpjBgHfr2FDPykCCz|v2)`JxTH55?b3IM={@DU z!^|9nVO-R#s{`VHypWyH0%cs;0GO3E;It6W@0gX6wZ%W|Dzz&O%m17pa19db(er}C zUId1a4#I+Ou8E1MU$g=zo%g7K(=0Pn$)Rk z<4T2u<0rD)*j+tcy2XvY+0 z0d2pqm4)4lDewsAGThQi{2Kc3&C=|OQF!vOd#WB_`4gG3@inh-4>BoL!&#ij8bw7? zqjFRDaQz!J-YGitV4}$*$hg`vv%N)@#UdzHFI2E<&_@0Uw@h_ZHf}7)G;_NUD3@18 zH5;EtugNT0*RXVK*by>WS>jaDDfe!A61Da=VpIK?mcp^W?!1S2oah^wowRnrYjl~`lgP-mv$?yb6{{S55CCu{R z$9;`dyf0Y>uM1=XSl_$01Lc1Iy68IosWN8Q9Op=~I(F<0+_kKfgC*JggjxNgK6 z-3gQm6;sm?J&;bYe&(dx4BEjvq}b`OT^RqF$J4enP1YkeBK#>l1@-K`ajbn05`0J?0daOtnzh@l3^=BkedW1EahZlRp;`j*CaT;-21&f2wU z+Nh-gc4I36Cw+;3UAc<%ySb`#+c@5y ze~en&bYV|kn?Cn|@fqmGxgfz}U!98$=drjAkMi`43I4R%&H0GKEgx-=7PF}y`+j>r zg&JF`jomnu2G{%QV~Gf_-1gx<3Ky=Md9Q3VnK=;;u0lyTBCuf^aUi?+1+`4lLE6ZK zT#(Bf`5rmr(tgTbIt?yA@y`(Ar=f>-aZ}T~>G32EM%XyFvhn&@PWCm#-<&ApLDCXT zD#(9m|V(OOo7PmE@`vD4$S5;+9IQm19dd zvMEU`)E1_F+0o0-z>YCWqg0u8ciIknU#{q02{~YX)gc_u;8;i233D66pf(IkTDxeN zL=4z2)?S$TV9=ORVr&AkZMl<4tTh(v;Ix1{`pPVqI3n2ci&4Dg+W|N8TBUfZ*WeLF zqCH_1Q0W&f9T$lx3CFJ$o@Lz$99 zW!G&@zFHxTaP!o#z^~xgF|(vrHz8R_r9eo;TX9}2ZyjslrtH=%6O)?1?cL&BT(Amp zTGFU1%%#xl&6sH-UIJk_PGk_McFn7=%yd6tAjm|lnmr8bE2le3I~L{0(ffo}TQjyo zHZZI{-}{E4ohYTlZaS$blB!h$Jq^Rf#(ch}@S+Ww&$b);8+>g84IJcLU%B-W?+IY& zslcZIR>+U4v3O9RFEW;8NpCM0w1ROG84=WpKxQ^R`{=0MZCubg3st z48AyJNEvyxn-jCPTlTwp4EKvyEwD3e%kpdY?^BH0!3n6Eb57_L%J1=a*3>|k68A}v zaW`*4YitylfD}ua8V)vb79)N_Ixw_mpp}yJGbNu+5YYOP9K-7nf*jA1#<^rb4#AcS zKg%zCI)7cotx}L&J8Bqo8O1b0q;B1J#B5N5Z$Zq=wX~nQFgUfAE{@u0+EnmK{1hg> zC{vMfFLD;L8b4L+B51&LCm|scVLPe6h02rws@kGv@R+#IqE8>Xn8i|vRq_Z`V;x6F zNeot$1Zsu`lLS92QlLWF54za6vOEKGYQMdX($0JN*cjG7HP&qZ#3+bEN$8O_PfeAb z0R5;=zXac2IZ?fxu59?Nka;1lKm|;0)6|#RxkD05P5qz;*AL@ig!+f=lW5^Jbag%2 z%9@iM0ph$WFlxS!`p31t92z~TB}P-*CS+1Oo_g;7`6k(Jyj8m8U|Q3Sh7o-Icp4kV zK}%qri5>?%IPfamXIZ8pXbm-#{ytiam<{a5A+3dVP^xz!Pvirsq7Btv?*d7eYgx7q zWFxrzb3-%^lDgMc=Vl7^={=VDEKabTG?VWqOngE`Kt7hs236QKidsoeeUQ_^FzsXjprCDd@pW25rNx#6x&L6ZEpoX9Ffzv@olnH3rGOSW( zG-D|cV0Q~qJ>-L}NIyT?T-+x+wU%;+_GY{>t(l9dI%Ximm+Kmwhee;FK$%{dnF;C% zFjM2&$W68Sz#d*wtfX?*WIOXwT;P6NUw}IHdk|)fw*YnGa0rHx#paG!m=Y6GkS4VX zX`T$4eW9k1W!=q8!(#8A9h67fw))k_G)Q9~Q1e3f`aV@kbcSv7!priDUN}gX(iXTy zr$|kU0Vn%*ylmyDCO&G0Z3g>%JeEPFAW!5*H2Ydl>39w3W+gEUjL&vrRs(xGP{(ze zy7EMWF14@Qh>X>st8_029||TP0>7SG9on_xxeR2Iam3G~Em$}aGsNt$iES9zFa<3W zxtOF*!G@=PhfHO!=9pVPXMUVi30WmkPoy$02w}&6A7mF)G6-`~EVq5CwD2`9Zu`kd)52``#V zNSb`9dG~8(dooi1*-aSMf!fun7Sc`-C$-E(3BoSC$2kKrVcI!&yC*+ff2+C-@!AT_ zsvlAIV+%bRDfd{R*TMF><1&_a%@yZ0G0lg2K;F>7b+7A6pv3-S7qWIgx+Z?dt8}|S z>Qbb6x(+^aoV7FQ!Ph8|RUA6vXWQH*1$GJC+wXLXizNIc9p2yLzw9 z0=MdQ!{NnOwIICJc8!+Jp!zG}**r#E!<}&Te&}|B4q;U57$+pQI^}{qj669zMMe_I z&z0uUCqG%YwtUc8HVN7?0GHpu=bL7&{C>hcd5d(iFV{I5c~jpX&!(a{yS*4MEoYXh z*X4|Y@RVfn;piRm-C%b@{0R;aXrjBtvx^HO;6(>i*RnoG0Rtcd25BT6edxTNOgUAOjn zJ2)l{ipj8IP$KID2}*#F=M%^n&=bA0tY98@+2I+7~A&T-tw%W#3GV>GTmkHaqftl)#+E zMU*P(Rjo>8%P@_@#UNq(_L{}j(&-@1iY0TRizhiATJrnvwSH0v>lYfCI2ex^><3$q znzZgpW0JlQx?JB#0^^s-Js1}}wKh6f>(e%NrMwS`Q(FhazkZb|uyB@d%_9)_xb$6T zS*#-Bn)9gmobhAtvBmL+9H-+0_0US?g6^TOvE8f3v=z3o%NcPjOaf{5EMRnn(_z8- z$|m0D$FTU zDy;21v-#0i)9%_bZ7eo6B9@Q@&XprR&oKl4m>zIj-fiRy4Dqy@VVVs?rscG| zmzaDQ%>AQTi<^vYCmv#KOTd@l7#2VIpsj?nm_WfRZzJako`^uU%Nt3e;cU*y*|$7W zLm%fX#i_*HoUXu!NI$ey>BA<5HQB=|nRAwK!$L#n-Qz;~`zACig0PhAq#^5QS<8L2 zS3A+8%vbVMa7LOtTEM?55apt(DcWh#L}R^P2AY*c8B}Cx=6OFAdMPj1f>k3#^#+Hk z6uW1WJW&RlBRh*1DLb7mJ+KO>!t^t8hX1#_Wk`gjDio9)9IGbyCAGI4DJ~orK+YRv znjxRMtshZQHc$#Y-<-JOV6g^Cr@odj&Xw5B(FmI)*qJ9NHmIz_r{t)TxyB`L-%q5l ztzHgD;S6cw?7Atg*6E1!c6*gPRCb%t7D%z<(xm+K{%EJNiI2N0l8ud0Ch@_av_RW? zIr!nO4dL5466WslE6MsfMss7<)-S!e)2@r2o=7_W)OO`~CwklRWzHTfpB)_HYwgz=BzLhgZ9S<{nLBOwOIgJU=94uj6r!m>Xyn9>&xP+=5!zG_*yEoRgM0`aYts z^)&8(>z5C-QQ*o_s(8E4*?AX#S^0)aqB)OTyX>4BMy8h(cHjA8ji1PRlox@jB*1n? zDIfyDjzeg91Ao(;Q;KE@zei$}>EnrF6I}q&Xd=~&$WdDsyH0H7fJX|E+O~%LS*7^Q zYzZ4`pBdY{b7u72gZm6^5~O-57HwzwAz{)NvVaowo`X02tL3PpgLjwA`^i9F^vSpN zAqH3mRjG8VeJNHZ(1{%!XqC+)Z%D}58Qel{_weSEHoygT9pN@i zi=G;!Vj6XQk2tuJC>lza%ywz|`f7TIz*EN2Gdt!s199Dr4Tfd_%~fu8gXo~|ogt5Q zlEy_CXEe^BgsYM^o@L?s33WM14}7^T(kqohOX_iN@U?u;$l|rAvn{rwy>!yfZw13U zB@X9)qt&4;(C6dP?yRsoTMI!j-f1KC!<%~i1}u7yLXYn)(#a;Z6~r>hp~kfP));mi zcG%kdaB9H)z9M=H!f>kM->fTjRVOELNwh1amgKQT=I8J66kI)u_?0@$$~5f`u%;zl zC?pkr^p2Fe=J~WK%4ItSzKA+QHqJ@~m|Cduv=Q&-P8I5rQ-#G@bYH}YJr zUS(~(w|vKyU(T(*py}jTUp%I%{2!W!K(i$uvotcPjVddW z8_5HKY!oBCwGZcs-q`4Yt`Zk~>K?mcxg51wkZlX5e#B08I75F7#dgn5yf&Hrp`*%$ zQ;_Qg>TYRzBe$x=T(@WI9SC!ReSas9vDm(yslQjBJZde5z8GDU``r|N(MHcxNopGr z_}u39W_zwWDL*XYYt>#Xo!9kL#97|EAGyGBcRXtLTd59x%m=3i zL^9joWYA)HfL15l9%H?q`$mY27!<9$7GH(kxb%MV>`}hR4a?+*LH6aR{dzrX@?6X4 z3e`9L;cjqYb`cJmophbm(OX0b)!AFG?5`c#zLagzMW~o)?-!@e80lvk!p#&CD8u5_r&wp4O0zQ>y!k5U$h_K;rWGk=U)zX!#@Q%|9g*A zWx)qS1?fq6X<$mQTB$#3g;;5tHOYuAh;YKSBz%il3Ui6fPRv#v62SsrCdMRTav)Sg zTq1WOu&@v$Ey;@^+_!)cf|w_X<@RC>!=~+A1-65O0bOFYiH-)abINwZvFB;hJjL_$ z(9iScmUdMp2O$WW!520Hd0Q^Yj?DK%YgJD^ez$Z^?@9@Ab-=KgW@n8nC&88)TDC+E zlJM)L3r+ZJfZW_T$;Imq*#2<(j+FIk8ls7)WJ6CjUu#r5PoXxQs4b)mZza<8=v{o)VlLRM<9yw^0En#tXAj`Sylxvki{<1DPe^ zhjHwx^;c8tb?Vr$6ZB;$Ff$+3(*oinbwpN-#F)bTsXq@Sm?43MC#jQ~`F|twI=7oC zH4TJtu#;ngRA|Y~w5N=UfMZi?s0%ZmKUFTAye&6Y*y-%c1oD3yQ%IF2q2385Zl+=> zfz=o`Bedy|U;oxbyb^rB9ixG{Gb-{h$U0hVe`J;{ql!s_OJ_>>eoQn(G6h7+b^P48 zG<=Wg2;xGD-+d@UMZ!c;0>#3nws$9kIDkK13IfloGT@s14AY>&>>^#>`PT7GV$2Hp zN<{bN*ztlZu_%W=&3+=#3bE(mka6VoHEs~0BjZ$+=0`a@R$iaW)6>wp2w)=v2@|2d z%?34!+iOc5S@;AAC4hELWLH56RGxo4jw8MDMU0Wk2k_G}=Vo(>eRFo(g3@HjG|`H3 zm8b*dK=moM*oB<)*A$M9!!5o~4U``e)wxavm@O_R(`P|u%9^LGi(_%IF<6o;NLp*0 zKsfZ0#24GT8(G`i4UvoMh$^;kOhl?`0yNiyrC#HJH=tqOH^T_d<2Z+ zeN>Y9Zn!X4*DMCK^o75Zk2621bdmV7Rx@AX^alBG4%~;G_vUoxhfhFRlR&+3WwF^T zaL)8xPq|wCZoNT^>3J0K?e{J-kl+hu2rZI>CUv#-z&u@`hjeb+bBZ>bcciQVZ{SbW zez04s9oFEgc8Z+Kp{XFX`MVf-s&w9*dx7wLen(_@y34}Qz@&`$2+osqfxz4&d}{Ql z*g1ag00Gu+$C`0avds{Q65BfGsu9`_`dML*rX~hyWIe$T>CsPRoLIr%MTk3pJ^2zH1qub1MBzPG}PO;Wmav9w%F7?%l=xIf#LlP`! z_Nw;xBQY9anH5-c8A4mME}?{iewjz(Sq-29r{fV;Fc>fv%0!W@(+{={Xl-sJ6aMoc z)9Q+$bchoTGTyWU_oI19!)bD=IG&OImfy;VxNXoIO2hYEfO~MkE#IXTK(~?Z&!ae! zl8z{D&2PC$Q*OBC(rS~-*-GHNJ6AC$@eve>LB@Iq;jbBZj`wk4|LGogE||Ie=M5g= z9d`uYQ1^Sr_q2wmZE>w2WG)!F%^KiqyaDtIAct?}D~JP4shTJy5Bg+-(EA8aXaxbd~BKMtTf2iQ69jD1o* zZF9*S3!v-TdqwK$%&?91Sh2=e63;X0Lci@n7y3XOu2ofyL9^-I767eHESAq{m+@*r zbVDx!FQ|AjT;!bYsXv8ilQjy~Chiu&HNhFXt3R_6kMC8~ChEFqG@MWu#1Q1#=~#ix zrkHpJre_?#r=N0wv`-7cHHqU`phJX2M_^{H0~{VP79Dv{6YP)oA1&TSfKPEPZn2)G z9o{U1huZBLL;Tp_0OYw@+9z(jkrwIGdUrOhKJUbwy?WBt zlIK)*K0lQCY0qZ!$%1?3A#-S70F#YyUnmJF*`xx?aH5;gE5pe-15w)EB#nuf6B*c~ z8Z25NtY%6Wlb)bUA$w%HKs5$!Z*W?YKV-lE0@w^{4vw;J>=rn?u!rv$&eM+rpU6rc=j9>N2Op+C{D^mospMCjF2ZGhe4eADA#skp2EA26%p3Ex9wHW8l&Y@HX z$Qv)mHM}4*@M*#*ll5^hE9M^=q~eyWEai*P;4z<9ZYy!SlNE5nlc7gm;M&Q zKhKE4d*%A>^m0R?{N}y|i6i^k>^n4(wzKvlQeHq{l&JuFD~sTsdhs`(?lFK@Q{pU~ zb!M3c@*3IwN1RUOVjY5>uT+s-2QLWY z4T2>fiSn>>Fob+%B868-v9D@AfWr#M8eM6w#eAlhc#zk6jkLxGBGk`E3$!A@*am!R zy>29&ptYK6>cvP`b!syNp)Q$0UOW|-O@)8!?94GOYF_}+zlW%fCEl|Tep_zx05g6q z>tp47e-&R*hSNe{6{H!mL?+j$c^TXT{C&@T-xIaesNCl05 z9SLb@q&mSb)I{VXMaiWa3PWj=Ed!>*GwUe;^|uk=Pz$njNnfFY^MM>E?zqhf6^{}0 zx&~~dA5#}1ig~7HvOQ#;d9JZBeEQ+}-~v$at`m!(ai z$w(H&mWCC~;PQ1$%iuz3`>dWeb3_p}X>L2LK%2l59Tyc}4m0>9A!8rhoU3m>i2+hl zx?*qs*c^j}+WPs>&v1%1Ko8_ivAGIn@QK7A`hDz-Emkcgv2@wTbYhkiwX2l=xz*XG zaiNg+j4F-I>9v+LjosI-QECrtKjp&0T@xIMKVr+&)gyb4@b3y?2CA?=ooN zT#;rU86WLh(e@#mF*rk(NV-qSIZyr z$6!ZUmzD)%yO-ot`rw3rp6?*_l*@Z*IB0xn4|BGPWHNc-1ZUnNSMWmDh=EzWJRP`) zl%d%J613oXzh5;VY^XWJi{lB`f#u+ThvtP7 zq(HK<4>tw(=yzSBWtYO}XI`S1pMBe3!jFxBHIuwJ(@%zdQFi1Q_hU2eDuHqXte7Ki zOV55H2D6u#4oTfr7|u*3p75KF&jaLEDpxk!4*bhPc%mpfj)Us3XIG3 zIKMX^s^1wt8YK7Ky^UOG=w!o5e7W-<&c|fw2{;Q11vm@J{)@N3-p1U>!0~sKWHaL= zWV(0}1IIyt1p%=_-Fe5Kfzc71wg}`RDDntVZv;4!=&XXF-$48jS0Sc;eDy@Sg;+{A zFStc{dXT}kcIjMXb4F7MbX~2%i;UrBxm%qmLKb|2=?uPr00-$MEUIGR5+JG2l2Nq` zkM{{1RO_R)+8oQ6x&-^kCj)W8Z}TJjS*Wm4>hf+4#VJP)OBaDF%3pms7DclusBUw} z{ND#!*I6h85g6DzNvdAmnwWY{&+!KZM4DGzeHI?MR@+~|su0{y-5-nICz_MIT_#FE zm<5f3zlaKq!XyvY3H`9s&T};z!cK}G%;~!rpzk9-6L}4Rg7vXtKFsl}@sT#U#7)x- z7UWue5sa$R>N&b{J61&gvKcKlozH*;OjoDR+elkh|4bJ!_3AZNMOu?n9&|L>OTD78 z^i->ah_Mqc|Ev)KNDzfu1P3grBIM#%`QZqj5W{qu(HocQhjyS;UINoP`{J+DvV?|1 z_sw6Yr3z6%e7JKVDY<$P=M)dbk@~Yw9|2!Cw!io3%j92wTD!c^e9Vj+7VqXo3>u#= zv#M{HHJ=e$X5vQ>>ML?E8#UlmvJgTnb73{PSPTf*0)mcj6C z{KsfUbDK|F$E(k;ER%8HMdDi`=BfpZzP3cl5yJHu;v^o2FkHNk;cXc17tL8T!CsYI zfeZ6sw@;8ia|mY_AXjCS?kUfxdjDB28)~Tz1dGE|{VfBS9`0m2!m1yG?hR})er^pl4c@9Aq+|}ZlDaHL)K$O| z%9Jp-imI-Id0|(d5{v~w6mx)tUKfbuVD`xNt04Mry%M+jXzE>4(TBsx#&=@wT2Vh) z1yeEY&~17>0%P(eHP0HB^|7C+WJxQBTG$uyOWY@iDloRIb-Cf!p<{WQHR!422#F34 zG`v|#CJ^G}y9U*7jgTlD{D&y$Iv{6&PYG>{Ixg$pGk?lWrE#PJ8KunQC@}^6OP!|< zS;}p3to{S|uZz%kKe|;A0bL0XxPB&Q{J(9PyX`+Kr`k~r2}yP^ND{8!v7Q1&vtk& z2Y}l@J@{|2`oA%sxvM9i0V+8IXrZ4;tey)d;LZI70Kbim<4=WoTPZy=Yd|34v#$Kh zx|#YJ8s`J>W&jt#GcMpx84w2Z3ur-rK7gf-p5cE)=w1R2*|0mj12hvapuUWM0b~dG zMg9p8FmAZI@i{q~0@QuY44&mMUNXd7z>U58shA3o`p5eVLpq>+{(<3->DWuSFVZwC zxd50Uz(w~LxC4}bgag#q#NNokK@yNc+Q|Ap!u>Ddy+df>v;j@I12CDNN9do+0^n8p zMQs7X#+FVF0C5muGfN{r0|Nkql%BQT|K(DDNdR2pzM=_ea5+GO|J67`05AV92t@4l z0Qno0078PIHdaQGHZ~Scw!dzgqjK~3B7kf>BcP__&lLyU(cu3B^uLo%{j|Mb0NR)tkeT7Hcwp4O# z)yzu>cvG(d9~0a^)eZ;;%3ksk@F&1eEBje~ zW+-_s)&RgiweQc!otF>4%vbXKaOU41{!hw?|2`Ld3I8$&#WOsq>EG)1ANb!{N4z9@ zsU!bPG-~-bqCeIDzo^Q;gnucB{tRzm{ZH^Orphm2U+REA!*<*J6YQV83@&xoDl%#wnl5qcBqCcAF-vX5{30}(oJrnSH z{RY85hylK2dMOh2%oO1J8%)0?8TOL%rS8)+CsDv}aQ>4D)Jv+DLK)9gI^n-T^$)Tc zFPUD75qJm!Y-KBqj;JP4dV4 z`X{lGmn<)1IGz330}s}Jrjtf{(lnuuNHe5(ezA(pYa=1|Ff-LhPFK8 zyJh_b{yzu0yll6ZkpRzRjezyYivjyjW7QwO;@6X`m;2Apn2EK2!~7S}-*=;5*7K$B z`x(=!^?zgj(-`&ApZJXI09aDLXaT@<;CH=?fBOY5d|b~wBA@@p^K#nxr`)?i?SqTupI_PJ(A3cx`z~9mX_*)>L F{|7XC?P&l2 diff --git a/pubspec.yaml b/pubspec.yaml index d6bcff5c..54f1701d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-6 +version: 1.0.1-7 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 80e7f8be67ec4490dda10ba9b86d3d245665bef0 Mon Sep 17 00:00:00 2001 From: ama-pdftron <83238520+ama-pdftron@users.noreply.github.com> Date: Wed, 15 Feb 2023 16:02:24 -0800 Subject: [PATCH 06/47] Android SDK 9.5.0 (#289) * Android SDK 9.5.0 * Updating package version * Android SDK 9.5.0 * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0dd309e2..c3cd8406 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-8 - Feb 17, 2023 +- Update Android to v9.5.0 + # 1.0.0-4 - Dec 19, 2022 - Update Android to v9.4.2 diff --git a/android/build.gradle b/android/build.gradle index 1263a9d0..995ce92c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,6 +38,6 @@ android { dependencies { // PDFTron SDK dependencies - implementation "com.pdftron:pdftron:9.4.2" - implementation "com.pdftron:tools:9.4.2" + implementation "com.pdftron:pdftron:9.5.0" + implementation "com.pdftron:tools:9.5.0" } diff --git a/pubspec.yaml b/pubspec.yaml index 54f1701d..d5926ff5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-7 +version: 1.0.1-8 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 40fda2c27816be22dcdb713d7638a4c7876f1d21 Mon Sep 17 00:00:00 2001 From: ama-pdftron <83238520+ama-pdftron@users.noreply.github.com> Date: Mon, 27 Mar 2023 16:10:56 -0700 Subject: [PATCH 07/47] Android 10.0.0 (#291) * Android 10.0.0 * Updating package version * Add changelog * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c3cd8406..3c7cca09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-9 - Mar 27, 2023 +- Update Android to v10.0.0 + # 1.0.0-8 - Feb 17, 2023 - Update Android to v9.5.0 diff --git a/android/build.gradle b/android/build.gradle index 995ce92c..167d7cc2 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,6 +38,6 @@ android { dependencies { // PDFTron SDK dependencies - implementation "com.pdftron:pdftron:9.5.0" - implementation "com.pdftron:tools:9.5.0" + implementation "com.pdftron:pdftron:10.0.0" + implementation "com.pdftron:tools:10.0.0" } diff --git a/pubspec.yaml b/pubspec.yaml index d5926ff5..6f72847d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-8 +version: 1.0.1-9 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 11c5a46bfdbbce81c37d8bc483f1b1d11a9b6d5b Mon Sep 17 00:00:00 2001 From: David Luco <5156878+dluco@users.noreply.github.com> Date: Wed, 29 Mar 2023 10:56:13 -0700 Subject: [PATCH 08/47] Update minimum iOS version (#292) * Update minimum iOS version * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- ios/pdftron_flutter.podspec | 3 +-- pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ios/pdftron_flutter.podspec b/ios/pdftron_flutter.podspec index b5700df7..a00f2fb8 100644 --- a/ios/pdftron_flutter.podspec +++ b/ios/pdftron_flutter.podspec @@ -11,6 +11,7 @@ A new flutter plugin project. s.homepage = 'http://example.com' s.license = { :file => '../LICENSE' } s.author = { 'Your Company' => 'email@example.com' } + s.platform = :ios, "11.0" s.source = { :path => '.' } s.source_files = 'Classes/**/*' s.public_header_files = 'Classes/**/*.h' @@ -19,7 +20,5 @@ A new flutter plugin project. s.dependency 'PDFTronTools' s.frameworks = 'PDFNet', 'Tools' - - s.ios.deployment_target = '8.0' end diff --git a/pubspec.yaml b/pubspec.yaml index 6f72847d..b8b0d01a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-9 +version: 1.0.1-10 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From f2f9e0dedfd8e2f90fc8edf50e73fb5e9e1b131f Mon Sep 17 00:00:00 2001 From: ama-pdftron <83238520+ama-pdftron@users.noreply.github.com> Date: Wed, 29 Mar 2023 14:33:12 -0700 Subject: [PATCH 09/47] Android targetSDK 33 (#293) * Android 10.0.0 * Updating package version * Add changelog * Change Android sdk to 33 * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- android/build.gradle | 2 +- example/android/app/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 167d7cc2..5e8f64cd 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -25,7 +25,7 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { minSdkVersion 19 diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index af24d697..58823a28 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -25,7 +25,7 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 31 + compileSdkVersion 33 ndkVersion flutter.ndkVersion compileOptions { @@ -40,7 +40,7 @@ android { defaultConfig { applicationId "com.pdftron.pdftronflutterexample" minSdkVersion 21 - targetSdkVersion 31 + targetSdkVersion 33 multiDexEnabled true manifestPlaceholders += [pdftronLicenseKey:PDFTRON_LICENSE_KEY] versionCode flutterVersionCode.toInteger() diff --git a/pubspec.yaml b/pubspec.yaml index b8b0d01a..5f995314 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-10 +version: 1.0.1-11 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From a06a8b32382956e019adf2a4cbc2f3084ea14b95 Mon Sep 17 00:00:00 2001 From: Darren Chan Date: Mon, 10 Apr 2023 15:52:23 -0700 Subject: [PATCH 10/47] AnnotationSmartPen support in flutter-iOS (#294) * iOS support for AnnotationSmartPen - moved constant off android only comment for 'AnnotationSmartPen' - added ios flutter plugin support for AnnotationSmartPen to disable smart pen * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- ios/Classes/PdftronFlutterPlugin.h | 1 + ios/Classes/PdftronFlutterPlugin.m | 5 +++++ lib/src/constants.dart | 4 +--- pubspec.yaml | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ios/Classes/PdftronFlutterPlugin.h b/ios/Classes/PdftronFlutterPlugin.h index 62c55b77..f437e6ae 100644 --- a/ios/Classes/PdftronFlutterPlugin.h +++ b/ios/Classes/PdftronFlutterPlugin.h @@ -119,6 +119,7 @@ static NSString * const PTFormCreateRadioFieldToolKey = @"FormCreateRadioField"; static NSString * const PTFormCreateComboBoxFieldToolKey = @"FormCreateComboBoxField"; static NSString * const PTFormCreateListBoxFieldToolKey = @"FormCreateListBoxField"; static NSString * const PTPencilKitDrawingToolKey = @"PencilKitDrawing"; +static NSString * const PTAnnotationSmartPenToolKey = @"AnnotationSmartPen"; // button static NSString * const PTStickyToolButtonKey = @"stickyToolButton"; diff --git a/ios/Classes/PdftronFlutterPlugin.m b/ios/Classes/PdftronFlutterPlugin.m index 90e3ed0e..0af027b0 100644 --- a/ios/Classes/PdftronFlutterPlugin.m +++ b/ios/Classes/PdftronFlutterPlugin.m @@ -1022,6 +1022,9 @@ + (void)disableTools:(NSArray *)toolsToDisable documentController:(PTDocumen else if ([string isEqualToString:PTPencilKitDrawingToolKey]) { toolManager.pencilDrawingAnnotationOptions.canCreate = value; } + else if ([string isEqualToString:PTAnnotationSmartPenToolKey]) { + toolManager.smartPenEnabled = value; + } } } } @@ -3018,6 +3021,8 @@ - (void)setToolMode:(NSString *)toolMode resultToken:(FlutterResult)flutterResul // TODO } else if ([toolMode isEqualToString:PTPencilKitDrawingToolKey]) { toolClass = [PTPencilDrawingCreate class]; + } else if ([toolMode isEqualToString:PTAnnotationSmartPenToolKey]) { + toolClass = [PTSmartPen class]; } if (toolClass) { diff --git a/lib/src/constants.dart b/lib/src/constants.dart index 1604e422..3df2d655 100644 --- a/lib/src/constants.dart +++ b/lib/src/constants.dart @@ -241,13 +241,11 @@ class Tools { static const formCreateRadioField = 'FormCreateRadioField'; static const formCreateComboBoxField = 'FormCreateComboBoxField'; static const formCreateListBoxField = 'FormCreateListBoxField'; + static const annotationSmartPen = 'AnnotationSmartPen'; /// iOS only. static const pencilKitDrawing = 'PencilKitDrawing'; - /// Android only. - static const annotationSmartPen = 'AnnotationSmartPen'; - /// Android only. static const annotationLasso = 'AnnotationLasso'; } diff --git a/pubspec.yaml b/pubspec.yaml index 5f995314..c23962d4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-11 +version: 1.0.1-12 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From f70aa00dd0e6a48ef52630ae31be05f8793e0164 Mon Sep 17 00:00:00 2001 From: ama-pdftron <83238520+ama-pdftron@users.noreply.github.com> Date: Mon, 8 May 2023 16:16:33 -0700 Subject: [PATCH 11/47] Android 10.1.0 (#295) * Android 10.1.0 * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c7cca09..471228a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-13 - May 10, 2023 +- Update Android to v10.1.0 + # 1.0.0-9 - Mar 27, 2023 - Update Android to v10.0.0 diff --git a/android/build.gradle b/android/build.gradle index 5e8f64cd..e33b9296 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,6 +38,6 @@ android { dependencies { // PDFTron SDK dependencies - implementation "com.pdftron:pdftron:10.0.0" - implementation "com.pdftron:tools:10.0.0" + implementation "com.pdftron:pdftron:10.1.0" + implementation "com.pdftron:tools:10.1.0" } diff --git a/pubspec.yaml b/pubspec.yaml index c23962d4..22107b7a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-12 +version: 1.0.1-13 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From b013fa39f08bee2aab9249eb06f58a5926660a7c Mon Sep 17 00:00:00 2001 From: sgong-pdftron Date: Mon, 19 Jun 2023 11:00:43 -0700 Subject: [PATCH 12/47] Android 10.2.0 (#296) * Update to 10.2 * update * Updating package version * wrong date * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 471228a4..bc88120c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-14 - June 21, 2023 +- Update Android to v10.2.0 + # 1.0.0-13 - May 10, 2023 - Update Android to v10.1.0 diff --git a/android/build.gradle b/android/build.gradle index e33b9296..b68f303b 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,6 +38,6 @@ android { dependencies { // PDFTron SDK dependencies - implementation "com.pdftron:pdftron:10.1.0" - implementation "com.pdftron:tools:10.1.0" + implementation "com.pdftron:pdftron:10.2.0" + implementation "com.pdftron:tools:10.2.0" } diff --git a/pubspec.yaml b/pubspec.yaml index 22107b7a..8ff629aa 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-13 +version: 1.0.1-14 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From ead55c80cb6b24917c6a5ad80e98327b14b64f49 Mon Sep 17 00:00:00 2001 From: sgong-pdftron Date: Tue, 4 Jul 2023 10:02:33 -0700 Subject: [PATCH 13/47] [Android|Fix] Fix save document auto-save flag (#298) * fix wrong flags * changelog * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ .../java/com/pdftron/pdftronflutter/helpers/PluginUtils.java | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc88120c..4589c007 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-15 - July 4, 2023 +- Fix bug in Android `saveDocument` + # 1.0.0-14 - June 21, 2023 - Update Android to v10.2.0 diff --git a/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java b/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java index 24e29df2..b9b179db 100644 --- a/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java +++ b/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java @@ -3565,10 +3565,10 @@ private static void importBookmarkJson(String bookmarkJson, MethodChannel.Result private static void saveDocument(MethodChannel.Result result, ViewerComponent component) { PdfViewCtrlTabFragment2 pdfViewCtrlTabFragment = component.getPdfViewCtrlTabFragment(); if (pdfViewCtrlTabFragment != null) { - pdfViewCtrlTabFragment.setSavingEnabled(component.isAutoSaveEnabled()); + pdfViewCtrlTabFragment.setSavingEnabled(true); pdfViewCtrlTabFragment.save(false, true, true); + pdfViewCtrlTabFragment.setSavingEnabled(component.isAutoSaveEnabled()); - // TODO if add auto save flag: getPdfViewCtrlTabFragment().setSavingEnabled(mAutoSaveEnabled); if (component.isBase64()) { try { byte[] data = FileUtils.readFileToByteArray(pdfViewCtrlTabFragment.getFile()); diff --git a/pubspec.yaml b/pubspec.yaml index 8ff629aa..764d1af8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-14 +version: 1.0.1-15 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From a8b317c18a01af026ab71527124d8acdd05cb576 Mon Sep 17 00:00:00 2001 From: bfung <43352070+brandenfung2@users.noreply.github.com> Date: Mon, 31 Jul 2023 16:51:18 -0700 Subject: [PATCH 14/47] Update to Android 10.3.0 (#299) * Update Android to 10.3.0 * Add missing override * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- .../java/com/pdftron/pdftronflutter/helpers/ViewerImpl.java | 5 +++++ pubspec.yaml | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4589c007..1ac7d56c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-16 - August 2, 2023 +- Update Android to v10.3.0 + # 1.0.0-15 - July 4, 2023 - Fix bug in Android `saveDocument` diff --git a/android/build.gradle b/android/build.gradle index b68f303b..3d7f9746 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,6 +38,6 @@ android { dependencies { // PDFTron SDK dependencies - implementation "com.pdftron:pdftron:10.2.0" - implementation "com.pdftron:tools:10.2.0" + implementation "com.pdftron:pdftron:10.3.0" + implementation "com.pdftron:tools:10.3.0" } diff --git a/android/src/main/java/com/pdftron/pdftronflutter/helpers/ViewerImpl.java b/android/src/main/java/com/pdftron/pdftronflutter/helpers/ViewerImpl.java index 9317fab5..8775cb3b 100644 --- a/android/src/main/java/com/pdftron/pdftronflutter/helpers/ViewerImpl.java +++ b/android/src/main/java/com/pdftron/pdftronflutter/helpers/ViewerImpl.java @@ -227,6 +227,11 @@ public void onPageMoved(int from, int to) { } } + @Override + public void onPagesMoved(List pagesMoved, int to, int currentPage) { + + } + @Override public void onPageLabelsChanged() { diff --git a/pubspec.yaml b/pubspec.yaml index 764d1af8..f31d83dd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-15 +version: 1.0.1-16 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 6de50abd606a06ed0537cfe0481743aeee71ed2d Mon Sep 17 00:00:00 2001 From: Darren Chan Date: Wed, 9 Aug 2023 15:24:12 -0700 Subject: [PATCH 15/47] [iOS] PTEraser Added to Toolkey (#300) * add PTEraser tool to toolClassForKey * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- ios/Classes/PdftronFlutterPlugin.m | 3 +++ pubspec.yaml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ios/Classes/PdftronFlutterPlugin.m b/ios/Classes/PdftronFlutterPlugin.m index 0af027b0..808358ca 100644 --- a/ios/Classes/PdftronFlutterPlugin.m +++ b/ios/Classes/PdftronFlutterPlugin.m @@ -3811,6 +3811,9 @@ + (Class)toolClassForKey:(NSString *)key else if ([key isEqualToString:PTAnnotationCreateFreeHighlighterToolKey]) { return [PTFreeHandHighlightCreate class]; } + else if ([key isEqualToString:PTEraserToolKey]) { + return [PTEraser class]; + } return Nil; } diff --git a/pubspec.yaml b/pubspec.yaml index f31d83dd..c23a0814 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-16 +version: 1.0.1-17 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 29364c6ed585af71d53aef9ec322336f987c493c Mon Sep 17 00:00:00 2001 From: Darren Chan Date: Wed, 23 Aug 2023 16:05:56 -0700 Subject: [PATCH 16/47] (Android) - added dart method mergeAnnotations - importAnnotations to merge instead of update (#302) * mergeAnnotations - android mergeAnnotations added (feature parity with RN) * Updating package version * Updating pubspec.yaml * Updating package version * Update CHANGELOG.md * Updating pubspec.yaml * Updating package version * Update CHANGELOG.md * Updating pubspec.yaml * Updating package version * Update CHANGELOG.md * Updating pubspec.yaml * Updating package version * fix branch * update document_view.dart * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 6 ++++++ .../pdftronflutter/helpers/PluginUtils.java | 21 ++++++++++++++++--- lib/pdftron_flutter.dart | 6 ++++++ lib/src/constants.dart | 1 + lib/src/document_view.dart | 6 ++++++ pubspec.yaml | 2 +- 6 files changed, 38 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ac7d56c..e57f97c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# 1.0.0-18 - August 23, 2023 +- mergeAnnotations() + +# 1.0.0-17 - August 8, 2023 +- added eraser to PTToolKey (iOS) + # 1.0.0-16 - August 2, 2023 - Update Android to v10.3.0 diff --git a/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java b/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java index b9b179db..f2efc2d5 100644 --- a/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java +++ b/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java @@ -304,6 +304,7 @@ public class PluginUtils { public static final String FUNCTION_SET_FLAG_FOR_FIELDS = "setFlagForFields"; public static final String FUNCTION_SET_VALUES_FOR_FIELDS = "setValuesForFields"; public static final String FUNCTION_IMPORT_ANNOTATIONS = "importAnnotations"; + public static final String FUNCTION_MERGE_ANNOTATIONS = "mergeAnnotations"; public static final String FUNCTION_EXPORT_ANNOTATIONS = "exportAnnotations"; public static final String FUNCTION_FLATTEN_ANNOTATIONS = "flattenAnnotations"; public static final String FUNCTION_DELETE_ANNOTATIONS = "deleteAnnotations"; @@ -2175,13 +2176,23 @@ public static void onMethodCall(MethodCall call, MethodChannel.Result result, Vi checkFunctionPrecondition(component); String xfdf = call.argument(KEY_XFDF); try { - importAnnotations(xfdf, result, component); + importAnnotations(xfdf, true, result, component); } catch (PDFNetException ex) { ex.printStackTrace(); result.error(Long.toString(ex.getErrorCode()), "PDFTronException Error: " + ex, null); } break; } + case FUNCTION_MERGE_ANNOTATIONS: { + checkFunctionPrecondition(component); + String xfdf = call.argument(KEY_XFDF); + try { + importAnnotations(xfdf, false, result, component); + } catch (PDFNetException ex) { + ex.printStackTrace(); + result.error(Long.toString(ex.getErrorCode()), "PDFTronException Error: " + ex, null); + } + } case FUNCTION_EXPORT_ANNOTATIONS: { checkFunctionPrecondition(component); String annotationList = call.argument(KEY_ANNOTATION_LIST); @@ -2856,7 +2867,7 @@ private static void groupAnnotations(MethodCall call, MethodChannel.Result resul } } - private static void importAnnotations(String xfdf, MethodChannel.Result result, ViewerComponent component) throws PDFNetException { + private static void importAnnotations(String xfdf, boolean replace, MethodChannel.Result result, ViewerComponent component) throws PDFNetException { PDFViewCtrl pdfViewCtrl = component.getPdfViewCtrl(); PDFDoc pdfDoc = component.getPdfDoc(); if (null == pdfViewCtrl || null == pdfDoc || null == xfdf) { @@ -2886,7 +2897,11 @@ private static void importAnnotations(String xfdf, MethodChannel.Result result, FDFDoc fdfDoc = FDFDoc.createFromXFDF(xfdf); - pdfDoc.fdfUpdate(fdfDoc); + if (replace) { + pdfDoc.fdfUpdate(fdfDoc); + } else { + pdfDoc.fdfMerge(fdfDoc); + } pdfDoc.refreshAnnotAppearances(); pdfViewCtrl.update(true); diff --git a/lib/pdftron_flutter.dart b/lib/pdftron_flutter.dart index 42431ee9..50fcbfcf 100644 --- a/lib/pdftron_flutter.dart +++ b/lib/pdftron_flutter.dart @@ -62,6 +62,12 @@ class PdftronFlutter { Functions.importAnnotations, {Parameters.xfdf: xfdf}); } + /// Merges the given XFDF annotation string to the current document. + static Future mergeAnnotations(String xfdf) { + return _channel.invokeMethod( + Functions.mergeAnnotations, {Parameters.xfdf: xfdf}); + } + /// Exports the specified annotations in the current document as a XFDF annotation string. /// /// ```dart diff --git a/lib/src/constants.dart b/lib/src/constants.dart index 3df2d655..b91948b9 100644 --- a/lib/src/constants.dart +++ b/lib/src/constants.dart @@ -11,6 +11,7 @@ class Functions { /// Android only static const getSavedSignatureJpgFolder = "getSavedSignatureJpgFolder"; static const importAnnotations = "importAnnotations"; + static const mergeAnnotations = "mergeAnnotations"; static const exportAnnotations = "exportAnnotations"; static const flattenAnnotations = "flattenAnnotations"; static const deleteAnnotations = "deleteAnnotations"; diff --git a/lib/src/document_view.dart b/lib/src/document_view.dart index b115b023..49e61c5a 100644 --- a/lib/src/document_view.dart +++ b/lib/src/document_view.dart @@ -90,6 +90,12 @@ class DocumentViewController { Functions.importAnnotations, {Parameters.xfdf: xfdf}); } + /// Merges the given XFDF annotation string to the current document. + Future mergeAnnotations(String xfdf) { + return _channel.invokeMethod( + Functions.mergeAnnotations, {Parameters.xfdf: xfdf}); + } + /// Exports the specified annotations in the current document as a XFDF annotation string. /// /// ```dart diff --git a/pubspec.yaml b/pubspec.yaml index c23a0814..ddbdc562 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-17 +version: 1.0.1-18 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 57a404e578f1efbfc1e5cfb9a6c4c40393db99a7 Mon Sep 17 00:00:00 2001 From: ama-pdftron <83238520+ama-pdftron@users.noreply.github.com> Date: Thu, 24 Aug 2023 10:43:50 -0700 Subject: [PATCH 17/47] Update README.md (#304) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 42cbe8d0..0b225ebf 100644 --- a/README.md +++ b/README.md @@ -441,3 +441,4 @@ See [Contributing](https://github.com/PDFTron/pdftron-flutter/blob/publish-prep- ## License See [License](https://github.com/PDFTron/pdftron-flutter/blob/publish-prep-nullsafe/LICENSE) ![](https://onepixel.pdftron.com/pdftron-flutter) + From 41daf9e9e66aa84e56f9a8bf68e466f807a43a51 Mon Sep 17 00:00:00 2001 From: ama-pdftron <83238520+ama-pdftron@users.noreply.github.com> Date: Thu, 24 Aug 2023 10:47:13 -0700 Subject: [PATCH 18/47] Update README.md (#305) * Update README.md * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- README.md | 3 +-- pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0b225ebf..dd90e54c 100644 --- a/README.md +++ b/README.md @@ -440,5 +440,4 @@ See [Contributing](https://github.com/PDFTron/pdftron-flutter/blob/publish-prep- ## License See [License](https://github.com/PDFTron/pdftron-flutter/blob/publish-prep-nullsafe/LICENSE) -![](https://onepixel.pdftron.com/pdftron-flutter) - +![](https://onepixel.pdftron.com/pdftron-flutter) \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml index ddbdc562..a13af078 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-18 +version: 1.0.1-19 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From f331a5aa84bd5edd6e2267cd76a0c2374c829a43 Mon Sep 17 00:00:00 2001 From: bfung <43352070+brandenfung2@users.noreply.github.com> Date: Tue, 12 Sep 2023 11:40:54 -0700 Subject: [PATCH 19/47] Update Apryse Android SDK to version 10.4.0 (#306) * Update Apryse Android SDK to version 10.4.0 * Updating package version * Fix wrong changlog version * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e57f97c5..12988b75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-20 - September 13, 2023 +- Update Android to v10.4.0 + # 1.0.0-18 - August 23, 2023 - mergeAnnotations() diff --git a/android/build.gradle b/android/build.gradle index 3d7f9746..357db9b5 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,6 +38,6 @@ android { dependencies { // PDFTron SDK dependencies - implementation "com.pdftron:pdftron:10.3.0" - implementation "com.pdftron:tools:10.3.0" + implementation "com.pdftron:pdftron:10.4.0" + implementation "com.pdftron:tools:10.4.0" } diff --git a/pubspec.yaml b/pubspec.yaml index a13af078..6c0181ab 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-19 +version: 1.0.1-20 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 698680b3558a29e7c5a5d15fa7cd23a87984d306 Mon Sep 17 00:00:00 2001 From: bfung <43352070+brandenfung2@users.noreply.github.com> Date: Thu, 21 Sep 2023 15:06:41 -0700 Subject: [PATCH 20/47] [Android] Fix missing break (#307) * Fix missing break * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../java/com/pdftron/pdftronflutter/helpers/PluginUtils.java | 1 + pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java b/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java index f2efc2d5..ea252fd4 100644 --- a/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java +++ b/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java @@ -2192,6 +2192,7 @@ public static void onMethodCall(MethodCall call, MethodChannel.Result result, Vi ex.printStackTrace(); result.error(Long.toString(ex.getErrorCode()), "PDFTronException Error: " + ex, null); } + break; } case FUNCTION_EXPORT_ANNOTATIONS: { checkFunctionPrecondition(component); diff --git a/pubspec.yaml b/pubspec.yaml index 6c0181ab..1dfbe1d3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-20 +version: 1.0.1-21 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 7b3fb3f040e92da2db1f3d16f3cd8ca71f3a2a9a Mon Sep 17 00:00:00 2001 From: ama-pdftron <83238520+ama-pdftron@users.noreply.github.com> Date: Tue, 24 Oct 2023 11:47:22 -0700 Subject: [PATCH 21/47] Update Arpyse Android SDK to version 10.5.0 (#308) * Update Arpyse Android SDK to version 10.5.0 * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 6 ++++++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12988b75..0703d3a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# 1.0.0-22 - October 25, 2023 +- Update Android to v10.5.0 + +# 1.0.0-21 - September 21, 2023 +- Fix bug in mergeAnnotations() + # 1.0.0-20 - September 13, 2023 - Update Android to v10.4.0 diff --git a/android/build.gradle b/android/build.gradle index 357db9b5..cd733d4b 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,6 +38,6 @@ android { dependencies { // PDFTron SDK dependencies - implementation "com.pdftron:pdftron:10.4.0" - implementation "com.pdftron:tools:10.4.0" + implementation "com.pdftron:pdftron:10.5.0" + implementation "com.pdftron:tools:10.5.0" } diff --git a/pubspec.yaml b/pubspec.yaml index 1dfbe1d3..2fd8936c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-21 +version: 1.0.1-22 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 08f011cc6b11fc7ad32582c15a24d0140af86e97 Mon Sep 17 00:00:00 2001 From: bfung <43352070+brandenfung2@users.noreply.github.com> Date: Tue, 5 Dec 2023 17:44:48 -0800 Subject: [PATCH 22/47] Update to Apryse Android SDK to Version 10.6.0 (#311) * Update to Apryse Android 10.6.0 * Update pubspec version: --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0703d3a9..94c7a1b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-23 - December 6, 2023 +- Update Android to v10.6.0 + # 1.0.0-22 - October 25, 2023 - Update Android to v10.5.0 diff --git a/android/build.gradle b/android/build.gradle index cd733d4b..ce9f39e8 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,6 +38,6 @@ android { dependencies { // PDFTron SDK dependencies - implementation "com.pdftron:pdftron:10.5.0" - implementation "com.pdftron:tools:10.5.0" + implementation "com.pdftron:pdftron:10.6.0" + implementation "com.pdftron:tools:10.6.0" } diff --git a/pubspec.yaml b/pubspec.yaml index 2fd8936c..c84436e9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-22 +version: 1.0.1-23 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 5f6ff30923809b126822b46bcae01c75932d660b Mon Sep 17 00:00:00 2001 From: bfung <43352070+brandenfung2@users.noreply.github.com> Date: Fri, 8 Dec 2023 23:39:54 -0800 Subject: [PATCH 23/47] Fix get latest pubspec in versionBump action (#312) --- .github/workflows/versionBump.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/versionBump.yml b/.github/workflows/versionBump.yml index b41bc26c..b5002fe4 100644 --- a/.github/workflows/versionBump.yml +++ b/.github/workflows/versionBump.yml @@ -18,7 +18,7 @@ jobs: - name: Get Latest pubspec.yaml run: | git fetch - git checkout -m origin/master pubspec.yaml + git merge origin/master git add pubspec.yaml git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" git config --local user.name "github-actions[bot]" From 699ed0d21cb5f67fc8af91634f73a77a912d8293 Mon Sep 17 00:00:00 2001 From: bfung <43352070+brandenfung2@users.noreply.github.com> Date: Fri, 15 Dec 2023 15:42:28 -0800 Subject: [PATCH 24/47] Fix package version update script again (#316) * Fix version bump in pubspec * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/workflows/versionBump.yml | 2 +- pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/versionBump.yml b/.github/workflows/versionBump.yml index b5002fe4..3d5c2a92 100644 --- a/.github/workflows/versionBump.yml +++ b/.github/workflows/versionBump.yml @@ -18,7 +18,7 @@ jobs: - name: Get Latest pubspec.yaml run: | git fetch - git merge origin/master + git checkout origin/master pubspec.yaml git add pubspec.yaml git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" git config --local user.name "github-actions[bot]" diff --git a/pubspec.yaml b/pubspec.yaml index c84436e9..72afd85e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-23 +version: 1.0.1-24 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From fc02ff143aff1c10c4784da9cb6436100c673f7b Mon Sep 17 00:00:00 2001 From: Darren Chan Date: Thu, 11 Jan 2024 08:32:37 -0800 Subject: [PATCH 25/47] Expose pan tool (#317) * android implementation * iOS implementation * changelog * Updating pubspec.yaml * Updating package version * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ .../java/com/pdftron/pdftronflutter/helpers/PluginUtils.java | 5 +++++ ios/Classes/PTFlutterDocumentController.m | 1 + ios/Classes/PdftronFlutterPlugin.h | 1 + ios/Classes/PdftronFlutterPlugin.m | 5 +++++ lib/src/constants.dart | 1 + pubspec.yaml | 2 +- 7 files changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94c7a1b7..8a486a3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-24 - December 13, 2023 +- expose Pan tool + # 1.0.0-23 - December 6, 2023 - Update Android to v10.6.0 diff --git a/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java b/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java index ea252fd4..75c3afc6 100644 --- a/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java +++ b/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java @@ -413,6 +413,7 @@ public class PluginUtils { public static final String TOOL_BUTTON_CALLOUT = "calloutToolButton"; public static final String TOOL_BUTTON_STAMP = "stampToolButton"; + public static final String TOOL_PAN = "Pan"; public static final String TOOL_ANNOTATION_CREATE_FREE_HAND = "AnnotationCreateFreeHand"; public static final String TOOL_ANNOTATION_CREATE_TEXT_HIGHLIGHT = "AnnotationCreateTextHighlight"; public static final String TOOL_ANNOTATION_CREATE_TEXT_UNDERLINE = "AnnotationCreateTextUnderline"; @@ -1677,6 +1678,8 @@ private static ToolManager.ToolMode convStringToToolMode(String item) { mode = ToolManager.ToolMode.SMART_PEN_INK; } else if (TOOL_ANNOTATION_LASSO.equals(item)) { mode = ToolManager.ToolMode.ANNOT_EDIT_RECT_GROUP; + } else if (TOOL_PAN.equals(item)) { + mode = ToolManager.ToolMode.PAN; } return mode; } @@ -1794,6 +1797,8 @@ public static int convStringToAnnotType(String item) { annotType = Annot.e_Widget; } else if (TOOL_FORM_CREATE_TOOL_BOX_FIELD.equals(item)) { annotType = Annot.e_Widget; + } else if (TOOL_PAN.equals(item)) { + annotType = Annot.e_Unknown; } return annotType; } diff --git a/ios/Classes/PTFlutterDocumentController.m b/ios/Classes/PTFlutterDocumentController.m index b3031178..8363e63d 100644 --- a/ios/Classes/PTFlutterDocumentController.m +++ b/ios/Classes/PTFlutterDocumentController.m @@ -786,6 +786,7 @@ -(PTExtendedAnnotType)convertAnnotationNameToAnnotType:(NSString*)annotationName PTAnnotationCreateRubberStampToolKey: @(PTExtendedAnnotTypeStamp), PTAnnotationCreateRedactionToolKey : @(PTExtendedAnnotTypeRedact), PTAnnotationCreateLinkToolKey : @(PTExtendedAnnotTypeLink), +// @"PTPanToolKey" : @(), // @"FormCreateTextField" : @(), // @"FormCreateCheckboxField" : @(), // @"FormCreateRadioField" : @(), diff --git a/ios/Classes/PdftronFlutterPlugin.h b/ios/Classes/PdftronFlutterPlugin.h index f437e6ae..1e6aa42b 100644 --- a/ios/Classes/PdftronFlutterPlugin.h +++ b/ios/Classes/PdftronFlutterPlugin.h @@ -120,6 +120,7 @@ static NSString * const PTFormCreateComboBoxFieldToolKey = @"FormCreateComboBoxF static NSString * const PTFormCreateListBoxFieldToolKey = @"FormCreateListBoxField"; static NSString * const PTPencilKitDrawingToolKey = @"PencilKitDrawing"; static NSString * const PTAnnotationSmartPenToolKey = @"AnnotationSmartPen"; +static NSString * const PTPanToolKey = @"Pan"; // button static NSString * const PTStickyToolButtonKey = @"stickyToolButton"; diff --git a/ios/Classes/PdftronFlutterPlugin.m b/ios/Classes/PdftronFlutterPlugin.m index 808358ca..5a97eacb 100644 --- a/ios/Classes/PdftronFlutterPlugin.m +++ b/ios/Classes/PdftronFlutterPlugin.m @@ -3023,6 +3023,8 @@ - (void)setToolMode:(NSString *)toolMode resultToken:(FlutterResult)flutterResul toolClass = [PTPencilDrawingCreate class]; } else if ([toolMode isEqualToString:PTAnnotationSmartPenToolKey]) { toolClass = [PTSmartPen class]; + } else if ([toolMode isEqualToString:PTPanToolKey]) { + toolClass = [PTPanTool class]; } if (toolClass) { @@ -3814,6 +3816,9 @@ + (Class)toolClassForKey:(NSString *)key else if ([key isEqualToString:PTEraserToolKey]) { return [PTEraser class]; } + else if ([key isEqualToString:PTPanToolKey]) { + return [PTPanTool class]; + } return Nil; } diff --git a/lib/src/constants.dart b/lib/src/constants.dart index b91948b9..0c17d2bc 100644 --- a/lib/src/constants.dart +++ b/lib/src/constants.dart @@ -243,6 +243,7 @@ class Tools { static const formCreateComboBoxField = 'FormCreateComboBoxField'; static const formCreateListBoxField = 'FormCreateListBoxField'; static const annotationSmartPen = 'AnnotationSmartPen'; + static const pan = 'Pan'; /// iOS only. static const pencilKitDrawing = 'PencilKitDrawing'; diff --git a/pubspec.yaml b/pubspec.yaml index 72afd85e..29537922 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-24 +version: 1.0.1-25 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From c5e486b862c3927a77f1e73c9ed85f8d992de839 Mon Sep 17 00:00:00 2001 From: sgong-pdftron Date: Wed, 24 Jan 2024 14:04:12 -0800 Subject: [PATCH 26/47] [Android] Fix issue where status bar appears double height in non-full screen mode (#319) * Fix issue where status appears double height in non-full screen mode * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../FlutterPdfViewCtrlTabHostFragment.java | 13 +++++++++++++ .../pdftron/pdftronflutter/views/DocumentView.java | 2 ++ pubspec.yaml | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 android/src/main/java/com/pdftron/pdftronflutter/nativeviews/FlutterPdfViewCtrlTabHostFragment.java diff --git a/android/src/main/java/com/pdftron/pdftronflutter/nativeviews/FlutterPdfViewCtrlTabHostFragment.java b/android/src/main/java/com/pdftron/pdftronflutter/nativeviews/FlutterPdfViewCtrlTabHostFragment.java new file mode 100644 index 00000000..1d3301dd --- /dev/null +++ b/android/src/main/java/com/pdftron/pdftronflutter/nativeviews/FlutterPdfViewCtrlTabHostFragment.java @@ -0,0 +1,13 @@ +package com.pdftron.pdftronflutter.nativeviews; + +import com.pdftron.pdf.controls.PdfViewCtrlTabHostFragment2; + +public class FlutterPdfViewCtrlTabHostFragment extends PdfViewCtrlTabHostFragment2 { + @Override + protected void updateFullScreenModeLayout() { + if (isInFullScreenMode()) { + super.updateFullScreenModeLayout(); + } + // do nothing if not in full screen mode + } +} diff --git a/android/src/main/java/com/pdftron/pdftronflutter/views/DocumentView.java b/android/src/main/java/com/pdftron/pdftronflutter/views/DocumentView.java index a4309542..96543abe 100644 --- a/android/src/main/java/com/pdftron/pdftronflutter/views/DocumentView.java +++ b/android/src/main/java/com/pdftron/pdftronflutter/views/DocumentView.java @@ -28,6 +28,7 @@ import com.pdftron.pdftronflutter.helpers.ViewerComponent; import com.pdftron.pdftronflutter.helpers.ViewerImpl; import com.pdftron.pdftronflutter.nativeviews.FlutterPdfViewCtrlTabFragment; +import com.pdftron.pdftronflutter.nativeviews.FlutterPdfViewCtrlTabHostFragment; import java.io.File; import java.util.ArrayList; @@ -175,6 +176,7 @@ protected void buildViewer() { .usingCustomHeaders(mCustomHeaders) .usingTabTitle(mTabTitle) .usingTabClass(FlutterPdfViewCtrlTabFragment.class) + .usingTabHostClass(FlutterPdfViewCtrlTabHostFragment.class) .usingTheme(R.style.FlutterAppTheme); } diff --git a/pubspec.yaml b/pubspec.yaml index 29537922..543f1193 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-25 +version: 1.0.1-26 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 463f5f79f8112b16d7d1bc92c3877ebd6760cf19 Mon Sep 17 00:00:00 2001 From: sgong-pdftron Date: Mon, 5 Feb 2024 11:03:25 -0800 Subject: [PATCH 27/47] [Android] Update version to 10.7.0 (#320) * Update version to v10.7.0 * Updating package version * update version * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a486a3c..535a7b8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-27 - February 7, 2024 +- Update Android to v10.7.0 + # 1.0.0-24 - December 13, 2023 - expose Pan tool diff --git a/android/build.gradle b/android/build.gradle index ce9f39e8..6c029c23 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,6 +38,6 @@ android { dependencies { // PDFTron SDK dependencies - implementation "com.pdftron:pdftron:10.6.0" - implementation "com.pdftron:tools:10.6.0" + implementation "com.pdftron:pdftron:10.7.0" + implementation "com.pdftron:tools:10.7.0" } diff --git a/pubspec.yaml b/pubspec.yaml index 543f1193..0dcc7e47 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-26 +version: 1.0.1-27 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From c3fd7d04fe68f6e95f2ee32c483c6145308d6b9a Mon Sep 17 00:00:00 2001 From: bfung <43352070+brandenfung2@users.noreply.github.com> Date: Fri, 23 Feb 2024 09:58:54 -0800 Subject: [PATCH 28/47] [Fix|Android] Support follow system nightmode flag in widget viewer (#318) * Add custom PdfViewCtrlTabHostFragment2 to support follow system night mode * Updating package version * Updating package version * Missed bracket * Update host fragment * Update host fragment * apply theme after onCreate * Updating pubspec.yaml * Updating package version * Reorder apply theme * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../FlutterPdfViewCtrlTabHostFragment.java | 14 ++++++++++++++ .../pdftron/pdftronflutter/views/DocumentView.java | 7 +++---- pubspec.yaml | 2 +- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/android/src/main/java/com/pdftron/pdftronflutter/nativeviews/FlutterPdfViewCtrlTabHostFragment.java b/android/src/main/java/com/pdftron/pdftronflutter/nativeviews/FlutterPdfViewCtrlTabHostFragment.java index 1d3301dd..cfcca2e0 100644 --- a/android/src/main/java/com/pdftron/pdftronflutter/nativeviews/FlutterPdfViewCtrlTabHostFragment.java +++ b/android/src/main/java/com/pdftron/pdftronflutter/nativeviews/FlutterPdfViewCtrlTabHostFragment.java @@ -1,8 +1,22 @@ package com.pdftron.pdftronflutter.nativeviews; +import android.os.Bundle; +import androidx.fragment.app.FragmentActivity; + import com.pdftron.pdf.controls.PdfViewCtrlTabHostFragment2; public class FlutterPdfViewCtrlTabHostFragment extends PdfViewCtrlTabHostFragment2 { + + @Override + public void onCreate(Bundle savedInstanceState) { + FragmentActivity activity = getActivity(); + if (activity != null) { + applyTheme(activity); + } + + super.onCreate(savedInstanceState); + } + @Override protected void updateFullScreenModeLayout() { if (isInFullScreenMode()) { diff --git a/android/src/main/java/com/pdftron/pdftronflutter/views/DocumentView.java b/android/src/main/java/com/pdftron/pdftronflutter/views/DocumentView.java index 96543abe..8e2fb672 100644 --- a/android/src/main/java/com/pdftron/pdftronflutter/views/DocumentView.java +++ b/android/src/main/java/com/pdftron/pdftronflutter/views/DocumentView.java @@ -21,7 +21,6 @@ import com.pdftron.pdf.controls.PdfViewCtrlTabFragment2; import com.pdftron.pdf.controls.PdfViewCtrlTabHostFragment2; import com.pdftron.pdf.tools.ToolManager; -import com.pdftron.pdf.utils.PdfViewCtrlSettingsManager; import com.pdftron.pdf.utils.Utils; import com.pdftron.pdftronflutter.R; import com.pdftron.pdftronflutter.helpers.PluginUtils; @@ -324,11 +323,11 @@ public boolean isAutoSaveEnabled() { return mAutoSaveEnabled; } - public boolean isAnnotationManagerEnabled() { return mAnnotationManagerEnabled; }; + public boolean isAnnotationManagerEnabled() { return mAnnotationManagerEnabled; } - public String getUserId() { return mUserId; }; + public String getUserId() { return mUserId; } - public String getUserName() { return mUserName; }; + public String getUserName() { return mUserName; } public boolean isUseStylusAsPen() { return mUseStylusAsPen; diff --git a/pubspec.yaml b/pubspec.yaml index 0dcc7e47..8294cd61 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-27 +version: 1.0.1-28 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 1f9dbb4de92d6a1663ff394863a0f89832ae1f6f Mon Sep 17 00:00:00 2001 From: sgong-pdftron Date: Tue, 19 Mar 2024 12:26:26 -0700 Subject: [PATCH 29/47] [Android] Update to 10.8.0 (#321) * Update to 10.8.0 * Updating package version * changelog * Updating pubspec.yaml * Updating package version * wrong date * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ android/build.gradle | 6 +++--- pubspec.yaml | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 535a7b8e..cd9dad5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-29 - March 20, 2024 +- Update Android to v10.8.0 + # 1.0.0-27 - February 7, 2024 - Update Android to v10.7.0 diff --git a/android/build.gradle b/android/build.gradle index 6c029c23..9c680788 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -37,7 +37,7 @@ android { } dependencies { - // PDFTron SDK dependencies - implementation "com.pdftron:pdftron:10.7.0" - implementation "com.pdftron:tools:10.7.0" + // Apryse SDK dependencies + implementation "com.pdftron:pdftron:10.8.0" + implementation "com.pdftron:tools:10.8.0" } diff --git a/pubspec.yaml b/pubspec.yaml index 8294cd61..ea8781a9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-28 +version: 1.0.1-29 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From f140c92ee97868b974ce08a75e19ee82fa8fd536 Mon Sep 17 00:00:00 2001 From: sgong-pdftron Date: Mon, 29 Apr 2024 16:41:55 -0700 Subject: [PATCH 30/47] [Android] Update to 10.9.0 (#322) * Update to v10.9.0 * Updating package version * changelog * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd9dad5d..3576d029 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-30 - May 1, 2024 +- Update Android to v10.9.0 + # 1.0.0-29 - March 20, 2024 - Update Android to v10.8.0 diff --git a/android/build.gradle b/android/build.gradle index 9c680788..edca2510 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,6 +38,6 @@ android { dependencies { // Apryse SDK dependencies - implementation "com.pdftron:pdftron:10.8.0" - implementation "com.pdftron:tools:10.8.0" + implementation "com.pdftron:pdftron:10.9.0" + implementation "com.pdftron:tools:10.9.0" } diff --git a/pubspec.yaml b/pubspec.yaml index ea8781a9..7f91e27c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-29 +version: 1.0.1-30 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 3f5a53e071be3686d1d459164f437a1669cf4aa3 Mon Sep 17 00:00:00 2001 From: sgong-pdftron Date: Mon, 27 May 2024 09:50:41 -0700 Subject: [PATCH 31/47] [Android] Fix custom toolbar item press ID (#323) * Passing back item key correctly * changelog * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ .../java/com/pdftron/pdftronflutter/helpers/PluginUtils.java | 2 +- pubspec.yaml | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3576d029..908cdd4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-31 - May 27, 2024 +- Fix bug in `startAnnotationToolbarItemPressedListener` + # 1.0.0-30 - May 1, 2024 - Update Android to v10.9.0 diff --git a/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java b/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java index 75c3afc6..9ed4c8c7 100644 --- a/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java +++ b/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java @@ -4372,7 +4372,7 @@ public static void handleAnnotationCustomToolbarItemPressed(ViewerComponent comp String itemKey = mToolIdMap.get(itemId); if (itemKey != null && annotationCustomToolbarItemPressedEventSink != null) { // this is a custom button - annotationCustomToolbarItemPressedEventSink.success(itemId); + annotationCustomToolbarItemPressedEventSink.success(itemKey); } } diff --git a/pubspec.yaml b/pubspec.yaml index 7f91e27c..abd42876 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-30 +version: 1.0.1-31 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From f7ae67e746988e62e7a9985925ea963dadb65394 Mon Sep 17 00:00:00 2001 From: bfung <43352070+brandenfung2@users.noreply.github.com> Date: Tue, 23 Jul 2024 09:16:04 -0700 Subject: [PATCH 32/47] [Android] Update to 10.11.0 (#324) * Update Apryse Android SDK to 10.11.0 * Updating package version * Update changelog * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 908cdd4f..10755e28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-32 - July 24, 2024 +- Update Android to v10.11.0 + # 1.0.0-31 - May 27, 2024 - Fix bug in `startAnnotationToolbarItemPressedListener` diff --git a/android/build.gradle b/android/build.gradle index edca2510..9d81d395 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,6 +38,6 @@ android { dependencies { // Apryse SDK dependencies - implementation "com.pdftron:pdftron:10.9.0" - implementation "com.pdftron:tools:10.9.0" + implementation "com.pdftron:pdftron:10.11.0" + implementation "com.pdftron:tools:10.11.0" } diff --git a/pubspec.yaml b/pubspec.yaml index abd42876..acd22612 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-31 +version: 1.0.1-32 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From bdce936a078677a9f3ba90917404bda9bbb43f8b Mon Sep 17 00:00:00 2001 From: bfung <43352070+brandenfung2@users.noreply.github.com> Date: Tue, 3 Sep 2024 14:57:09 -0700 Subject: [PATCH 33/47] [Android] Update to 10.12.0 (#326) * Android update to 10.12.0 * Updating package version * Update changelog * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 10755e28..e6c09313 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-33 - September 4, 2024 +- Update Android to v10.12.0 + # 1.0.0-32 - July 24, 2024 - Update Android to v10.11.0 diff --git a/android/build.gradle b/android/build.gradle index 9d81d395..7d3d7b79 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,6 +38,6 @@ android { dependencies { // Apryse SDK dependencies - implementation "com.pdftron:pdftron:10.11.0" - implementation "com.pdftron:tools:10.11.0" + implementation "com.pdftron:pdftron:10.12.0" + implementation "com.pdftron:tools:10.12.0" } diff --git a/pubspec.yaml b/pubspec.yaml index acd22612..85c17edf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-32 +version: 1.0.1-33 homepage: https://www.pdftron.com repository: https://github.com/PDFTron/pdftron-flutter issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues From 40c4bda8b039930a79c3a1f82ff0c73a1bdb2833 Mon Sep 17 00:00:00 2001 From: ama-pdftron Date: Wed, 4 Sep 2024 09:58:06 -0700 Subject: [PATCH 34/47] Fix github links --- pubspec.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index 85c17edf..af1c7071 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,9 +1,9 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. version: 1.0.1-33 -homepage: https://www.pdftron.com -repository: https://github.com/PDFTron/pdftron-flutter -issue_tracker: https://github.com/PDFTron/pdftron-flutter/issues +homepage: https://www.apryse.com +repository: https://github.com/ApryseSDK/pdftron-flutter +issue_tracker: https://github.com/ApryseSDK/pdftron-flutter/issues documentation: https://pub.dev/documentation/pdftron_flutter/latest/pdftron/pdftron-library.html environment: sdk: ">=2.12.0 <3.0.0" From f19f8d1cb562862a358b88fd5ea791b04486d02a Mon Sep 17 00:00:00 2001 From: ama-pdftron <83238520+ama-pdftron@users.noreply.github.com> Date: Wed, 4 Sep 2024 10:00:59 -0700 Subject: [PATCH 35/47] Update Github links (#327) * Update Github links * Updating pubspec.yaml * Updating package version * Update pubspec.yaml * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index af1c7071..72b84452 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-33 +version: 1.0.1-34 homepage: https://www.apryse.com repository: https://github.com/ApryseSDK/pdftron-flutter issue_tracker: https://github.com/ApryseSDK/pdftron-flutter/issues From 88a1bd576cd339cc601a99862c38e36c7189bfe0 Mon Sep 17 00:00:00 2001 From: ama-pdftron <83238520+ama-pdftron@users.noreply.github.com> Date: Wed, 4 Sep 2024 10:24:28 -0700 Subject: [PATCH 36/47] [Example] Update to ApryseSDK link (#328) * [Example] Update to ApryseSDK link * Updating pubspec.yaml * Updating package version * Update pubdev-publish.yml * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/workflows/pubdev-publish.yml | 4 ++-- CHANGELOG.md | 2 +- README.md | 14 +++++++------- lib/pdftron_flutter.dart | 2 +- lib/src/document_view.dart | 2 +- pubspec.yaml | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/pubdev-publish.yml b/.github/workflows/pubdev-publish.yml index c3a4145b..70c6fa40 100644 --- a/.github/workflows/pubdev-publish.yml +++ b/.github/workflows/pubdev-publish.yml @@ -7,7 +7,7 @@ on: - master jobs: build: - if: github.repository == 'PDFTron/pdftron-flutter' + if: github.repository == 'ApryseSDK/pdftron-flutter' runs-on: ubuntu-latest container: image: google/dart:latest @@ -27,4 +27,4 @@ jobs: } EOF - name: Publish package - run: pub publish -f \ No newline at end of file + run: pub publish -f diff --git a/CHANGELOG.md b/CHANGELOG.md index e6c09313..ea4f7c8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -130,7 +130,7 @@ # 1.0.0-beta.3 - November 8, 2021 -- Updated the Android plugin and widget ([#128](https://github.com/PDFTron/pdftron-flutter/issues/128)): +- Updated the Android plugin and widget ([#128](https://github.com/ApryseSDK/pdftron-flutter/issues/128)): - The plugin now supports [Flutter's new embedding engine](https://flutter.dev/docs/development/packages-and-plugins/plugin-api-migration). - The widget now uses [hybrid composition](https://flutter.dev/docs/development/platform-integration/platform-views?tab=ios-platform-views-objective-c-tab#hybrid-composition). This update fixes issues such as: https://github.com/flutter/flutter/issues/58273 and in regards to stability, places the widget on parity with the plugin. diff --git a/README.md b/README.md index dd90e54c..25432f8e 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ PDFTron's Flutter PDF library brings smooth, flexible, and stand-alone document - Night mode to improve viewing in low-light environments - And much more... -More information can be found at https://www.pdftron.com/documentation/guides/flutter +More information can be found at https://docs.apryse.com/documentation/guides/flutter/ **Android**|**iOS** :--:|:--: @@ -36,7 +36,7 @@ More information can be found at https://www.pdftron.com/documentation/guides/fl Dart now supports [sound null safety](https://dart.dev/null-safety), which is available starting from Dart 2.12.0 and Flutter 2.0.0. Here is a guide to migrate to [null safety](https://dart.dev/null-safety/migration-guide) If you would like to use our null safe SDK, it is available in the following places: -- [GitHub](https://github.com/PDFTron/pdftron-flutter) +- [GitHub](https://github.com/ApryseSDK/pdftron-flutter) - [pub.dev](https://pub.dev/packages/pdftron_flutter) The rest of this README.md contains documentation, installation instructions, and information for the null safe version of our SDK. @@ -45,7 +45,7 @@ The rest of this README.md contains documentation, installation instructions, an Version `0.0.6` is the last stable release for the legacy UI. -The release can be found here: https://github.com/PDFTron/pdftron-flutter/releases/tag/legacy-ui. +The release can be found here: https://github.com/ApryseSDK/pdftron-flutter/releases/tag/legacy-ui. ## Installation @@ -67,7 +67,7 @@ The release can be found here: https://github.com/PDFTron/pdftron-flutter/releas sdk: flutter + pdftron_flutter: + git: - + url: git://github.com/PDFTron/pdftron-flutter.git + + url: git://github.com/ApryseSDK/pdftron-flutter.git ``` 3. In the `myapp` directory, run `flutter packages get`. @@ -433,11 +433,11 @@ return Scaffold( ``` ## Changelog -See [Changelog](https://github.com/PDFTron/pdftron-flutter/blob/publish-prep-nullsafe/CHANGELOG.md) +See [Changelog](https://github.com/ApryseSDK/pdftron-flutter/blob/publish-prep-nullsafe/CHANGELOG.md) ## Contributing -See [Contributing](https://github.com/PDFTron/pdftron-flutter/blob/publish-prep-nullsafe/CONTRIBUTING.md) +See [Contributing](https://github.com/ApryseSDK/pdftron-flutter/blob/publish-prep-nullsafe/CONTRIBUTING.md) ## License -See [License](https://github.com/PDFTron/pdftron-flutter/blob/publish-prep-nullsafe/LICENSE) +See [License](https://github.com/ApryseSDK/pdftron-flutter/blob/publish-prep-nullsafe/LICENSE) ![](https://onepixel.pdftron.com/pdftron-flutter) \ No newline at end of file diff --git a/lib/pdftron_flutter.dart b/lib/pdftron_flutter.dart index 50fcbfcf..b552ed0e 100644 --- a/lib/pdftron_flutter.dart +++ b/lib/pdftron_flutter.dart @@ -377,7 +377,7 @@ class PdftronFlutter { /// [path] specifies the file name of the image resource. The button will use /// the specified icon if [Config.showLeadingNavButton], which is true by /// default, is true in the config. To add an image file to your application, - /// please follow the steps in the [wiki page](https://github.com/PDFTron/pdftron-flutter/wiki/Adding-an-Image-Resource-To-Your-Application). + /// please follow the steps in the [wiki page](https://github.com/ApryseSDK/pdftron-flutter/wiki/Adding-an-Image-Resource-To-Your-Application). static Future setLeadingNavButtonIcon(String path) { return _channel.invokeMethod(Functions.setLeadingNavButtonIcon, {Parameters.leadingNavButtonIcon: path}); diff --git a/lib/src/document_view.dart b/lib/src/document_view.dart index 49e61c5a..59f0946a 100644 --- a/lib/src/document_view.dart +++ b/lib/src/document_view.dart @@ -407,7 +407,7 @@ class DocumentViewController { /// [path] specifies the file name of the image resource. The button will use /// the specified icon if [Config.showLeadingNavButton], which is true by /// default, is true in the config. To add an image file to your application, - /// please follow the steps in the [wiki page](https://github.com/PDFTron/pdftron-flutter/wiki/Adding-an-Image-Resource-To-Your-Application). + /// please follow the steps in the [wiki page](https://github.com/ApryseSDK/pdftron-flutter/wiki/Adding-an-Image-Resource-To-Your-Application). Future setLeadingNavButtonIcon(String path) { return _channel.invokeMethod(Functions.setLeadingNavButtonIcon, {Parameters.leadingNavButtonIcon: path}); diff --git a/pubspec.yaml b/pubspec.yaml index 72b84452..2ca90840 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-34 +version: 1.0.1-35 homepage: https://www.apryse.com repository: https://github.com/ApryseSDK/pdftron-flutter issue_tracker: https://github.com/ApryseSDK/pdftron-flutter/issues From a04ff85bcc576739b93acb37c1d4f6dd28eb4db4 Mon Sep 17 00:00:00 2001 From: ama-pdftron <83238520+ama-pdftron@users.noreply.github.com> Date: Tue, 29 Oct 2024 09:30:12 -0700 Subject: [PATCH 37/47] [Android] Update to 11.0.0 (#330) * [Android] Update to 11.0.0 * Updating package version * Update build.gradle * Update CHANGELOG.md * Updating pubspec.yaml * Updating package version * Update CHANGELOG.md * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 4 ++++ android/build.gradle | 4 ++-- example/android/app/build.gradle | 2 +- pubspec.yaml | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea4f7c8c..fa37d614 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.0.0-36 - October 28, 2024 +- Update Android to v11.0.0 +- Update Android targetSDK to 34 + # 1.0.0-33 - September 4, 2024 - Update Android to v10.12.0 diff --git a/android/build.gradle b/android/build.gradle index 7d3d7b79..270e6fe2 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,6 +38,6 @@ android { dependencies { // Apryse SDK dependencies - implementation "com.pdftron:pdftron:10.12.0" - implementation "com.pdftron:tools:10.12.0" + implementation "com.pdftron:pdftron:11.0.0" + implementation "com.pdftron:tools:11.0.0" } diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 58823a28..072fd237 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -40,7 +40,7 @@ android { defaultConfig { applicationId "com.pdftron.pdftronflutterexample" minSdkVersion 21 - targetSdkVersion 33 + targetSdkVersion 34 multiDexEnabled true manifestPlaceholders += [pdftronLicenseKey:PDFTRON_LICENSE_KEY] versionCode flutterVersionCode.toInteger() diff --git a/pubspec.yaml b/pubspec.yaml index 2ca90840..268ad354 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-35 +version: 1.0.1-36 homepage: https://www.apryse.com repository: https://github.com/ApryseSDK/pdftron-flutter issue_tracker: https://github.com/ApryseSDK/pdftron-flutter/issues From da3adf81a59c8b2b7612c3b816979f261df0355e Mon Sep 17 00:00:00 2001 From: ama-pdftron <83238520+ama-pdftron@users.noreply.github.com> Date: Tue, 26 Nov 2024 10:54:18 -0800 Subject: [PATCH 38/47] [Android] Update to 11.1.0 (#331) * [Android] Update to 11.1.0 * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa37d614..6f73e766 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-37 - November 25, 2024 +- Update Android to v11.1.0 + # 1.0.0-36 - October 28, 2024 - Update Android to v11.0.0 - Update Android targetSDK to 34 diff --git a/android/build.gradle b/android/build.gradle index 270e6fe2..213bc720 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,6 +38,6 @@ android { dependencies { // Apryse SDK dependencies - implementation "com.pdftron:pdftron:11.0.0" - implementation "com.pdftron:tools:11.0.0" + implementation "com.pdftron:pdftron:11.1.0" + implementation "com.pdftron:tools:11.1.0" } diff --git a/pubspec.yaml b/pubspec.yaml index 268ad354..da64fe84 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-36 +version: 1.0.1-37 homepage: https://www.apryse.com repository: https://github.com/ApryseSDK/pdftron-flutter issue_tracker: https://github.com/ApryseSDK/pdftron-flutter/issues From 06b4e746344204d95de1c477645b5dce2589286c Mon Sep 17 00:00:00 2001 From: Eslam wael Date: Mon, 9 Dec 2024 23:49:35 +0200 Subject: [PATCH 39/47] Update Build Configuration and Resolve Compatibility Issues (#332) * - change the generated resources path to com.pdftron.pdf.tools * - add compileSdk - add namespace - update compileSdk to v34 --- android/build.gradle | 4 +++- .../java/com/pdftron/pdftronflutter/helpers/PluginUtils.java | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 213bc720..be83671d 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -25,7 +25,9 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 33 + namespace 'com.pdftron.pdftronflutter' + + compileSdk 34 defaultConfig { minSdkVersion 19 diff --git a/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java b/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java index 9ed4c8c7..60266bdf 100644 --- a/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java +++ b/android/src/main/java/com/pdftron/pdftronflutter/helpers/PluginUtils.java @@ -59,7 +59,7 @@ import com.pdftron.pdf.widget.toolbar.builder.AnnotationToolbarBuilder; import com.pdftron.pdf.widget.toolbar.builder.ToolbarButtonType; import com.pdftron.pdf.widget.toolbar.component.DefaultToolbars; -import com.pdftron.pdftronflutter.R; +import com.pdftron.pdf.tools.R; import com.pdftron.pdf.PDFDraw; import org.apache.commons.io.FileUtils; From 0c81f52177fed5290166f55d485369deebce7189 Mon Sep 17 00:00:00 2001 From: bfung <43352070+brandenfung2@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:29:49 -0800 Subject: [PATCH 40/47] [Android] Fix example (#333) * Fix example * Updating package version * Use latest permission handler in readme * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- README.md | 2 +- example/android/app/build.gradle | 15 ++++++--------- example/android/build.gradle | 13 +------------ example/android/settings.gradle | 29 +++++++++++++++++++++-------- pubspec.yaml | 2 +- 5 files changed, 30 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 25432f8e..2d7a4338 100644 --- a/README.md +++ b/README.md @@ -208,7 +208,7 @@ return Scaffold( 1. If you want to use local files on Android, add the following dependency to `myapp/pubspec.yaml`: ```yaml - permission_handler: ^8.1.1 + permission_handler: ^11.3.1 ``` 2. Open `lib/main.dart`, replace the entire file with the following: diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 072fd237..dd542e91 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -1,3 +1,8 @@ +plugins { + id "com.android.application" + id "dev.flutter.flutter-gradle-plugin" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,11 +11,6 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' @@ -21,11 +21,8 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { - compileSdkVersion 33 + compileSdkVersion 34 ndkVersion flutter.ndkVersion compileOptions { diff --git a/example/android/build.gradle b/example/android/build.gradle index e29a4431..bc157bd1 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -1,14 +1,3 @@ -buildscript { - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' - } -} - allprojects { repositories { google() @@ -24,6 +13,6 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/example/android/settings.gradle b/example/android/settings.gradle index 44e62bcf..a7f13a03 100644 --- a/example/android/settings.gradle +++ b/example/android/settings.gradle @@ -1,11 +1,24 @@ -include ':app' +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "7.1.2" apply false +} + +include ":app" \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml index da64fe84..edcedcd6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-37 +version: 1.0.1-38 homepage: https://www.apryse.com repository: https://github.com/ApryseSDK/pdftron-flutter issue_tracker: https://github.com/ApryseSDK/pdftron-flutter/issues From 72186d226259135e86ceca76302886f80516d106 Mon Sep 17 00:00:00 2001 From: ama-pdftron <83238520+ama-pdftron@users.noreply.github.com> Date: Mon, 6 Jan 2025 15:59:44 -0800 Subject: [PATCH 41/47] [Android] Update to 11.2.0 (#334) * [Android] Update to 11.2.0 * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f73e766..fc85a000 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-39 - January 6, 2025 +- Update Android to v11.2.0 + # 1.0.0-37 - November 25, 2024 - Update Android to v11.1.0 diff --git a/android/build.gradle b/android/build.gradle index be83671d..cb8d1f99 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -40,6 +40,6 @@ android { dependencies { // Apryse SDK dependencies - implementation "com.pdftron:pdftron:11.1.0" - implementation "com.pdftron:tools:11.1.0" + implementation "com.pdftron:pdftron:11.2.0" + implementation "com.pdftron:tools:11.2.0" } diff --git a/pubspec.yaml b/pubspec.yaml index edcedcd6..8e418ea7 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-38 +version: 1.0.1-39 homepage: https://www.apryse.com repository: https://github.com/ApryseSDK/pdftron-flutter issue_tracker: https://github.com/ApryseSDK/pdftron-flutter/issues From b11522884763776bcb52f90a1e7efe397bbe171d Mon Sep 17 00:00:00 2001 From: Darren Chan Date: Fri, 24 Jan 2025 08:32:13 -0800 Subject: [PATCH 42/47] [iOS] Exposing apple pencil and smart highlighter for custom toolbar (#335) * missing Tool class conditions (toolClassForKey) * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- ios/Classes/PdftronFlutterPlugin.m | 6 ++++++ pubspec.yaml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ios/Classes/PdftronFlutterPlugin.m b/ios/Classes/PdftronFlutterPlugin.m index 5a97eacb..4c3d04d6 100644 --- a/ios/Classes/PdftronFlutterPlugin.m +++ b/ios/Classes/PdftronFlutterPlugin.m @@ -3819,6 +3819,12 @@ + (Class)toolClassForKey:(NSString *)key else if ([key isEqualToString:PTPanToolKey]) { return [PTPanTool class]; } + else if ([key isEqualToString:PTAnnotationSmartPenToolKey]) { + return [PTSmartPen class]; + } + else if ([key isEqualToString:PTPencilKitDrawingToolKey]) { + return [PTPencilDrawingCreate class]; + } return Nil; } diff --git a/pubspec.yaml b/pubspec.yaml index 8e418ea7..e91fc2bf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-39 +version: 1.0.1-40 homepage: https://www.apryse.com repository: https://github.com/ApryseSDK/pdftron-flutter issue_tracker: https://github.com/ApryseSDK/pdftron-flutter/issues From d1d71bc7a47bcce317ef1ae7ad8e6f858973b427 Mon Sep 17 00:00:00 2001 From: bfung <43352070+brandenfung2@users.noreply.github.com> Date: Tue, 18 Feb 2025 15:42:18 -0800 Subject: [PATCH 43/47] [Android] Update to 11.3.0 (#336) * Update to 11.3.0 * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc85a000..7be7557f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-40 - February 19, 2025 +- Update Android to v11.3.0 + # 1.0.0-39 - January 6, 2025 - Update Android to v11.2.0 diff --git a/android/build.gradle b/android/build.gradle index cb8d1f99..25086bbd 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -40,6 +40,6 @@ android { dependencies { // Apryse SDK dependencies - implementation "com.pdftron:pdftron:11.2.0" - implementation "com.pdftron:tools:11.2.0" + implementation "com.pdftron:pdftron:11.3.0" + implementation "com.pdftron:tools:11.3.0" } diff --git a/pubspec.yaml b/pubspec.yaml index e91fc2bf..5c4d46b8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-40 +version: 1.0.1-41 homepage: https://www.apryse.com repository: https://github.com/ApryseSDK/pdftron-flutter issue_tracker: https://github.com/ApryseSDK/pdftron-flutter/issues From 28e7c774228dd96d90ada4157b766cf510ce7eee Mon Sep 17 00:00:00 2001 From: David Luco Date: Tue, 1 Apr 2025 11:19:12 -0700 Subject: [PATCH 44/47] Update README for iOS CocoaPod podspec changes (#339) * Update README for iOS CocoaPod podspec changes * Updating package version * Fix end-of-file change * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- README.md | 16 +++++++--------- pubspec.yaml | 2 +- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 2d7a4338..b766da0f 100644 --- a/README.md +++ b/README.md @@ -143,14 +143,12 @@ The following instructions are only applicable to Android development; click her The following instructions are only applicable to iOS development; click here for the [Android counterpart](#android). -> **Note** -> (August 2022) +> [!IMPORTANT] +> As of March 2025, use of the `PDFTron` and `PDFTronTools` podspecs distributed specifically for the PDFTron Flutter wrapper (`https://pdftron.com/downloads/ios/flutter/pdftron/latest.podspec` and `https://pdftron.com/downloads/ios/flutter/pdftron-tools/latest.podspec`, respectively) is deprecated. +> +> **All new and existing users are recommended to use the standard [Apryse iOS SDK CocoaPods](https://docs.apryse.com/ios/guides/get-started/integration?tab=cocoapods) instead.** > -> There are new podspec files to use when integrating the PDFTron Flutter Wrapper for iOS: -> - `PDFTron` CocoaPod, providing `PDFNet.xcframework`: https://pdftron.com/downloads/ios/flutter/pdftron/latest.podspec -> - `PDFTronTools` CocoaPod, providing `Tools.xcframework`: https://pdftron.com/downloads/ios/flutter/pdftron-tools/latest.podspec -> -> Please update your `ios/Podfile` accordingly. +> Please update your `Podfile` accordingly. 4. Open `myapp/ios/Podfile` file and add: ```diff @@ -161,8 +159,8 @@ The following instructions are only applicable to iOS development; click here fo target 'Runner' do ... + # PDFTron Pods - + pod 'PDFTron', podspec: 'https://pdftron.com/downloads/ios/flutter/pdftron/latest.podspec' - + pod 'PDFTronTools', podspec: 'https://pdftron.com/downloads/ios/flutter/pdftron-tools/latest.podspec' + + pod 'PDFTron', podspec: 'https://www.pdftron.com/downloads/ios/cocoapods/xcframeworks/pdftron/latest.podspec' + + pod 'PDFTronTools', podspec: 'https://www.pdftron.com/downloads/ios/cocoapods/xcframeworks/pdftron-tools/latest.podspec' end ``` 5. To ensure integration process is successful, run `flutter build ios --no-codesign` diff --git a/pubspec.yaml b/pubspec.yaml index 5c4d46b8..432f3b3e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-41 +version: 1.0.1-42 homepage: https://www.apryse.com repository: https://github.com/ApryseSDK/pdftron-flutter issue_tracker: https://github.com/ApryseSDK/pdftron-flutter/issues From 992385d71743b171308b47ed08a65d575547a91e Mon Sep 17 00:00:00 2001 From: sgong-pdftron Date: Tue, 1 Apr 2025 11:55:15 -0700 Subject: [PATCH 45/47] Update for Android to v11.4.0 (#340) --- CHANGELOG.md | 3 +++ android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7be7557f..e076080b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.0-43 - April 9, 2025 +- Update Android to v11.4.0 + # 1.0.0-40 - February 19, 2025 - Update Android to v11.3.0 diff --git a/android/build.gradle b/android/build.gradle index 25086bbd..226e0a11 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -40,6 +40,6 @@ android { dependencies { // Apryse SDK dependencies - implementation "com.pdftron:pdftron:11.3.0" - implementation "com.pdftron:tools:11.3.0" + implementation "com.pdftron:pdftron:11.4.0" + implementation "com.pdftron:tools:11.4.0" } diff --git a/pubspec.yaml b/pubspec.yaml index 432f3b3e..4334a0f1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-42 +version: 1.0.1-43 homepage: https://www.apryse.com repository: https://github.com/ApryseSDK/pdftron-flutter issue_tracker: https://github.com/ApryseSDK/pdftron-flutter/issues From afca8f939ec146c841132809532fd6a433ae77d0 Mon Sep 17 00:00:00 2001 From: sgong-pdftron Date: Mon, 26 May 2025 14:28:27 -0700 Subject: [PATCH 46/47] [Android] Update to 11.5.0 (#341) * Update to 11.5.0 * Updating package version * date * Updating pubspec.yaml * Updating package version * wrong versions * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 57 +++++++++++++++++++++++--------------------- android/build.gradle | 4 ++-- pubspec.yaml | 2 +- 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e076080b..184912cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,84 +1,87 @@ -# 1.0.0-43 - April 9, 2025 +# 1.0.1-44 - May 28, 2025 +- Update Android to v11.5.0 + +# 1.0.1-43 - April 9, 2025 - Update Android to v11.4.0 -# 1.0.0-40 - February 19, 2025 +# 1.0.1-40 - February 19, 2025 - Update Android to v11.3.0 -# 1.0.0-39 - January 6, 2025 +# 1.0.1-39 - January 6, 2025 - Update Android to v11.2.0 -# 1.0.0-37 - November 25, 2024 +# 1.0.1-37 - November 25, 2024 - Update Android to v11.1.0 -# 1.0.0-36 - October 28, 2024 +# 1.0.1-36 - October 28, 2024 - Update Android to v11.0.0 - Update Android targetSDK to 34 -# 1.0.0-33 - September 4, 2024 +# 1.0.1-33 - September 4, 2024 - Update Android to v10.12.0 -# 1.0.0-32 - July 24, 2024 +# 1.0.1-32 - July 24, 2024 - Update Android to v10.11.0 -# 1.0.0-31 - May 27, 2024 +# 1.0.1-31 - May 27, 2024 - Fix bug in `startAnnotationToolbarItemPressedListener` -# 1.0.0-30 - May 1, 2024 +# 1.0.1-30 - May 1, 2024 - Update Android to v10.9.0 -# 1.0.0-29 - March 20, 2024 +# 1.0.1-29 - March 20, 2024 - Update Android to v10.8.0 -# 1.0.0-27 - February 7, 2024 +# 1.0.1-27 - February 7, 2024 - Update Android to v10.7.0 -# 1.0.0-24 - December 13, 2023 +# 1.0.1-24 - December 13, 2023 - expose Pan tool -# 1.0.0-23 - December 6, 2023 +# 1.0.1-23 - December 6, 2023 - Update Android to v10.6.0 -# 1.0.0-22 - October 25, 2023 +# 1.0.1-22 - October 25, 2023 - Update Android to v10.5.0 -# 1.0.0-21 - September 21, 2023 +# 1.0.1-21 - September 21, 2023 - Fix bug in mergeAnnotations() -# 1.0.0-20 - September 13, 2023 +# 1.0.1-20 - September 13, 2023 - Update Android to v10.4.0 -# 1.0.0-18 - August 23, 2023 +# 1.0.1-18 - August 23, 2023 - mergeAnnotations() -# 1.0.0-17 - August 8, 2023 +# 1.0.1-17 - August 8, 2023 - added eraser to PTToolKey (iOS) -# 1.0.0-16 - August 2, 2023 +# 1.0.1-16 - August 2, 2023 - Update Android to v10.3.0 -# 1.0.0-15 - July 4, 2023 +# 1.0.1-15 - July 4, 2023 - Fix bug in Android `saveDocument` -# 1.0.0-14 - June 21, 2023 +# 1.0.1-14 - June 21, 2023 - Update Android to v10.2.0 -# 1.0.0-13 - May 10, 2023 +# 1.0.1-13 - May 10, 2023 - Update Android to v10.1.0 -# 1.0.0-9 - Mar 27, 2023 +# 1.0.1-9 - Mar 27, 2023 - Update Android to v10.0.0 -# 1.0.0-8 - Feb 17, 2023 +# 1.0.1-8 - Feb 17, 2023 - Update Android to v9.5.0 -# 1.0.0-4 - Dec 19, 2022 +# 1.0.1-4 - Dec 19, 2022 - Update Android to v9.4.2 -# 1.0.0-3 - Dec 16, 2022 +# 1.0.1-3 - Dec 16, 2022 - setFitMode() - setLayoutMode() -# 1.0.0-2 - Dec 2, 2022 +# 1.0.1-2 - Dec 2, 2022 - Update Android to v9.4.1 # 1.0.0-beta.55 - Oct 13, 2022 diff --git a/android/build.gradle b/android/build.gradle index 226e0a11..321deba3 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -40,6 +40,6 @@ android { dependencies { // Apryse SDK dependencies - implementation "com.pdftron:pdftron:11.4.0" - implementation "com.pdftron:tools:11.4.0" + implementation "com.pdftron:pdftron:11.5.0" + implementation "com.pdftron:tools:11.5.0" } diff --git a/pubspec.yaml b/pubspec.yaml index 4334a0f1..6e361d8b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-43 +version: 1.0.1-44 homepage: https://www.apryse.com repository: https://github.com/ApryseSDK/pdftron-flutter issue_tracker: https://github.com/ApryseSDK/pdftron-flutter/issues From d1a8f862bc051bcf1713ebe522802b4c265bc831 Mon Sep 17 00:00:00 2001 From: sgong-pdftron Date: Wed, 11 Jun 2025 11:44:33 -0700 Subject: [PATCH 47/47] [Feat|Android] Support for embedding v2 (#342) * Adds support for embedding v2 * Update android sample for embedding v2 * Updating package version * Update readme * Updating pubspec.yaml * Updating package version * changelog * strange spacing * Updating pubspec.yaml * Updating package version --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .dart_tool/version | 2 +- CHANGELOG.md | 3 + README.md | 30 +++------ android/build.gradle | 6 +- android/src/main/AndroidManifest.xml | 4 ++ .../pdftronflutter/PdftronFlutterPlugin.java | 22 ++---- example/android/app/build.gradle | 67 ------------------- example/android/app/build.gradle.kts | 46 +++++++++++++ .../android/app/src/debug/AndroidManifest.xml | 7 ++ .../android/app/src/main/AndroidManifest.xml | 38 ++++++----- .../pdftronflutterexample/MainActivity.java | 15 ----- .../pdftronflutterexample/MainActivity.kt | 5 ++ .../res/drawable-v21/launch_background.xml | 12 ++++ .../app/src/main/res/values-night/styles.xml | 19 ++++-- .../app/src/main/res/values/styles.xml | 13 +--- .../app/src/profile/AndroidManifest.xml | 7 ++ example/android/build.gradle | 18 ----- example/android/build.gradle.kts | 21 ++++++ example/android/gradle.properties | 11 +-- .../gradle/wrapper/gradle-wrapper.properties | 3 +- example/android/settings.gradle | 24 ------- example/android/settings.gradle.kts | 25 +++++++ example/pubspec.yaml | 9 ++- pubspec.yaml | 2 +- 24 files changed, 193 insertions(+), 216 deletions(-) delete mode 100644 example/android/app/build.gradle create mode 100644 example/android/app/build.gradle.kts create mode 100644 example/android/app/src/debug/AndroidManifest.xml delete mode 100644 example/android/app/src/main/java/com/pdftron/pdftronflutterexample/MainActivity.java create mode 100644 example/android/app/src/main/kotlin/com/pdftron/pdftronflutterexample/MainActivity.kt create mode 100644 example/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 example/android/app/src/profile/AndroidManifest.xml delete mode 100644 example/android/build.gradle create mode 100644 example/android/build.gradle.kts delete mode 100644 example/android/settings.gradle create mode 100644 example/android/settings.gradle.kts diff --git a/.dart_tool/version b/.dart_tool/version index 5436ea06..40fc7267 100644 --- a/.dart_tool/version +++ b/.dart_tool/version @@ -1 +1 @@ -3.3.2 \ No newline at end of file +3.32.0 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 184912cf..f435df83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.1-45 - Jun 10, 2025 +- Update Android to embedding v2 + # 1.0.1-44 - May 28, 2025 - Update Android to v11.5.0 diff --git a/README.md b/README.md index b766da0f..e58acd95 100644 --- a/README.md +++ b/README.md @@ -80,44 +80,32 @@ The following instructions are only applicable to Android development; click her ```diff defaultConfig { applicationId "com.example.myapp" - - minSdkVersion flutter.minSdkVersion - + minSdkVersion 21 - + multiDexEnabled true - + manifestPlaceholders += [pdftronLicenseKey:PDFTRON_LICENSE_KEY] targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName + + + resValue("string", "PDFTRON_LICENSE_KEY", "\"LICENSE_KEY_GOES_HERE\"") } ``` - -5. In your `myapp/android/gradle.properties` file, add the following line: - ``` diff - # Add the PDFTRON_LICENSE_KEY variable here. - # For trial purposes leave it blank. - # For production add a valid commercial license key. - PDFTRON_LICENSE_KEY= - ``` -6. In your `myapp/android/app/src/main/AndroidManifest.xml` file, add the following lines: +5. In your `myapp/android/app/src/main/AndroidManifest.xml` file, add the following lines: ```diff + + - - + + + + android:largeHeap="true"> + + + android:value="@string/PDFTRON_LICENSE_KEY" /> ... ``` @@ -135,9 +123,9 @@ The following instructions are only applicable to Android development; click her } ``` -7. Follow the instructions outlined [in the Usage section](#usage). -8. Check that your Android device is running by running the command `flutter devices`. If none are available, follow the device set up instructions in the [Install](https://flutter.io/docs/get-started/install) guides for your platform. -9. Run the app with the command `flutter run`. +6. Follow the instructions outlined [in the Usage section](#usage). +7. Check that your Android device is running by running the command `flutter devices`. If none are available, follow the device set up instructions in the [Install](https://flutter.io/docs/get-started/install) guides for your platform. +8. Run the app with the command `flutter run`. ### iOS diff --git a/android/build.gradle b/android/build.gradle index 321deba3..e429127d 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,5 +1,5 @@ group 'com.pdftron.pdftronflutter' -version '2.0' +version '3.0.0' buildscript { repositories { @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.2.0' + classpath 'com.android.tools.build:gradle:8.0.2' } } @@ -30,7 +30,7 @@ android { compileSdk 34 defaultConfig { - minSdkVersion 19 + minSdk = 21 vectorDrawables.useSupportLibrary = true } lintOptions { diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index be4b5993..ace89def 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -3,6 +3,10 @@ + + - localProperties.load(reader) - } -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -android { - compileSdkVersion 34 - ndkVersion flutter.ndkVersion - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - applicationId "com.pdftron.pdftronflutterexample" - minSdkVersion 21 - targetSdkVersion 34 - multiDexEnabled true - manifestPlaceholders += [pdftronLicenseKey:PDFTRON_LICENSE_KEY] - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "androidx.appcompat:appcompat:1.3.1" - implementation "com.google.android.material:material:1.5.0" - - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' -} diff --git a/example/android/app/build.gradle.kts b/example/android/app/build.gradle.kts new file mode 100644 index 00000000..a3cef125 --- /dev/null +++ b/example/android/app/build.gradle.kts @@ -0,0 +1,46 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.pdftron.pdftronflutterexample" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.pdftron.pdftronflutterexample" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + + resValue("string", "PDFTRON_LICENSE_KEY", "\"LICENSE_KEY_GOES_HERE\"") + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..399f6981 --- /dev/null +++ b/example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index a67a2725..d6a49d91 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -1,30 +1,25 @@ - + - - + android:icon="@mipmap/ic_launcher"> - + android:value="@string/PDFTRON_LICENSE_KEY" /> @@ -33,20 +28,29 @@ while the Flutter UI initializes. After that, this theme continues to determine the Window background behind the Flutter UI. --> + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme" + /> - - + + - - + + + + + + + diff --git a/example/android/app/src/main/java/com/pdftron/pdftronflutterexample/MainActivity.java b/example/android/app/src/main/java/com/pdftron/pdftronflutterexample/MainActivity.java deleted file mode 100644 index a4d6d386..00000000 --- a/example/android/app/src/main/java/com/pdftron/pdftronflutterexample/MainActivity.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.pdftron.pdftronflutterexample; - -import androidx.annotation.NonNull; - -import io.flutter.embedding.android.FlutterFragmentActivity; -import io.flutter.embedding.engine.FlutterEngine; -import io.flutter.plugins.GeneratedPluginRegistrant; - -public class MainActivity extends FlutterFragmentActivity { - - @Override - public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/example/android/app/src/main/kotlin/com/pdftron/pdftronflutterexample/MainActivity.kt b/example/android/app/src/main/kotlin/com/pdftron/pdftronflutterexample/MainActivity.kt new file mode 100644 index 00000000..826fb74f --- /dev/null +++ b/example/android/app/src/main/kotlin/com/pdftron/pdftronflutterexample/MainActivity.kt @@ -0,0 +1,5 @@ +package com.pdftron.pdftronflutterexample + +import io.flutter.embedding.android.FlutterFragmentActivity + +class MainActivity : FlutterFragmentActivity() diff --git a/example/android/app/src/main/res/drawable-v21/launch_background.xml b/example/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/example/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/example/android/app/src/main/res/values-night/styles.xml b/example/android/app/src/main/res/values-night/styles.xml index e66c7e97..06952be7 100644 --- a/example/android/app/src/main/res/values-night/styles.xml +++ b/example/android/app/src/main/res/values-night/styles.xml @@ -1,11 +1,18 @@ - - + + diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml index 746a9bad..cb1ef880 100644 --- a/example/android/app/src/main/res/values/styles.xml +++ b/example/android/app/src/main/res/values/styles.xml @@ -1,17 +1,11 @@ - - - - + + diff --git a/example/android/build.gradle b/example/android/build.gradle deleted file mode 100644 index bc157bd1..00000000 --- a/example/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/example/android/build.gradle.kts b/example/android/build.gradle.kts new file mode 100644 index 00000000..89176ef4 --- /dev/null +++ b/example/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/example/android/gradle.properties b/example/android/gradle.properties index b8de59af..24863d21 100644 --- a/example/android/gradle.properties +++ b/example/android/gradle.properties @@ -1,10 +1,3 @@ -org.gradle.jvmargs=-Xmx1536M - -# If you're using the permission_handler package, also add these two lines +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true -android.enableJetifier=true - -# Add the PDFTRON_LICENSE_KEY variable here. -# For trial purposes leave it blank. -# For production add a valid commercial license key. -PDFTRON_LICENSE_KEY= +android.enableJetifier=true \ No newline at end of file diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index bbe84e82..ac3b4792 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jul 10 15:58:56 PDT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip diff --git a/example/android/settings.gradle b/example/android/settings.gradle deleted file mode 100644 index a7f13a03..00000000 --- a/example/android/settings.gradle +++ /dev/null @@ -1,24 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.1.2" apply false -} - -include ":app" \ No newline at end of file diff --git a/example/android/settings.gradle.kts b/example/android/settings.gradle.kts new file mode 100644 index 00000000..ab39a10a --- /dev/null +++ b/example/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.3" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/example/pubspec.yaml b/example/pubspec.yaml index cf25f171..604cc59c 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -6,13 +6,15 @@ version: 1.0.0+1 publish_to: 'none' environment: - sdk: ">=2.17.5 <3.0.0" - flutter: ">=1.12.0" + sdk: ^3.8.0 dependencies: flutter: sdk: flutter + pdftron_flutter: + path: ../ + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 @@ -21,9 +23,6 @@ dev_dependencies: flutter_test: sdk: flutter - pdftron_flutter: - path: ../ - # For information on the generic Dart part of this file, see the # following page: https://www.dartlang.org/tools/pub/pubspec diff --git a/pubspec.yaml b/pubspec.yaml index 6e361d8b..4dbc9e90 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pdftron_flutter description: A convenience wrapper to build Flutter apps that use the PDFTron mobile SDK for smooth, flexible, and stand-alone document viewing. -version: 1.0.1-44 +version: 1.0.1-45 homepage: https://www.apryse.com repository: https://github.com/ApryseSDK/pdftron-flutter issue_tracker: https://github.com/ApryseSDK/pdftron-flutter/issues