Skip to content

Commit 2566659

Browse files
committed
Release 5.2.0
1 parent a922e3b commit 2566659

37 files changed

+6393
-58
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
## 5.2.0 - 13 Oct 2025
2+
3+
- Introduces `AnnotationProperties` class to manage and update annotation properties such as color, opacity, line width, flags, and custom data. (J#HYB-879)
4+
- Updates Android SDK configuration (minSdk 24, compileSdk/targetSdk 36) to support Nutrient Android SDK 10.7.0.
5+
- Updates iOS deployment target to 16 to support Nutrient iOS SDK 14.12.0.
6+
- Updates AI Assistant implementation to use new `createAiAssistant` API with `AiAssistantProvider` interface support. (J#HYB-886)
7+
- Fixes issue where getPageInfo throws an error if not page labels are set on Android. (J#HYB-882)
8+
- Fixes issue where updating annotation flags results into unexpected behavior. (J#HYB-880,J#HYB-879)
9+
110
## 5.1.0 - 04 Sep 2025
211

312
- Adds the `androidShowAnnotationCreationAction` configuration option to hide the default annotation creation button while keeping annotation editing functionality enabled on Android. (J#HYB-864)

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 = '10.5.0'
41+
ext.pspdfkitVersion = '10.7.0'
4242
}
4343

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

55-
ext.androidCompileSdkVersion = 35
56-
ext.androidMinSdkVersion = 21
57-
ext.androidTargetSdkVersion = 35
55+
ext.androidCompileSdkVersion = 36
56+
ext.androidMinSdkVersion = 24
57+
ext.androidTargetSdkVersion = 36
5858
ext.androidGradlePluginVersion = '8.9.2'
5959
ext.kotlinVersion = "2.1.20"

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

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ import com.pspdfkit.annotations.Annotation
2525
import com.pspdfkit.document.DocumentSaveOptions
2626
import com.pspdfkit.document.PdfDocument
2727
import com.pspdfkit.flutter.pspdfkit.api.PdfDocumentApi
28+
import com.pspdfkit.flutter.pspdfkit.api.AnnotationManagerApi
2829
import com.pspdfkit.flutter.pspdfkit.document.FlutterPdfDocument
30+
import com.pspdfkit.flutter.pspdfkit.document.AnnotationManagerImpl
2931
import com.pspdfkit.flutter.pspdfkit.util.MeasurementHelper
3032
import com.pspdfkit.listeners.DocumentListener
3133
import com.pspdfkit.ui.PdfFragment
@@ -49,7 +51,6 @@ class FlutterPdfUiFragmentCallbacks(
4951
private val measurementConfigurations: List<Map<String, Any>>?,
5052
private val binaryMessenger: BinaryMessenger,
5153
private val flutterWidgetCallback: FlutterWidgetCallback,
52-
private val aiAssistant: AiAssistant?
5354

5455
) : FragmentManager.FragmentLifecycleCallbacks(), DocumentListener {
5556

@@ -88,7 +89,16 @@ class FlutterPdfUiFragmentCallbacks(
8889
// Set up document API for Flutter access FIRST - before sending callbacks
8990
try {
9091
flutterPdfDocument = FlutterPdfDocument(document)
92+
93+
// Register document instance for AnnotationManager access
94+
FlutterPdfDocument.registerDocument(document.uid, flutterPdfDocument!!)
95+
96+
// Set up PdfDocumentApi
9197
PdfDocumentApi.setUp(binaryMessenger, flutterPdfDocument, document.uid)
98+
99+
// Set up AnnotationManagerApi with documentId_annotation_manager as channel suffix
100+
val annotationManager = AnnotationManagerImpl(document)
101+
AnnotationManagerApi.setUp(binaryMessenger, annotationManager, "${document.uid}_annotation_manager")
92102
} catch (e: Exception) {
93103
Log.e(LOG_TAG, "Error setting up FlutterPdfDocument", e)
94104
}
@@ -114,13 +124,6 @@ class FlutterPdfUiFragmentCallbacks(
114124
} catch (e: Exception) {
115125
Log.e(LOG_TAG, "Error sending direct event notification", e)
116126
}
117-
aiAssistant?.let {
118-
try {
119-
document.setAiAssistant(it)
120-
} catch (e: Exception) {
121-
Log.e(LOG_TAG, "Error setting AiAssistant on loaded document", e)
122-
}
123-
}
124127
}
125128

126129
override fun onPageChanged(document: PdfDocument, pageIndex: Int) {
@@ -164,6 +167,12 @@ class FlutterPdfUiFragmentCallbacks(
164167
}
165168
if (pdfFragment == f) {
166169
pdfFragment?.removeDocumentListener(this)
170+
171+
// Cleanup document registration
172+
flutterPdfDocument?.let { doc ->
173+
FlutterPdfDocument.unregisterDocument(doc.pdfDocument.uid)
174+
}
175+
167176
pdfFragment = null
168177
flutterPdfDocument = null
169178
}

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

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import androidx.fragment.app.FragmentContainerView
2020
import androidx.fragment.app.FragmentManager
2121
import androidx.fragment.app.commit
2222
import androidx.fragment.app.commitNow
23+
import com.pspdfkit.ai.createAiAssistant
2324
import com.pspdfkit.flutter.pspdfkit.annotations.AnnotationMenuHandler
2425
import com.pspdfkit.flutter.pspdfkit.api.CustomToolbarCallbacks
2526
import com.pspdfkit.flutter.pspdfkit.api.NutrientEventsCallbacks
@@ -39,9 +40,8 @@ import io.flutter.plugin.common.MethodChannel
3940
import io.flutter.plugin.common.StandardMessageCodec
4041
import io.flutter.plugin.platform.PlatformView
4142
import io.flutter.plugin.platform.PlatformViewFactory
42-
import io.nutrient.data.models.AiAssistantConfiguration
4343
import io.nutrient.domain.ai.AiAssistant
44-
import io.nutrient.domain.ai.standaloneAiAssistant
44+
4545

4646
internal class PSPDFKitView(
4747
val context: Context,
@@ -66,7 +66,6 @@ internal class PSPDFKitView(
6666
private var annotationMenuHandler: AnnotationMenuHandler? = null
6767
private var isFragmentAttached = false
6868
private var methodCallHandler: PSPDFKitWidgetMethodCallHandler? = null
69-
private var aiAssistant: AiAssistant? = null
7069

7170
init {
7271
fragmentContainerView?.id = View.generateViewId()
@@ -128,11 +127,14 @@ internal class PSPDFKitView(
128127
.build()
129128
}
130129
}
131-
setupAiAssistant(context, aiAssistantConfigurationMap)
130+
131+
aiAssistantConfigurationMap?.let {
132+
setupAiAssistant(context, it)
133+
}
132134

133135
fragmentCallbacks = FlutterPdfUiFragmentCallbacks(
134136
methodChannel, measurementValueConfigurations,
135-
messenger, FlutterWidgetCallback(widgetCallbacks), aiAssistant
137+
messenger, FlutterWidgetCallback(widgetCallbacks)
136138
)
137139

138140
fragmentCallbacks?.let { callbacks ->
@@ -308,6 +310,7 @@ internal class PSPDFKitView(
308310
// Null out references
309311
fragmentCallbacks = null
310312
fragmentContainerView = null
313+
aiAssistant = null
311314

312315
// Unregister method channel
313316
NutrientViewControllerApi.setUp(messenger, null, id.toString())
@@ -386,22 +389,28 @@ internal class PSPDFKitView(
386389
val jwt = configuration?.get("jwt") as String?
387390
val sessionId = configuration?.get("sessionId") as String?
388391
val userId = configuration?.get("userId") as String?
389-
390-
if (serverUrl != null && jwt != null) {
391-
val aiAssistantConfiguration = AiAssistantConfiguration(
392-
serverUrl = serverUrl,
393-
jwt = jwt,
394-
sessionId = sessionId ?: "",
395-
userId = userId ?: ""
396-
)
397-
aiAssistant = standaloneAiAssistant(context, aiAssistantConfiguration)
392+
393+
if (serverUrl != null && jwt != null && sessionId != null) {
394+
try {
395+
// Create AI Assistant with new 10.6+ API and store in companion object
396+
aiAssistant = createAiAssistant(
397+
context = context,
398+
documentsDescriptors = emptyList(),
399+
ipAddress = serverUrl,
400+
sessionId = sessionId,
401+
jwtToken = { _ -> jwt }
402+
)
403+
} catch (e: Exception) {
404+
Log.e(LOG_TAG, "Error creating AI Assistant", e)
405+
}
398406
} else {
399-
Log.e(LOG_TAG, "Invalid AI Assistant configuration")
407+
Log.e(LOG_TAG, "Invalid AI Assistant configuration - serverUrl, jwt, and sessionId are required")
400408
}
401409
}
402410

403411
companion object {
404412
private const val LOG_TAG = "PSPDFKitPlugin"
413+
var aiAssistant: AiAssistant? = null
405414
}
406415
}
407416

0 commit comments

Comments
 (0)