ソースを参照

ComPDFKit(flutter) - android端新增save

ComPDFKit-Youna 9 ヶ月 前
コミット
bb9b492353

+ 2 - 1
android/src/main/java/com/compdfkit/flutter/compdfkit_flutter/CompdfkitFlutterPlugin.java

@@ -33,7 +33,8 @@ public class CompdfkitFlutterPlugin implements FlutterPlugin, ActivityAware {
     public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
         mMessenger = flutterPluginBinding.getBinaryMessenger();
         mRegistry = flutterPluginBinding.getPlatformViewRegistry();
-        new ComPDFKitSDKPlugin(flutterPluginBinding.getApplicationContext(), mMessenger, mRegistry);
+        new ComPDFKitSDKPlugin(flutterPluginBinding.getApplicationContext(), mMessenger)
+                .register();
     }
 
     @Override

+ 9 - 30
android/src/main/java/com/compdfkit/flutter/compdfkit_flutter/platformview/CPDFViewCtrlFlutter.java

@@ -22,6 +22,7 @@ import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentContainerView;
 
 
+import com.compdfkit.flutter.compdfkit_flutter.plugin.CPDFViewCtrlPlugin;
 import com.compdfkit.tools.common.pdf.CPDFConfigurationUtils;
 import com.compdfkit.tools.common.pdf.CPDFDocumentFragment;
 import com.compdfkit.tools.common.pdf.config.CPDFConfiguration;
@@ -33,7 +34,7 @@ import io.flutter.plugin.common.MethodCall;
 import io.flutter.plugin.common.MethodChannel;
 import io.flutter.plugin.platform.PlatformView;
 
-public class CPDFViewCtrlFlutter implements PlatformView, MethodChannel.MethodCallHandler {
+public class CPDFViewCtrlFlutter implements PlatformView {
 
     public static final String LOG_TAG = "ComPDFKit-Plugin";
     private FragmentContainerView fragmentContainerView;
@@ -44,7 +45,7 @@ public class CPDFViewCtrlFlutter implements PlatformView, MethodChannel.MethodCa
 
     private int viewId;
 
-    private MethodChannel methodChannel;
+    private CPDFViewCtrlPlugin methodChannel;
 
     public CPDFViewCtrlFlutter(Context context, BinaryMessenger binaryMessenger, int viewId, Map<String, Object> creationParams) {
         this.binaryMessenger = binaryMessenger;
@@ -54,10 +55,10 @@ public class CPDFViewCtrlFlutter implements PlatformView, MethodChannel.MethodCa
         Log.e(LOG_TAG, "CPDFViewCtrlFlutter:Create CPDFDocumentFragment");
         initCPDFViewCtrl(context, creationParams);
 
-        String channelName = "com.compdfkit.flutter.ui.pdfviewer." + viewId;
-        Log.e(LOG_TAG, "CPDFViewCtrlFlutter: create MethodChannel:" + channelName);
-        methodChannel = new MethodChannel(binaryMessenger, channelName);
-        methodChannel.setMethodCallHandler(this);
+        methodChannel = new CPDFViewCtrlPlugin(context, binaryMessenger, viewId);
+        methodChannel.setDocumentFragment(documentFragment);
+        methodChannel.register();
+
     }
 
 
@@ -87,20 +88,12 @@ public class CPDFViewCtrlFlutter implements PlatformView, MethodChannel.MethodCa
 
             @Override
             public void onViewDetachedFromWindow(@NonNull View v) {
-                documentFragment.pdfView.savePDF((s, uri) -> {
-                    Log.e(LOG_TAG, "CPDFViewCtrlFlutter: pdfView.savePDF Success");
-                    detachedFragment(context);
-                }, e -> {
-                    Log.e(LOG_TAG, "CPDFViewCtrlFlutter: pdfView.savePDF Fail");
-                    e.printStackTrace();
-                    detachedFragment(context);
-                });
-
+                detachedFragment(context);
             }
         });
     }
 
-    private void detachedFragment(Context context){
+    private void detachedFragment(Context context) {
         Log.e(LOG_TAG, "CPDFViewCtrlFlutter: Detached CPDFDocumentFragment from window");
         FragmentActivity fragmentActivity = getFragmentActivity(context);
         if (fragmentActivity != null) {
@@ -153,18 +146,4 @@ public class CPDFViewCtrlFlutter implements PlatformView, MethodChannel.MethodCa
             return null;
         }
     }
-
-    @Override
-    public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
-        Log.e(LOG_TAG, "CPDFViewCtrlFlutter:onMethodCall:" + call.method);
-        switch (call.method) {
-            case "pdfviewer":
-                result.success("rick");
-                break;
-            default:
-                Log.e(LOG_TAG, "CPDFViewCtrlFlutter:onMethodCall:notImplemented");
-                result.notImplemented();
-                break;
-        }
-    }
 }

+ 9 - 2
android/src/main/java/com/compdfkit/flutter/compdfkit_flutter/plugin/BaseMethodChannelPlugin.java

@@ -12,6 +12,7 @@ package com.compdfkit.flutter.compdfkit_flutter.plugin;
 
 
 import android.content.Context;
+import android.util.Log;
 
 import io.flutter.plugin.common.BinaryMessenger;
 import io.flutter.plugin.common.MethodChannel;
@@ -19,6 +20,8 @@ import io.flutter.plugin.common.MethodChannel;
 
 public abstract class BaseMethodChannelPlugin implements MethodChannel.MethodCallHandler {
 
+    public static final String LOG_TAG = "ComPDFKit-Plugin";
+
     protected MethodChannel methodChannel = null;
 
     protected Context context;
@@ -28,10 +31,14 @@ public abstract class BaseMethodChannelPlugin implements MethodChannel.MethodCal
     public BaseMethodChannelPlugin(Context context, BinaryMessenger binaryMessenger) {
         this.context = context;
         this.binaryMessenger = binaryMessenger;
-        methodChannel = new MethodChannel(binaryMessenger, methodName());
-        methodChannel.setMethodCallHandler(this);
     }
 
     public abstract String methodName();
 
+    public void register(){
+        Log.e(LOG_TAG, "create MethodChannel:" + methodName());
+        methodChannel = new MethodChannel(binaryMessenger, methodName());
+        methodChannel.setMethodCallHandler(this);
+    }
+
 }

+ 69 - 0
android/src/main/java/com/compdfkit/flutter/compdfkit_flutter/plugin/CPDFViewCtrlPlugin.java

@@ -0,0 +1,69 @@
+/*
+ * Copyright © 2014-2024 PDF Technologies, Inc. All Rights Reserved.
+ *
+ * THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
+ * AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
+ * UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
+ * This notice may not be removed from this file.
+ *
+ */
+
+package com.compdfkit.flutter.compdfkit_flutter.plugin;
+
+import android.content.Context;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
+import com.compdfkit.tools.common.pdf.CPDFDocumentFragment;
+
+import io.flutter.plugin.common.BinaryMessenger;
+import io.flutter.plugin.common.MethodCall;
+import io.flutter.plugin.common.MethodChannel;
+
+
+public class CPDFViewCtrlPlugin extends BaseMethodChannelPlugin{
+
+    private int viewId;
+
+    private CPDFDocumentFragment documentFragment;
+
+    public CPDFViewCtrlPlugin(Context context, BinaryMessenger binaryMessenger, int viewId) {
+        super(context, binaryMessenger);
+        this.viewId = viewId;
+    }
+
+    public void setDocumentFragment(CPDFDocumentFragment documentFragment) {
+        this.documentFragment = documentFragment;
+    }
+
+    @Override
+    public String methodName() {
+        return "com.compdfkit.flutter.ui.pdfviewer." + viewId;
+    }
+
+    @Override
+    public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
+        Log.e(LOG_TAG, "CPDFViewCtrlFlutter:onMethodCall:" + call.method);
+        switch (call.method) {
+            case "save":
+                if (documentFragment != null) {
+                    documentFragment.pdfView.savePDF((s, uri) -> {
+                        Log.e(LOG_TAG, "CPDFViewCtrlPlugin:onMethodCall:save-success");
+                        result.success(true);
+                    },e-> {
+                        Log.e(LOG_TAG, "CPDFViewCtrlPlugin:onMethodCall:save-fail");
+                        result.success(false);
+                    });
+                }else {
+                    Log.e(LOG_TAG, "CPDFViewCtrlPlugin:onMethodCall:save-fail");
+                    result.success(false);
+                }
+                break;
+            default:
+                Log.e(LOG_TAG, "CPDFViewCtrlFlutter:onMethodCall:notImplemented");
+                result.notImplemented();
+                break;
+        }
+    }
+}

+ 1 - 1
android/src/main/java/com/compdfkit/flutter/compdfkit_flutter/plugin/ComPDFKitSDKPlugin.java

@@ -39,7 +39,7 @@ public class ComPDFKitSDKPlugin extends BaseMethodChannelPlugin {
 
     public static final String SDK_BUILD_TAG = "sdk_build_tag";
 
-    public ComPDFKitSDKPlugin(Context context, BinaryMessenger binaryMessenger, PlatformViewRegistry registry) {
+    public ComPDFKitSDKPlugin(Context context, BinaryMessenger binaryMessenger) {
         super(context, binaryMessenger);
     }
 

+ 3 - 0
lib/widgets/cpdf_reader_widget_controller.dart

@@ -19,6 +19,9 @@ class CPDFReaderWidgetController {
     });
   }
 
+  /// Save document
+  /// Return value: **true** if the save is successful,
+  /// **false** if the save fails.
   Future<bool> save() async {
     return await _channel.invokeMethod('save');
   }