Skip to content

Commit cd7600d

Browse files
author
PSPDFKit
committed
Release 4.1.0
1 parent e4129c5 commit cd7600d

File tree

62 files changed

+2284
-260
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+2284
-260
lines changed

ACKNOWLEDGEMENTS.md

Lines changed: 264 additions & 61 deletions
Large diffs are not rendered by default.

CHANGELOG.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
## Newest Release
22

3+
### 4.1.0 - 03 January 2024
4+
5+
- Adds support for `PspdfkitWidgetController.addEventListener` to iOS and Android. (J#HYB-550)`
6+
- Adds support for the latest Android Studio version. (J#HYB-539)
7+
- Nutrient Flutter SDK now requires Android Gradle Plugin 8.0.0 or later. (J#HYB-539)
8+
- Nutrient Flutter SDK now requires Flutter 3.27.0 or later. (J#HYB-596)
9+
- Updates for Nutrient Android SDK 2024.9.0.
10+
- Updates for Nutrient iOS SDK 14.3.0.
11+
- Fixes onPageChanged callback being triggered early on iOS. (J#HYB-596)
12+
13+
## Previous Releases
14+
315
### 4.0.0 - 01 Nov 2024
416

517
- Adds Pigeon for communication between Flutter and native iOS and Android platforms. (J#HYB-455)
@@ -9,8 +21,6 @@
921
- Updates for Nutrient iOS SDK 14.1.1. (#45458)
1022
- Updates for Nutrient Web SDK 2024.7.0. (#45458)
1123

12-
## Previous Releases
13-
1424
### 3.12.0 - 30 Jul 2024
1525

1626
### 3.12.1 - 11 Sep 2024

android/build.gradle

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ buildscript {
1919
}
2020
}
2121

22+
2223
group 'com.pspdfkit.flutter.pspdfkit'
2324
version pspdfkitFlutterVersion
2425

@@ -45,6 +46,10 @@ android {
4546
targetCompatibility JavaVersion.VERSION_17
4647
}
4748

49+
kotlinOptions {
50+
jvmTarget = "17"
51+
}
52+
4853
defaultConfig {
4954
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
5055
minSdkVersion androidMinSdkVersion

android/config.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ if (pspdfkitMavenUrl == null || pspdfkitMavenUrl == '') {
3838

3939
ext.pspdfkitVersion = localProperties.getProperty('pspdfkit.version')
4040
if (pspdfkitVersion == null || pspdfkitVersion == '') {
41-
ext.pspdfkitVersion = '2024.6.1'
41+
ext.pspdfkitVersion = '2024.9.0'
4242
}
4343

4444
ext.pspdfkitMavenModuleName = 'pspdfkit'
@@ -52,8 +52,8 @@ if (!pubspecFile.exists()) {
5252
def pubspecYaml = new Yaml().load(pubspecFile.newInputStream())
5353
ext.pspdfkitFlutterVersion = pubspecYaml.version
5454

55-
ext.androidCompileSdkVersion = 34
55+
ext.androidCompileSdkVersion = 35
5656
ext.androidMinSdkVersion = 21
57-
ext.androidTargetSdkVersion = 34
58-
ext.androidGradlePluginVersion = '7.4.2'
57+
ext.androidTargetSdkVersion = 35
58+
ext.androidGradlePluginVersion = '8.7.2'
5959
ext.kotlinVersion = "1.9.20"

android/src/main/java/com/pspdfkit/flutter/pspdfkit/ConfigurationAdapter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.pspdfkit.configuration.page.PageLayoutMode;
2828
import com.pspdfkit.configuration.page.PageScrollDirection;
2929
import com.pspdfkit.configuration.page.PageScrollMode;
30+
import com.pspdfkit.configuration.search.SearchType;
3031
import com.pspdfkit.configuration.settings.SettingsMenuItemType;
3132
import com.pspdfkit.configuration.sharing.ShareFeatures;
3233
import com.pspdfkit.configuration.theming.ThemeMode;
@@ -476,7 +477,7 @@ private void configureFitPageToWidth(boolean fitPageToWidth) {
476477
}
477478

478479
private void configureInlineSearch(boolean inlineSearch) {
479-
final int searchType = inlineSearch ? PdfActivityConfiguration.SEARCH_INLINE : PdfActivityConfiguration.SEARCH_MODULAR;
480+
final SearchType searchType = inlineSearch ? SearchType.INLINE : SearchType.MODULAR;
480481
configuration.setSearchType(searchType);
481482
}
482483

@@ -860,7 +861,6 @@ PdfActivityConfiguration build() {
860861
this.configuration
861862
.enabledAnnotationTools(annotationTools);
862863
}
863-
864864
return configuration.build();
865865
}
866866
}

android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfUiFragmentCallbacks.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,12 @@ package com.pspdfkit.flutter.pspdfkit
1616
/// This notice may not be removed from this file.
1717
///
1818
import android.content.Context
19+
import android.graphics.PointF
20+
import android.view.MotionEvent
1921
import androidx.fragment.app.Fragment
2022
import androidx.fragment.app.FragmentManager
23+
import com.pspdfkit.annotations.Annotation
24+
import com.pspdfkit.document.DocumentSaveOptions
2125
import com.pspdfkit.document.PdfDocument
2226
import com.pspdfkit.flutter.pspdfkit.api.PdfDocumentApi
2327
import com.pspdfkit.flutter.pspdfkit.document.FlutterPdfDocument
@@ -114,4 +118,20 @@ class FlutterPdfUiFragmentCallbacks(
114118
}
115119
}
116120
}
121+
122+
override fun onPageClick(
123+
document: PdfDocument,
124+
pageIndex: Int,
125+
event: MotionEvent?,
126+
pagePosition: PointF?,
127+
clickedAnnotation: Annotation?
128+
): Boolean {
129+
flutterWidgetCallback.onPageClick(document, pageIndex, event, pagePosition, clickedAnnotation)
130+
return true
131+
}
132+
133+
override fun onDocumentSave(document: PdfDocument, saveOptions: DocumentSaveOptions): Boolean {
134+
flutterWidgetCallback.onDocumentSave(document,saveOptions)
135+
return true
136+
}
117137
}

android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterWidgetCallback.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99

1010
package com.pspdfkit.flutter.pspdfkit
1111

12+
import android.graphics.PointF
13+
import android.view.MotionEvent
14+
import com.pspdfkit.annotations.Annotation
15+
import com.pspdfkit.document.DocumentSaveOptions
1216
import com.pspdfkit.document.PdfDocument
1317
import com.pspdfkit.flutter.pspdfkit.api.PspdfkitWidgetCallbacks
1418
import com.pspdfkit.listeners.DocumentListener
@@ -36,4 +40,35 @@ class FlutterWidgetCallback(
3640
) {}
3741
super.onDocumentLoadFailed(exception)
3842
}
43+
44+
override fun onPageClick(
45+
document: PdfDocument,
46+
pageIndex: Int,
47+
event: MotionEvent?,
48+
pagePosition: PointF?,
49+
clickedAnnotation: Annotation?
50+
): Boolean {
51+
var flutterPointF: com.pspdfkit.flutter.pspdfkit.api.PointF? = null
52+
pagePosition?.let {
53+
flutterPointF = com.pspdfkit.flutter.pspdfkit.api.PointF(
54+
pagePosition.x.toDouble(),
55+
pagePosition.x.toDouble()
56+
)
57+
}
58+
pspdfkitWidgetCallbacks?.onPageClick(
59+
document.uid,
60+
pageIndex.toLong(),
61+
flutterPointF,
62+
clickedAnnotation?.toInstantJson()
63+
) {}
64+
return true
65+
}
66+
67+
override fun onDocumentSave(document: PdfDocument, saveOptions: DocumentSaveOptions): Boolean {
68+
pspdfkitWidgetCallbacks?.onDocumentSaved(
69+
document.uid,
70+
document.documentSource.fileUri?.path
71+
) {}
72+
return true
73+
}
3974
}

android/src/main/java/com/pspdfkit/flutter/pspdfkit/PSPDFKitView.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ import com.pspdfkit.document.processor.PdfProcessor
2626
import com.pspdfkit.document.processor.PdfProcessor.ProcessorProgress
2727
import com.pspdfkit.document.processor.PdfProcessorTask
2828
import com.pspdfkit.flutter.pspdfkit.AnnotationConfigurationAdaptor.Companion.convertAnnotationConfigurations
29+
import com.pspdfkit.flutter.pspdfkit.api.NutrientEventsCallbacks
2930
import com.pspdfkit.flutter.pspdfkit.api.PspdfkitWidgetCallbacks
3031
import com.pspdfkit.flutter.pspdfkit.api.PspdfkitWidgetControllerApi
32+
import com.pspdfkit.flutter.pspdfkit.events.FlutterEventsHelper
3133
import com.pspdfkit.flutter.pspdfkit.toolbar.FlutterMenuGroupingRule
3234
import com.pspdfkit.flutter.pspdfkit.toolbar.FlutterViewModeController
3335
import com.pspdfkit.flutter.pspdfkit.util.DocumentJsonDataProvider
@@ -70,6 +72,7 @@ internal class PSPDFKitView(
7072
private val pdfUiFragment: PdfUiFragment
7173
private var fragmentCallbacks: FlutterPdfUiFragmentCallbacks? = null
7274
private val pspdfkitViewImpl: PspdfkitViewImpl = PspdfkitViewImpl()
75+
private val nutrientEventsCallbacks: NutrientEventsCallbacks = NutrientEventsCallbacks(messenger, "events.callbacks.$id")
7376
private val widgetCallbacks: PspdfkitWidgetCallbacks =
7477
PspdfkitWidgetCallbacks(messenger, "widget.callbacks.$id")
7578

@@ -171,6 +174,8 @@ internal class PSPDFKitView(
171174
override fun onFlutterViewAttached(flutterView: View) {
172175
super.onFlutterViewAttached(flutterView)
173176
// Set up the method channel for communication with Flutter.
177+
val flutterEventsHelper = FlutterEventsHelper(nutrientEventsCallbacks)
178+
pspdfkitViewImpl.setEventDispatcher(flutterEventsHelper)
174179
PspdfkitWidgetControllerApi.setUp(messenger, pspdfkitViewImpl, id.toString())
175180
}
176181

android/src/main/java/com/pspdfkit/flutter/pspdfkit/PspdfkitApiImpl.kt

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import android.provider.Settings
1616
import androidx.core.app.ActivityCompat
1717
import androidx.core.content.ContextCompat
1818
import androidx.fragment.app.FragmentActivity
19+
import com.pspdfkit.PSPDFKit
1920
import com.pspdfkit.PSPDFKit.VERSION
2021
import com.pspdfkit.PSPDFKit.initialize
2122
import com.pspdfkit.document.formatters.DocumentJsonFormatter
@@ -31,6 +32,7 @@ import com.pspdfkit.flutter.pspdfkit.api.AndroidPermissionStatus
3132
import com.pspdfkit.flutter.pspdfkit.api.AnnotationProcessingMode
3233
import com.pspdfkit.flutter.pspdfkit.api.PspdfkitApi
3334
import com.pspdfkit.flutter.pspdfkit.api.PspdfkitApiError
35+
import com.pspdfkit.flutter.pspdfkit.events.FlutterAnalyticsClient
3436
import com.pspdfkit.flutter.pspdfkit.pdfgeneration.PdfPageAdaptor
3537
import com.pspdfkit.flutter.pspdfkit.util.DocumentJsonDataProvider
3638
import com.pspdfkit.flutter.pspdfkit.util.Preconditions
@@ -66,15 +68,21 @@ import java.nio.charset.StandardCharsets
6668
class PspdfkitApiImpl(private var activityPluginBinding: ActivityPluginBinding?) : PspdfkitApi {
6769

6870
private var disposable: Disposable? = null
71+
private var analyticsEventClient: FlutterAnalyticsClient? = null
6972

7073
fun dispose() {
7174
disposable?.dispose()
75+
analyticsEventClient = null
7276
}
7377

7478
fun setActivityPluginBinding(activityPluginBinding: ActivityPluginBinding?) {
7579
this.activityPluginBinding = activityPluginBinding
7680
}
7781

82+
fun setAnalyticsEventClient(analyticsEventClient: FlutterAnalyticsClient?) {
83+
this.analyticsEventClient = analyticsEventClient
84+
}
85+
7886
override fun getFrameworkVersion(callback: (Result<String?>) -> Unit) {
7987
callback(Result.success(VERSION))
8088
}
@@ -139,9 +147,6 @@ class PspdfkitApiImpl(private var activityPluginBinding: ActivityPluginBinding?)
139147
val configurationAdapterInstant = ConfigurationAdapter(
140148
activityPluginBinding?.activity as FragmentActivity, configurationMapInstant
141149
)
142-
val annotationTools =
143-
configurationAdapterInstant.build().configuration.enabledAnnotationTools
144-
annotationTools.add(AnnotationTool.INSTANT_COMMENT_MARKER)
145150
val intentInstant = InstantPdfActivityIntentBuilder.fromInstantDocument(
146151
activityPluginBinding?.activity as FragmentActivity, serverUrl, jwt
147152
).activityClass(FlutterInstantPdfActivity::class.java)
@@ -474,13 +479,13 @@ class PspdfkitApiImpl(private var activityPluginBinding: ActivityPluginBinding?)
474479
})
475480
}
476481

477-
override fun importXfdf(xfdfPath: String, callback: (Result<Boolean?>) -> Unit) {
482+
override fun importXfdf(xfdfString: String, callback: (Result<Boolean?>) -> Unit) {
478483
checkNotNull(activityPluginBinding) { "ActivityPluginBinding is null" }
479484
val document = Preconditions.requireDocumentNotNull(
480485
activityPluginBinding?.activity as PdfActivity, "Pspdfkit.processAnnotations()"
481486
)
482487

483-
val dataProvider = DocumentJsonDataProvider(xfdfPath)
488+
val dataProvider = DocumentJsonDataProvider(xfdfString)
484489
// The async parse method is recommended (so you can easily offload parsing from the UI thread).
485490
disposable = XfdfFormatter.parseXfdfAsync(document, dataProvider)
486491
.subscribeOn(Schedulers.io()) // Specify the thread on which to parse XFDF.
@@ -748,6 +753,14 @@ class PspdfkitApiImpl(private var activityPluginBinding: ActivityPluginBinding?)
748753
}
749754
}
750755

756+
override fun enableAnalyticsEvents(enable: Boolean) {
757+
if (enable) {
758+
analyticsEventClient?.let { PSPDFKit.addAnalyticsClient(it) }
759+
} else {
760+
analyticsEventClient?.let { PSPDFKit.removeAnalyticsClient(it) }
761+
}
762+
}
763+
751764
private fun setLicenseKey(activity: FragmentActivity, licenseKey: String?) {
752765
try {
753766
initialize(

android/src/main/java/com/pspdfkit/flutter/pspdfkit/PspdfkitPlugin.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,12 @@
4040
import com.pspdfkit.document.processor.PdfProcessorTask;
4141
import com.pspdfkit.exceptions.PSPDFKitException;
4242
import com.pspdfkit.flutter.pspdfkit.annotations.FlutterAnnotationPresetConfiguration;
43+
import com.pspdfkit.flutter.pspdfkit.api.AnalyticsEventsCallback;
44+
import com.pspdfkit.flutter.pspdfkit.api.NutrientEventsCallbacks;
4345
import com.pspdfkit.flutter.pspdfkit.api.PspdfkitApi;
4446
import com.pspdfkit.flutter.pspdfkit.api.PspdfkitFlutterApiCallbacks;
47+
import com.pspdfkit.flutter.pspdfkit.events.FlutterAnalyticsClient;
48+
import com.pspdfkit.flutter.pspdfkit.events.FlutterEventsHelper;
4549
import com.pspdfkit.flutter.pspdfkit.pdfgeneration.PdfPageAdaptor;
4650
import com.pspdfkit.flutter.pspdfkit.util.DocumentJsonDataProvider;
4751
import com.pspdfkit.flutter.pspdfkit.util.MeasurementHelper;
@@ -151,6 +155,8 @@ public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
151155
// Setup the PSPDFKit API.
152156
PspdfkitApi.Companion.setUp(binding.getBinaryMessenger(),pspdfkitApi,MESSAGE_CHANNEL_SUFFIX);
153157
PspdfkitFlutterApiCallbacks pspdfkitFlutterApiCallbacks = new PspdfkitFlutterApiCallbacks(binding.getBinaryMessenger(),MESSAGE_CHANNEL_SUFFIX);
158+
AnalyticsEventsCallback callback = new AnalyticsEventsCallback(binding.getBinaryMessenger(),MESSAGE_CHANNEL_SUFFIX);
159+
pspdfkitApi.setAnalyticsEventClient(new FlutterAnalyticsClient(callback));
154160
eventDispatcher.setPspdfkitApiCallbacks(new PspdfkitApiCallbacks(pspdfkitFlutterApiCallbacks));
155161
}
156162

@@ -268,6 +274,7 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
268274

269275
Intent intentInstant =
270276
InstantPdfActivityIntentBuilder
277+
.Companion
271278
.fromInstantDocument(activity, documentUrl, jwt)
272279
.activityClass(FlutterInstantPdfActivity.class)
273280
.configuration(configurationAdapterInstant.build())
@@ -929,6 +936,7 @@ private void detachActivityPluginBinding() {
929936
activityPluginBinding.removeRequestPermissionsResultListener(this);
930937
activityPluginBinding = null;
931938
pspdfkitApi.setActivityPluginBinding(null);
939+
932940
}
933941
}
934942

0 commit comments

Comments
 (0)