diff --git a/CHANGELOG.md b/CHANGELOG.md index edd90809..541a67f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ## Newest Release +### 3.8.1 - 14 Feb 2024 +- Fixes callbacks when Pspdfkit.present() is used. (J#HYB-204) + +## Previous Releases + ### 3.8.0 - 06 Feb 2024 - Adds Flutter for Web support. (#42151) - Replaces configuration `Map` with a dedicated `PdfConfiguration` class. (#42191) @@ -9,8 +14,6 @@ - Updates for PSPDFKit 13.3.0 for iOS. (#43305) - Compile SDK version 34 is now required on Android. (#43305) -## Previous Releases - ### 3.7.2 - 12 Jan 2024 - Adds `flutterPdfFragmentAdded` callback for Android. (#42631) @@ -20,9 +23,6 @@ - Fixes issue where iOS Appstore upload fails due to PSPDFKit Flutter missing "CFBundleShortVersionString" key. (#42166) - Fixes issue where Plugin returned "Document is missing or invalid" during pdfViewControllerWillDismiss events. (#42255) -- Upgrades compileSDKVersion to 34. (#42293) -- Upgrades Android Gradle Plugin to 8.1.2. (#42293) -- Upgrades to Java 17 for Android. (#42293) ### 3.7.0 - 07 Sep 2023 diff --git a/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterInstantPdfActivity.kt b/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterInstantPdfActivity.kt index efba9559..d91f9493 100644 --- a/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterInstantPdfActivity.kt +++ b/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterInstantPdfActivity.kt @@ -39,6 +39,7 @@ class FlutterInstantPdfActivity : InstantPdfActivity() { override fun onDocumentLoaded(pdfDocument: PdfDocument) { super.onDocumentLoaded(pdfDocument) + EventDispatcher.getInstance().notifyDocumentLoaded(pdfDocument) val result = loadedDocumentResult.getAndSet(null) result?.success(true) } diff --git a/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfActivity.java b/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfActivity.java index 7f30b950..59400a1f 100644 --- a/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfActivity.java +++ b/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfActivity.java @@ -60,6 +60,7 @@ protected void onDestroy() { @Override public void onDocumentLoaded(@NonNull PdfDocument pdfDocument) { super.onDocumentLoaded(pdfDocument); + EventDispatcher.getInstance().notifyDocumentLoaded(pdfDocument); Result result = loadedDocumentResult.getAndSet(null); if (result != null) { result.success(true); diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 89396657..2e8d31a5 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -50,7 +50,7 @@ dependencies { testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test:runner:1.5.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' - implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0' constraints { implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0") { diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist index 9b41e7d8..b3aaa733 100644 --- a/example/ios/Flutter/AppFrameworkInfo.plist +++ b/example/ios/Flutter/AppFrameworkInfo.plist @@ -25,6 +25,6 @@ arm64 MinimumOSVersion - 11.0 + 12.0 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index 58ded41e..057e9bb9 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -148,7 +148,7 @@ 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 2CAD281880438BCF3C693E84 /* [CP] Embed Pods Frameworks */, - 63CCEC3AD4F9B18F3F6B2519 /* [CP] Copy Pods Resources */, + 7F2264DF4C89C2FFD706F8AE /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -244,7 +244,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 63CCEC3AD4F9B18F3F6B2519 /* [CP] Copy Pods Resources */ = { + 7F2264DF4C89C2FFD706F8AE /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( diff --git a/example/pubspec.yaml b/example/pubspec.yaml index a720b830..49bbdd92 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -1,6 +1,6 @@ name: pspdfkit_example description: Demonstrates how to use the pspdfkit plugin. -version: 3.8.0 +version: 3.8.1 homepage: https://pspdfkit.com/ environment: sdk: '>=2.17.0 <4.0.0' diff --git a/ios/pspdfkit_flutter.podspec b/ios/pspdfkit_flutter.podspec index 13a862c2..ba26fe4c 100644 --- a/ios/pspdfkit_flutter.podspec +++ b/ios/pspdfkit_flutter.podspec @@ -5,7 +5,7 @@ # Pod::Spec.new do |s| s.name = "pspdfkit_flutter" - s.version = "3.8.0" + s.version = "3.8.1" s.homepage = "https://PSPDFKit.com" s.documentation_url = "https://pspdfkit.com/guides/flutter" s.license = { type: "Commercial", file: "../LICENSE" } @@ -22,6 +22,6 @@ Pod::Spec.new do |s| s.dependency("Instant", "13.3.0") s.swift_version = "5.0" s.platform = :ios, "15.0" - s.version = "3.8.0" + s.version = "3.8.1" s.pod_target_xcconfig = { "DEFINES_MODULE" => "YES", "SWIFT_INSTALL_OBJC_HEADER" => "NO" } end diff --git a/lib/pspdfkit.dart b/lib/pspdfkit.dart index df863989..655102a0 100644 --- a/lib/pspdfkit.dart +++ b/lib/pspdfkit.dart @@ -222,117 +222,74 @@ class Pspdfkit { static Future getTemporaryDirectory() => PspdfkitFlutterPlatform.instance.getTemporaryDirectory(); - /// onPause callback for FlutterPdfActivity - static void Function()? flutterPdfActivityOnPause; + /// onPause callback for FlutterPdfActivity. Only available on Android. + static set flutterPdfActivityOnPause( + VoidCallback? flutterPdfActivityOnPause) { + PspdfkitFlutterPlatform.instance.flutterPdfActivityOnPause = + flutterPdfActivityOnPause; + } - /// Added callback for FlutterPdfFragment - static void Function()? flutterPdfFragmentAdded; + /// called when a PdfFragment is added. Only available on Android. + static set flutterPdfFragmentAdded(VoidCallback? flutterPdfFragmentAdded) { + PspdfkitFlutterPlatform.instance.flutterPdfFragmentAdded = + flutterPdfFragmentAdded; + } - /// ViewControllerWillDismiss callback for PDFViewController - static void Function()? pdfViewControllerWillDismiss; + /// Called when a document is loaded. + static set pspdfkitDocumentLoaded( + PspdfkitDocumentLoadedCallback? pspdfkitDocumentLoaded) { + PspdfkitFlutterPlatform.instance.flutterPdfDocumentLoaded = + pspdfkitDocumentLoaded; + } - /// ViewControllerDidDismiss callback for PDFViewController - static void Function()? pdfViewControllerDidDismiss; + /// ViewControllerWillDismiss callback for PDFViewController. Only available on iOS. + static set pdfViewControllerWillDismiss( + VoidCallback? pdfViewControllerWillDismiss) { + PspdfkitFlutterPlatform.instance.pdfViewControllerWillDismiss = + pdfViewControllerWillDismiss; + } + + /// ViewControllerDidDismiss callback for PDFViewController. Only available on iOS. + static set pdfViewControllerDidDismiss(VoidCallback? callback) { + PspdfkitFlutterPlatform.instance.pdfViewControllerDidDismiss = callback; + } /// Called when instant synchronization starts. - static void Function(String? documentId)? instantSyncStarted; + static set instantSyncStarted(InstantSyncStartedCallback? callback) { + PspdfkitFlutterPlatform.instance.instantSyncStarted = callback; + } /// Called when instant synchronization ends. - static void Function(String? documentId)? instantSyncFinished; + static set instantSyncFinished(InstantSyncFinishedCallback? callback) { + PspdfkitFlutterPlatform.instance.instantSyncFinished = callback; + } /// Called when instant synchronization fails. - static void Function(String? documentId, String? error)? instantSyncFailed; + static set instantSyncFailed(InstantSyncFailedCallback? callback) { + PspdfkitFlutterPlatform.instance.instantSyncFailed = callback; + } /// Called when instant authentication is done. - static void Function(String documentId, String? validJWT)? - instantAuthenticationFinished; + static set instantAuthenticationFinished( + InstantAuthenticationFinishedCallback? callback) { + PspdfkitFlutterPlatform.instance.instantAuthenticationFinished = callback; + } /// Called when instant authentication fails. - static void Function(String? documentId, String? error)? - instantAuthenticationFailed; - - /// Only available on iOS. - /// Called when instant document download is done. - static void Function(String? documentId)? instantDownloadFinished; - - /// Only available on iOS. - /// Called when instant document download fails. - static void Function(String? documentId, String? error)? - instantDownloadFailed; - - /// Called with the document has been loaded - static void Function(String? documentId)? pspdfkitDocumentLoaded; - - static Future _platformCallHandler(MethodCall call) { - try { - switch (call.method) { - case 'flutterPdfActivityOnPause': - flutterPdfActivityOnPause?.call(); - break; - case 'flutterPdfFragmentAdded': - flutterPdfFragmentAdded?.call(); - break; - case 'pdfViewControllerWillDismiss': - pdfViewControllerWillDismiss?.call(); - break; - case 'pdfViewControllerDidDismiss': - pdfViewControllerDidDismiss?.call(); - break; - case 'pspdfkitInstantSyncStarted': - instantSyncStarted?.call(call.arguments as String); - break; - case 'pspdfkitInstantSyncFinished': - instantSyncFinished?.call(call.arguments as String); - break; - case 'pspdfkitInstantSyncFailed': - { - final Map map = - call.arguments as Map; - instantSyncFailed?.call( - map['documentId'] as String, map['error'] as String); - break; - } - case 'pspdfkitInstantAuthenticationFinished': - { - final Map map = - call.arguments as Map; - instantAuthenticationFinished?.call( - map['documentId'] as String, map['jwt'] as String); - break; - } - case 'pspdfkitInstantAuthenticationFailed': - { - final Map arguments = - call.arguments as Map; - instantAuthenticationFailed?.call(arguments['documentId'] as String, - arguments['error'] as String); - break; - } - case 'pspdfkitInstantDownloadFinished': - instantDownloadFinished?.call(call.arguments as String); - break; - case 'pspdfkitInstantDownloadFailed': - { - final Map arguments = - call.arguments as Map; - instantDownloadFailed?.call(arguments['documentId'] as String, - arguments['error'] as String); - break; - } - case 'pspdfkitDocumentLoaded': - pspdfkitDocumentLoaded?.call(call.arguments as String); - break; - default: - if (kDebugMode) { - print('Unknown method ${call.method} '); - } - } - } catch (e) { - if (kDebugMode) { - print(e); - } - } - return Future.value(); + static set instantAuthenticationFailed( + InstantAuthenticationFailedCallback? callback) { + PspdfkitFlutterPlatform.instance.instantAuthenticationFailed = callback; + } + + /// Called when instant document download is done.Only available on iOS. + static set instantDownloadFinished( + InstantDownloadFinishedCallback? callback) { + PspdfkitFlutterPlatform.instance.instantDownloadFinished = callback; + } + + /// Called when instant document download fails. Only available on iOS. + static set instantDownloadFailed(InstantDownloadFailedCallback? callback) { + PspdfkitFlutterPlatform.instance.instantDownloadFailed = callback; } } diff --git a/lib/src/pspdfkit_flutter_method_channel.dart b/lib/src/pspdfkit_flutter_method_channel.dart index c7a1cdd6..f5254406 100644 --- a/lib/src/pspdfkit_flutter_method_channel.dart +++ b/lib/src/pspdfkit_flutter_method_channel.dart @@ -8,7 +8,6 @@ /// /// import 'dart:io'; - import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:pspdfkit_flutter/pspdfkit.dart'; @@ -293,47 +292,58 @@ class MethodChannelPspdfkitFlutter extends PspdfkitFlutterPlatform { } /// onPause callback for FlutterPdfActivity + + @override + set flutterPdfActivityOnPause(VoidCallback? flutterPdfActivityOnPause); + + @override + set flutterPdfFragmentAdded(VoidCallback? flutterPdfFragmentAdded); + @override - void Function()? flutterPdfActivityOnPause; + set flutterPdfDocumentLoaded( + PspdfkitDocumentLoadedCallback? flutterPdfDocumentLoaded); /// ViewControllerWillDismiss callback for PDFViewController @override - void Function()? pdfViewControllerWillDismiss; + set pdfViewControllerWillDismiss(VoidCallback? pdfViewControllerWillDismiss); /// ViewControllerDidDismiss callback for PDFViewController @override - void Function()? pdfViewControllerDidDismiss; + set pdfViewControllerDidDismiss(VoidCallback? pdfViewControllerDidDismiss); /// Called when instant synchronization starts. @override - void Function(String? documentId)? instantSyncStarted; + set instantSyncStarted(InstantSyncStartedCallback? instantSyncStarted); /// Called when instant synchronization ends. @override - void Function(String? documentId)? instantSyncFinished; + set instantSyncFinished(InstantSyncFinishedCallback? instantSyncFinished); /// Called when instant synchronization fails. @override - void Function(String? documentId, String? error)? instantSyncFailed; + set instantSyncFailed(InstantSyncFailedCallback? instantSyncFailed); /// Called when instant authentication is done. @override - void Function(String documentId, String? validJWT)? - instantAuthenticationFinished; + set instantAuthenticationFinished( + InstantAuthenticationFinishedCallback? instantAuthenticationFinished); /// Called when instant authentication fails. @override - void Function(String? documentId, String? error)? instantAuthenticationFailed; + set instantAuthenticationFailed( + InstantAuthenticationFailedCallback? instantAuthenticationFailed); /// Only available on iOS. /// Called when instant document download is done. @override - void Function(String? documentId)? instantDownloadFinished; + set instantDownloadFinished( + InstantDownloadFinishedCallback? instantDownloadFinished); /// Only available on iOS. /// Called when instant document download fails. @override - void Function(String? documentId, String? error)? instantDownloadFailed; + set instantDownloadFailed( + InstantDownloadFailedCallback? instantDownloadFailed); Future _platformCallHandler(MethodCall call) { try { diff --git a/lib/src/pspdfkit_flutter_platform_interface.dart b/lib/src/pspdfkit_flutter_platform_interface.dart index f074f0b7..641210a5 100644 --- a/lib/src/pspdfkit_flutter_platform_interface.dart +++ b/lib/src/pspdfkit_flutter_platform_interface.dart @@ -9,12 +9,24 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; -import 'package:flutter/services.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; import 'package:pspdfkit_flutter/pspdfkit.dart'; - import 'pspdfkit_flutter_method_channel.dart'; +typedef InstantSyncStartedCallback = void Function(String? documentId); +typedef InstantSyncFinishedCallback = void Function(String? documentId); +typedef InstantSyncFailedCallback = void Function( + String? documentId, String? error); +typedef InstantAuthenticationFinishedCallback = void Function( + String documentId, String? validJWT); +typedef InstantAuthenticationFailedCallback = void Function( + String? documentId, String? error); +typedef InstantDownloadFinishedCallback = void Function(String? documentId); +typedef InstantDownloadFailedCallback = void Function( + String? documentId, String? error); + +typedef PspdfkitDocumentLoadedCallback = void Function(String documentId); + abstract class PspdfkitFlutterPlatform extends PlatformInterface { /// Constructs a PspdfkitFlutterPlatform. PspdfkitFlutterPlatform() : super(token: _token); @@ -161,37 +173,40 @@ abstract class PspdfkitFlutterPlatform extends PlatformInterface { Future getTemporaryDirectory(); /// onPAuse callback for FlutterPdfActivity - void Function()? flutterPdfActivityOnPause; + VoidCallback? flutterPdfActivityOnPause; + + VoidCallback? flutterPdfFragmentAdded; + + PspdfkitDocumentLoadedCallback? flutterPdfDocumentLoaded; /// ViewControllerWillDismiss callback for PDFViewController - void Function()? pdfViewControllerWillDismiss; + VoidCallback? pdfViewControllerWillDismiss; /// ViewControllerDidDismiss callback for PDFViewController - void Function()? pdfViewControllerDidDismiss; + VoidCallback? pdfViewControllerDidDismiss; /// Called when instant synchronization starts. - void Function(String? documentId)? instantSyncStarted; + InstantSyncStartedCallback? instantSyncStarted; /// Called when instant synchronization ends. - void Function(String? documentId)? instantSyncFinished; + InstantSyncFinishedCallback? instantSyncFinished; /// Called when instant synchronization fails. - void Function(String? documentId, String? error)? instantSyncFailed; + InstantSyncFailedCallback? instantSyncFailed; /// Called when instant authentication is done. - void Function(String documentId, String? validJWT)? - instantAuthenticationFinished; + InstantAuthenticationFinishedCallback? instantAuthenticationFinished; /// Called when instant authentication fails. - void Function(String? documentId, String? error)? instantAuthenticationFailed; + InstantAuthenticationFailedCallback? instantAuthenticationFailed; /// Only available on iOS. /// Called when instant document download is done. - void Function(String? documentId)? instantDownloadFinished; + InstantDownloadFinishedCallback? instantDownloadFinished; /// Only available on iOS. /// Called when instant document download fails. - void Function(String? documentId, String? error)? instantDownloadFailed; + InstantDownloadFailedCallback? instantDownloadFailed; /// Gets the annotation author name. String get authorName; @@ -199,85 +214,4 @@ abstract class PspdfkitFlutterPlatform extends PlatformInterface { /// Gets the default main toolbar [PspdfkitWebToolbarItem]s on Web. /// Returns an empty list when called on other platforms. List get defaultWebToolbarItems; - - static AndroidPermissionStatus _intToAndroidPermissionStatus(int status) { - switch (status) { - case 0: - return AndroidPermissionStatus.notDetermined; - case 1: - return AndroidPermissionStatus.denied; - case 2: - return AndroidPermissionStatus.authorized; - case 3: - return AndroidPermissionStatus.deniedNeverAsk; - default: - return AndroidPermissionStatus.notDetermined; - } - } - - Future _platformCallHandler(MethodCall call) { - try { - switch (call.method) { - case 'flutterPdfActivityOnPause': - flutterPdfActivityOnPause?.call(); - break; - case 'pdfViewControllerWillDismiss': - pdfViewControllerWillDismiss?.call(); - break; - case 'pdfViewControllerDidDismiss': - pdfViewControllerDidDismiss?.call(); - break; - case 'pspdfkitInstantSyncStarted': - instantSyncStarted?.call(call.arguments as String); - break; - case 'pspdfkitInstantSyncFinished': - instantSyncFinished?.call(call.arguments as String); - break; - case 'pspdfkitInstantSyncFailed': - { - final Map map = - call.arguments as Map; - instantSyncFailed?.call( - map['documentId'] as String, map['error'] as String); - break; - } - case 'pspdfkitInstantAuthenticationFinished': - { - final Map map = - call.arguments as Map; - instantAuthenticationFinished?.call( - map['documentId'] as String, map['jwt'] as String); - break; - } - case 'pspdfkitInstantAuthenticationFailed': - { - final Map arguments = - call.arguments as Map; - instantAuthenticationFailed?.call(arguments['documentId'] as String, - arguments['error'] as String); - break; - } - case 'pspdfkitInstantDownloadFinished': - instantDownloadFinished?.call(call.arguments as String); - break; - case 'pspdfkitInstantDownloadFailed': - { - final Map arguments = - call.arguments as Map; - instantDownloadFailed?.call(arguments['documentId'] as String, - arguments['error'] as String); - break; - } - default: - if (kDebugMode) { - print('Unknown method ${call.method} '); - } - } - } catch (e) { - if (kDebugMode) { - print(e); - } - } - return Future.value(); - } } diff --git a/pubspec.yaml b/pubspec.yaml index 5f814b1a..5d384fb1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pspdfkit_flutter description: A Flutter plugin providing a feature-rich PDF viewing and editing experience to your users with the powerful PSPDFKit PDF SDK. -version: 3.8.0 +version: 3.8.1 homepage: https://pspdfkit.com/ repository: https://github.com/PSPDFKit/pspdfkit-flutter issue_tracker: https://support.pspdfkit.com/hc/en-us/requests/new