Jelajahi Sumber

PDFTool(Android) - 修复表单下拉框设置字体无效问题,修复删除所有注释会删除表单问题

liuxiaolong 7 bulan lalu
induk
melakukan
cb57c88004

+ 7 - 3
Annotations/src/main/java/com/compdfkit/annotations/PDFAnnotationSampleActivity.java

@@ -24,6 +24,7 @@ import com.compdfkit.tools.common.views.pdfbota.CPDFBOTA;
 import com.compdfkit.tools.common.views.pdfbota.CPDFBotaDialogFragment;
 import com.compdfkit.tools.common.views.pdfbota.CPDFBotaFragmentTabs;
 import com.compdfkit.tools.common.views.pdfproperties.CAnnotationType;
+import com.compdfkit.tools.common.views.pdfview.CPDFIReaderViewCallback;
 import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
 import com.compdfkit.tools.viewer.pdfsearch.CSearchResultDialogFragment;
 import com.compdfkit.ui.reader.CPDFReaderView;
@@ -84,9 +85,12 @@ public class PDFAnnotationSampleActivity extends CBasicPDFActivity {
                 }
             }
         });
-        binding.pdfView.setOnTapMainDocAreaCallback(() -> {
-            //Use the CFillScreenManager.class to manage fullscreen switching.
-            screenManager.fillScreenChange();
+        binding.pdfView.addReaderViewCallback(new CPDFIReaderViewCallback(){
+            @Override
+            public void onTapMainDocArea() {
+                super.onTapMainDocArea();
+                screenManager.fillScreenChange();
+            }
         });
     }
 

TEMPAT SAMPAH
ComPDFKit_Repo/compdfkit-ui/ComPDFKit-UI.aar


TEMPAT SAMPAH
ComPDFKit_Repo/compdfkit/ComPDFKit.aar


+ 2 - 3
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/annotation/pdfannotationlist/CPDFAnnotationListFragment.java

@@ -101,8 +101,8 @@ public class CPDFAnnotationListFragment extends Fragment {
                     boolean importResult = CPDFAnnotDatas.importAnnotations(pdfView.getCPdfReaderView().getPDFDocument(), importFilePath);
                     if (importResult){
                         CToastUtil.showLongToast(getContext(), R.string.tools_import_success);
-                        updateAnnotationList();
                         pdfView.getCPdfReaderView().reloadPages();
+                        pdfView.postDelayed(()-> updateAnnotationList(), 400);
                     }
                     CLog.e("ComPDFKit-Tools", "import Annotation xfdf format file " + (importResult ? "success" : "fail"));
                 }
@@ -219,8 +219,7 @@ public class CPDFAnnotationListFragment extends Fragment {
      * delete pdf document all annotations
      */
     public void deleteAllAnnotations(){
-        CPDFDocument document = pdfView.getCPdfReaderView().getPDFDocument();
-        boolean result = document.removeAllAnnotations();
+        boolean result = CPDFAnnotDatas.removeAllAnnotations(listAdapter.list);
         if (result){
             pdfView.getCPdfReaderView().reloadPages();
             updateAnnotationList();

+ 12 - 0
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/annotation/pdfannotationlist/data/CPDFAnnotDatas.java

@@ -226,4 +226,16 @@ public class CPDFAnnotDatas {
             }
         }
     }
+
+    public static boolean removeAllAnnotations(List<CPDFAnnotListItem> items){
+        for (CPDFAnnotListItem item : items) {
+            CPDFAnnotation annotation = item.getAttr();
+            if (annotation == null || !annotation.isValid()){
+                continue;
+            }
+            annotation.removeFromPage();
+            annotation.close();
+        }
+        return true;
+    }
 }

+ 52 - 31
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/pdf/CPDFDocumentFragment.java

@@ -40,6 +40,7 @@ import androidx.core.content.ContextCompat;
 import com.compdfkit.core.annotation.CPDFAnnotation;
 import com.compdfkit.core.annotation.CPDFFreetextAnnotation;
 import com.compdfkit.core.annotation.form.CPDFSignatureWidget;
+import com.compdfkit.core.document.CPDFBackground;
 import com.compdfkit.core.document.CPDFDocument;
 import com.compdfkit.core.edit.CPDFEditConfig;
 import com.compdfkit.core.edit.CPDFEditManager;
@@ -72,6 +73,7 @@ import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CAnnotStyle;
 import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CStyleDialogFragment;
 import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CStyleType;
 import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.manager.CStyleManager;
+import com.compdfkit.tools.common.views.pdfview.CPDFIReaderViewCallback;
 import com.compdfkit.tools.common.views.pdfview.CPDFViewCtrl;
 import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
 import com.compdfkit.tools.contenteditor.CEditToolbar;
@@ -141,6 +143,8 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
 
     private CPopupMenuWindow menuWindow;
 
+    private CPDFDocumentFragmentInitListener initListener;
+
     public static CPDFDocumentFragment newInstance(String filePath, String password, CPDFConfiguration configuration) {
         Bundle args = new Bundle();
         args.putString(EXTRA_FILE_PATH, filePath);
@@ -243,10 +247,13 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
             initSignatureToolbar();
             applyConfiguration();
             onDoNext();
+            if (initListener != null) {
+                initListener.compile(pdfView);
+            }
         });
     }
 
-    private void initDocument(CPDFViewCtrl.COnOpenPdfFinishCallback callback) {
+    protected void initDocument(CPDFViewCtrl.COnOpenPdfFinishCallback callback) {
         if (getArguments() != null) {
             String password = getArguments().getString(EXTRA_FILE_PASSWORD);
             if (!TextUtils.isEmpty(getArguments().getString(EXTRA_FILE_PATH))) {
@@ -262,7 +269,7 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
         }
     }
 
-    private void initPDFView() {
+    protected void initPDFView() {
         pdfView.setCPDFConfiguration(cpdfConfiguration);
         pdfView.getCPdfReaderView().setMinScaleEnable(false);
         registerAnnotHelper(pdfView);
@@ -278,17 +285,27 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
                 }
             }
         });
-        pdfView.setOnTapMainDocAreaCallback(() -> {
-            if (pdfSearchToolBarView.getVisibility() == VISIBLE) {
-                pdfSearchToolBarView.showSearchReplaceContextMenu();
-                return;
-            }
-            if (pdfView.getCPdfReaderView().getTouchMode() == CPDFReaderView.TouchMode.SCREENSHOT){
-                return;
+        pdfView.addReaderViewCallback(new CPDFIReaderViewCallback(){
+            @Override
+            public void onTapMainDocArea() {
+                if (pdfSearchToolBarView.getVisibility() == VISIBLE) {
+                    pdfSearchToolBarView.showSearchReplaceContextMenu();
+                    return;
+                }
+                if (pdfView.getCPdfReaderView().getTouchMode() == CPDFReaderView.TouchMode.SCREENSHOT){
+                    return;
+                }
+                if (!cpdfConfiguration.modeConfig.readerOnly){
+                    //Use the CFillScreenManager.class to manage fullscreen switching.
+                    screenManager.fillScreenChange();
+                }
             }
-            if (!cpdfConfiguration.modeConfig.readerOnly){
-                //Use the CFillScreenManager.class to manage fullscreen switching.
-                screenManager.fillScreenChange();
+
+            @Override
+            public void onEndScroll() {
+                super.onEndScroll();
+                pdfSearchToolBarView.showSearchReplaceContextMenu();
+                editToolBar.updateUndoRedo();
             }
         });
         pdfView.getCPdfReaderView().setPdfAddAnnotCallback((cpdfPageView, cpdfBaseAnnot) -> {
@@ -363,7 +380,7 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
         }
     }
 
-    private void initToolBarView() {
+    protected void initToolBarView() {
         pdfToolBar.setPreviewModeChangeListener(this::setPreviewMode);
         if (cpdfConfiguration != null) {
             ToolbarConfig toolbarConfig = cpdfConfiguration.toolbarConfig;
@@ -440,7 +457,7 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
         }
     }
 
-    private void requestStoragePermissions(CRequestPermissionListener permissionListener) {
+    protected void requestStoragePermissions(CRequestPermissionListener permissionListener) {
         if (Build.VERSION.SDK_INT >= CPermissionUtil.VERSION_TIRAMISU) {
             CPermissionUtil.openManageAllFileAppSettings(getContext());
         } else {
@@ -458,7 +475,7 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
         }
     }
 
-    private void initAnnotToolbar() {
+    protected void initAnnotToolbar() {
         annotationToolbar.initWithPDFView(pdfView);
         annotationToolbar.setFragmentManager(getChildFragmentManager());
         annotationToolbar.setAnnotationChangeListener(type -> {
@@ -481,12 +498,12 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
         inkCtrlView.setFragmentManager(getChildFragmentManager());
     }
 
-    private void initFormToolbar() {
+    protected void initFormToolbar() {
         formToolBar.initWithPDFView(pdfView);
         formToolBar.setFragmentManager(getChildFragmentManager());
     }
 
-    private void initSearchBar() {
+    protected void initSearchBar() {
         pdfSearchToolBarView.initWithPDFView(pdfView);
         pdfSearchToolBarView.setExitSearchListener(() -> {
             if (curEditMode > CPDFEditPage.LoadNone) {
@@ -506,7 +523,7 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
         });
     }
 
-    private void initEditBar() {
+    protected void initEditBar() {
         if (pdfView == null || pdfView.getCPdfReaderView() == null) {
             return;
         }
@@ -545,13 +562,9 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
                 menuHelper.dismissContextMenu();
             }
         });
-        pdfView.setEndScrollCallback(() -> {
-            pdfSearchToolBarView.showSearchReplaceContextMenu();
-            editToolBar.updateUndoRedo();
-        });
     }
 
-    private void initSignatureToolbar() {
+    protected void initSignatureToolbar() {
         signStatusView.initWithPDFView(pdfView);
         signStatusView.getBtnDetails().setOnClickListener(v -> {
             CPDFCertDigitalSignListDialog signListDialog = CPDFCertDigitalSignListDialog.newInstance();
@@ -563,7 +576,7 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
         signatureToolBar.getVerifySignButton().setOnClickListener(v -> verifyDocumentSignStatus());
     }
 
-    private void showToolbarMenuDialog(View anchorView) {
+    protected void showToolbarMenuDialog(View anchorView) {
         //Show the PDF settings dialog fragment
         menuWindow = new CPopupMenuWindow(getContext());
         if (cpdfConfiguration != null && cpdfConfiguration.toolbarConfig != null) {
@@ -692,7 +705,7 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
         menuWindow.showAsDropDown(anchorView);
     }
 
-    private void flattenedPdf() {
+    protected void flattenedPdf() {
         CFileDirectoryDialog directoryDialog = CFileDirectoryDialog.newInstance(
                 Environment.getExternalStorageDirectory().getAbsolutePath(),
                 getContext().getString(R.string.tools_select_folder),
@@ -738,7 +751,7 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
     /**
      *
      */
-    private void verifyDocumentSignStatus() {
+    protected void verifyDocumentSignStatus() {
         CPDFDocument document = pdfView.getCPdfReaderView().getPDFDocument();
         if (CertificateDigitalDatas.hasDigitalSignature(document)) {
             CThreadPoolUtils.getInstance().executeIO(() -> {
@@ -759,7 +772,7 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
         }
     }
 
-    private void selectDocument() {
+    protected void selectDocument() {
         if (pdfToolBar.getMode() == CPreviewMode.Edit) {
             pdfView.exitEditMode();
         }
@@ -790,13 +803,13 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
         alertDialog.show(getChildFragmentManager(), "alertDialog");
     }
 
-    private void onDoNext() {
+    protected void onDoNext() {
         multiplePermissionResultLauncher.launch(STORAGE_PERMISSIONS, result -> {
 
         });
     }
 
-    private void showSettingEncryptionDialog() {
+    protected void showSettingEncryptionDialog() {
         CDocumentEncryptionDialog documentEncryptionDialog = CDocumentEncryptionDialog.newInstance();
         documentEncryptionDialog.setDocument(pdfView.getCPdfReaderView().getPDFDocument());
         documentEncryptionDialog.setSaveFileExtraFontSubset(pdfView.isSaveFileExtraFontSubset());
@@ -823,7 +836,7 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
                 .registImpl(CPDFSignatureWidget.class, SignatureWidgetImpl.class);
     }
 
-    private void parseConfiguration() {
+    protected void parseConfiguration() {
         if (getArguments() != null && getArguments().containsKey(EXTRA_CONFIGURATION)) {
             if (Build.VERSION.SDK_INT >= CPermissionUtil.VERSION_TIRAMISU) {
                 cpdfConfiguration = getArguments().getSerializable(EXTRA_CONFIGURATION, CPDFConfiguration.class);
@@ -836,7 +849,7 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
         }
     }
 
-    private void applyConfiguration() {
+    protected void applyConfiguration() {
         CPDFApplyConfigUtil.getInstance().applyConfiguration(this, cpdfConfiguration);
     }
 
@@ -872,4 +885,12 @@ public class CPDFDocumentFragment extends CBasicPDFFragment {
         }
         super.onDestroy();
     }
+
+    public void setInitListener(CPDFDocumentFragmentInitListener initListener) {
+        this.initListener = initListener;
+    }
+
+    public interface CPDFDocumentFragmentInitListener{
+        void compile(CPDFViewCtrl pdfView);
+    }
 }

+ 40 - 0
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/views/pdfview/CPDFIReaderViewCallback.java

@@ -0,0 +1,40 @@
+/**
+ * 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.tools.common.views.pdfview;
+
+import com.compdfkit.ui.reader.IReaderViewCallback;
+
+public class CPDFIReaderViewCallback implements IReaderViewCallback {
+
+    @Override
+    public void onTapMainDocArea() {
+
+    }
+
+    @Override
+    public void onMoveToChild(int i) {
+
+    }
+
+    @Override
+    public void onEndScroll() {
+
+    }
+
+    @Override
+    public void onScrolling() {
+
+    }
+
+    @Override
+    public void onRecordLastJumpPageNum(int i) {
+
+    }
+}

+ 6 - 2
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/views/pdfview/CPDFPageIndicatorView.java

@@ -13,6 +13,7 @@ package com.compdfkit.tools.common.views.pdfview;
 import android.content.Context;
 import android.graphics.Color;
 import android.util.AttributeSet;
+import android.view.Gravity;
 import android.widget.LinearLayout;
 
 import androidx.annotation.Nullable;
@@ -68,14 +69,17 @@ public class CPDFPageIndicatorView extends LinearLayout {
         tvPageIndicator = new AppCompatTextView(getContext());
         // set layout params for the text view
         LinearLayout.LayoutParams currentPageLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
+        currentPageLayoutParams.gravity = Gravity.CENTER;
         int horizontalMargin = CDimensUtils.dp2px(getContext(), 8);
         int verticalMargin = CDimensUtils.dp2px(getContext(), 4);
         currentPageLayoutParams.setMargins(horizontalMargin, verticalMargin, horizontalMargin, verticalMargin);
-        tvPageIndicator.setLayoutParams(currentPageLayoutParams);
+//        tvPageIndicator.setLayoutParams(currentPageLayoutParams);
         // set text color to white
         tvPageIndicator.setTextColor(Color.WHITE);
+        tvPageIndicator.setGravity(Gravity.CENTER);
+        tvPageIndicator.setMinimumWidth(CDimensUtils.dp2px(getContext(), 35));
         // add the text view to the layout
-        addView(tvPageIndicator);
+        addView(tvPageIndicator, currentPageLayoutParams);
         // set background resource for the layout
         setBackgroundResource(R.drawable.tools_pdf_page_indactor_bg);
         // set click listener for the layout

+ 46 - 21
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/views/pdfview/CPDFViewCtrl.java

@@ -35,7 +35,6 @@ import com.compdfkit.core.annotation.form.CPDFWidget;
 import com.compdfkit.core.common.CPDFDocumentException;
 import com.compdfkit.core.document.CPDFDocument;
 import com.compdfkit.core.edit.CPDFEditManager;
-import com.compdfkit.tools.BuildConfig;
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.common.pdf.config.CPDFConfiguration;
 import com.compdfkit.tools.common.utils.CFileUtils;
@@ -134,7 +133,7 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
 
     private int pageIndicatorMarginBottom = 0;
 
-    private OnTapMainDocAreaCallback onTapMainDocAreaCallback;
+    private List<CPDFIReaderViewCallback> readerViewCallbacks = new ArrayList<>();
 
     private boolean isScrolling = false;
 
@@ -146,6 +145,10 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
 
     private CPDFConfiguration cpdfConfiguration;
 
+    private COnSaveCallback saveGlobalCallback;
+
+    private COnSaveError saveGlobalErrorCallback;
+
     private Runnable hideIndicatorRunnable = () -> {
         if (pageIndicatorAnimator != null) {
             isScrolling = false;
@@ -153,8 +156,6 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
         }
     };
 
-    COnEndScrollCallback endScrollCallback = null;
-
     public CPDFViewCtrl(@NonNull Context context) {
         this(context, null);
     }
@@ -386,6 +387,9 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
                 if (error != null) {
                     error.error(new Exception("document is null"));
                 }
+                if (saveGlobalErrorCallback != null) {
+                    saveGlobalErrorCallback.error(new Exception("document is null"));
+                }
                 return;
             }
             exitEditMode();
@@ -404,17 +408,26 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
                     if (callback != null) {
                         callback.callback(document.getAbsolutePath(), document.getUri());
                     }
+                    if (saveGlobalCallback != null) {
+                        saveGlobalCallback.callback(document.getAbsolutePath(), document.getUri());
+                    }
                 } catch (CPDFDocumentException e) {
                     e.printStackTrace();
                     CLog.e("ComPDFKit", "save fail:" + e.getMessage());
                     if (error != null) {
                         error.error(e);
                     }
+                    if (saveGlobalErrorCallback != null) {
+                        saveGlobalErrorCallback.error(new Exception("document is null"));
+                    }
                 }
             } else {
                 if (callback != null) {
                     callback.callback(document.getAbsolutePath(), document.getUri());
                 }
+                if (saveGlobalCallback != null) {
+                    saveGlobalCallback.callback(document.getAbsolutePath(), document.getUri());
+                }
             }
         });
     }
@@ -452,10 +465,6 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
         return cPdfReaderView;
     }
 
-    public void setEndScrollCallback(COnEndScrollCallback callback) {
-        this.endScrollCallback = callback;
-    }
-
     @Override
     public void onTypeChanged(CPDFAnnotation.Type type) {
         if (pdfViewFocusedListenerList != null) {
@@ -467,8 +476,10 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
 
     @Override
     public void onTapMainDocArea() {
-        if (onTapMainDocAreaCallback != null) {
-            onTapMainDocAreaCallback.onTapMainDocArea();
+        if (readerViewCallbacks != null) {
+            for (CPDFIReaderViewCallback readerViewCallback : readerViewCallbacks) {
+                readerViewCallback.onTapMainDocArea();
+            }
         }
     }
 
@@ -481,13 +492,20 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
         if (indicatorView != null) {
             indicatorView.setCurrentPageIndex(pageIndex);
         }
+        if (readerViewCallbacks != null) {
+            for (CPDFIReaderViewCallback readerViewCallback : readerViewCallbacks) {
+                readerViewCallback.onMoveToChild(pageIndex);
+            }
+        }
     }
 
     @Override
     public void onEndScroll() {
         hidePageIndicator();
-        if (endScrollCallback != null) {
-            endScrollCallback.onEndScrollCallback();
+        if (readerViewCallbacks != null) {
+            for (CPDFIReaderViewCallback readerViewCallback : readerViewCallbacks) {
+                readerViewCallback.onEndScroll();
+            }
         }
     }
 
@@ -499,11 +517,20 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
             isScrolling = true;
             showPageIndicator();
         }
+        if (readerViewCallbacks != null) {
+            for (CPDFIReaderViewCallback readerViewCallback : readerViewCallbacks) {
+                readerViewCallback.onScrolling();
+            }
+        }
     }
 
     @Override
     public void onRecordLastJumpPageNum(int i) {
-
+        if (readerViewCallbacks != null) {
+            for (CPDFIReaderViewCallback readerViewCallback : readerViewCallbacks) {
+                readerViewCallback.onRecordLastJumpPageNum(i);
+            }
+        }
     }
 
     private void initCPDFSliderBar() {
@@ -609,8 +636,8 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
         pdfViewFocusedListenerList.add(listener);
     }
 
-    public void setOnTapMainDocAreaCallback(OnTapMainDocAreaCallback onTapMainDocAreaCallback) {
-        this.onTapMainDocAreaCallback = onTapMainDocAreaCallback;
+    public void addReaderViewCallback(CPDFIReaderViewCallback callback){
+        this.readerViewCallbacks.add(callback);
     }
 
     public void enablePageIndicator(boolean enablePageIndicator) {
@@ -639,8 +666,9 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
         return cpdfConfiguration;
     }
 
-    public interface OnTapMainDocAreaCallback {
-        void onTapMainDocArea();
+    public void setSaveCallback(COnSaveCallback saveGlobalCallback, COnSaveError error) {
+        this.saveGlobalCallback = saveGlobalCallback;
+        this.saveGlobalErrorCallback = error;
     }
 
     public interface COnSaveCallback {
@@ -652,11 +680,8 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
         void error(Exception e);
     }
 
-    public interface COnEndScrollCallback {
-        void onEndScrollCallback();
-    }
-
     public interface COnOpenPdfFinishCallback {
         void onOpenPdfFinishCallback();
     }
+
 }

+ 11 - 5
ContentEditor/src/main/java/com/compdfkit/contenteditor/PDFEditSampleActivity.java

@@ -39,6 +39,7 @@ import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CAnnotStyle;
 import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CStyleDialogFragment;
 import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CStyleType;
 import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.manager.CStyleManager;
+import com.compdfkit.tools.common.views.pdfview.CPDFIReaderViewCallback;
 import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
 import com.compdfkit.tools.viewer.pdfsearch.CSearchResultDialogFragment;
 import com.compdfkit.ui.reader.CPDFReaderView;
@@ -100,8 +101,16 @@ public class PDFEditSampleActivity extends CBasicPDFActivity {
             binding.pdfView.openPDF(filePath);
             binding.pdfEditToolBar.setEditMode(true);
         });
-        binding.pdfView.setOnTapMainDocAreaCallback(() -> {
-            screenManager.fillScreenChange();
+        binding.pdfView.addReaderViewCallback(new CPDFIReaderViewCallback(){
+            @Override
+            public void onTapMainDocArea() {
+                screenManager.fillScreenChange();
+            }
+
+            @Override
+            public void onEndScroll() {
+                binding.pdfEditToolBar.updateUndoRedo();
+            }
         });
         binding.pdfView.getCPdfReaderView().setMinScaleEnable(false);
         registerFormHelper(binding.pdfView);
@@ -263,9 +272,6 @@ public class PDFEditSampleActivity extends CBasicPDFActivity {
                 AnnotationsConfig.AnnotationTools.Undo,
                 AnnotationsConfig.AnnotationTools.Redo
         ));
-        binding.pdfView.setEndScrollCallback(() -> {
-            binding.pdfEditToolBar.updateUndoRedo();
-        });
     }
 
     private void selectDocument() {

+ 6 - 2
DigitalSignature/src/main/java/com/compdfkit/digitalsignature/PDFSignaturesSampleActivity.java

@@ -32,6 +32,7 @@ import com.compdfkit.tools.common.utils.window.CPopupMenuWindow;
 import com.compdfkit.tools.common.views.pdfbota.CPDFBOTA;
 import com.compdfkit.tools.common.views.pdfbota.CPDFBotaDialogFragment;
 import com.compdfkit.tools.common.views.pdfbota.CPDFBotaFragmentTabs;
+import com.compdfkit.tools.common.views.pdfview.CPDFIReaderViewCallback;
 import com.compdfkit.tools.common.views.pdfview.CPDFViewCtrl;
 import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
 import com.compdfkit.tools.signature.CertificateDigitalDatas;
@@ -85,8 +86,11 @@ public class PDFSignaturesSampleActivity extends CBasicPDFActivity {
             binding.pdfView.openPDF(filePath);
         });
         resetContextMenu(binding.pdfView, CPreviewMode.Signature);
-        binding.pdfView.setOnTapMainDocAreaCallback(() -> {
-            screenStatusManager.fillScreenChange();
+        binding.pdfView.addReaderViewCallback(new CPDFIReaderViewCallback(){
+            @Override
+            public void onTapMainDocArea() {
+                screenStatusManager.fillScreenChange();
+            }
         });
         binding.pdfView.getCPdfReaderView().setMinScaleEnable(false);
         registerSignaturesHelper(binding.pdfView);

+ 6 - 2
DocsEditor/src/main/java/com/compdfkit/docseditor/MainActivity.java

@@ -18,6 +18,7 @@ import com.compdfkit.tools.common.utils.window.CPopupMenuWindow;
 import com.compdfkit.tools.common.views.pdfbota.CPDFBOTA;
 import com.compdfkit.tools.common.views.pdfbota.CPDFBotaDialogFragment;
 import com.compdfkit.tools.common.views.pdfbota.CPDFBotaFragmentTabs;
+import com.compdfkit.tools.common.views.pdfview.CPDFIReaderViewCallback;
 import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
 import com.compdfkit.tools.docseditor.pdfpageedit.CPDFPageEditDialogFragment;
 import com.compdfkit.tools.viewer.pdfsearch.CSearchResultDialogFragment;
@@ -81,8 +82,11 @@ public class MainActivity extends CBasicPDFActivity {
             binding.pdfView.openPDF(filePath);
             setPreviewMode(CPreviewMode.Viewer);
         });
-        binding.pdfView.setOnTapMainDocAreaCallback(() -> {
-            screenManager.fillScreenChange();
+        binding.pdfView.addReaderViewCallback(new CPDFIReaderViewCallback(){
+            @Override
+            public void onTapMainDocArea() {
+                screenManager.fillScreenChange();
+            }
         });
     }
 

+ 7 - 3
Forms/src/main/java/com/compdfkit/forms/PDFFormSampleActivity.java

@@ -25,6 +25,7 @@ import com.compdfkit.tools.common.utils.window.CPopupMenuWindow;
 import com.compdfkit.tools.common.views.pdfbota.CPDFBOTA;
 import com.compdfkit.tools.common.views.pdfbota.CPDFBotaDialogFragment;
 import com.compdfkit.tools.common.views.pdfbota.CPDFBotaFragmentTabs;
+import com.compdfkit.tools.common.views.pdfview.CPDFIReaderViewCallback;
 import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
 import com.compdfkit.tools.viewer.pdfsearch.CSearchResultDialogFragment;
 import com.compdfkit.ui.proxy.form.CPDFComboboxWidgetImpl;
@@ -85,10 +86,13 @@ public class PDFFormSampleActivity extends CBasicPDFActivity {
         binding.pdfView.getCPdfReaderView().setFormPreviewPaint(paint);
         binding.pdfView.setViewMode(CPDFReaderView.ViewMode.FORM);
         resetContextMenu(binding.pdfView, CPreviewMode.Form);
-        binding.pdfView.setOnTapMainDocAreaCallback(() -> {
-            //Use the CFillScreenManager.class to manage fullscreen switching.
-            screenManager.fillScreenChange();
+        binding.pdfView.addReaderViewCallback(new CPDFIReaderViewCallback(){
+            @Override
+            public void onTapMainDocArea() {
+                screenManager.fillScreenChange();
+            }
         });
+
         binding.pdfView.getCPdfReaderView().setPdfAddAnnotCallback((cpdfPageView, cpdfBaseAnnot) -> {
             // Annotation creation completed listener, you can use cpdfBaseAnnot.getAnnotType() to determine the type of the added annotation
             if (cpdfBaseAnnot instanceof CPDFListboxWidgetImpl) {

+ 6 - 2
Viewer/src/main/java/com/compdfkit/viewer/PDFViewerSampleActivity.java

@@ -28,6 +28,7 @@ import com.compdfkit.tools.common.utils.window.CPopupMenuWindow;
 import com.compdfkit.tools.common.views.pdfbota.CPDFBOTA;
 import com.compdfkit.tools.common.views.pdfbota.CPDFBotaDialogFragment;
 import com.compdfkit.tools.common.views.pdfbota.CPDFBotaFragmentTabs;
+import com.compdfkit.tools.common.views.pdfview.CPDFIReaderViewCallback;
 import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
 import com.compdfkit.tools.viewer.pdfsearch.CSearchResultDialogFragment;
 import com.compdfkit.ui.reader.CPDFReaderView;
@@ -71,8 +72,11 @@ public class PDFViewerSampleActivity extends CBasicPDFActivity {
             binding.pdfView.openPDF(filePath);
         });
         resetContextMenu(binding.pdfView, CPreviewMode.Viewer);
-        binding.pdfView.setOnTapMainDocAreaCallback(() -> {
-            screenStatusManager.fillScreenChange();
+        binding.pdfView.addReaderViewCallback(new CPDFIReaderViewCallback(){
+            @Override
+            public void onTapMainDocArea() {
+                screenStatusManager.fillScreenChange();
+            }
         });
         binding.pdfView.getCPdfReaderView().setMinScaleEnable(false);
         binding.pdfView.getCPdfReaderView().getAnnotImplRegistry().registImpl(CPDFTextAnnotation.class, CPDFtextAnnotImpl.class);

+ 3 - 3
config.gradle

@@ -3,10 +3,10 @@ ext {
             COMPILESDK: 33,
             MINSDK: 21,
             TARGETSDK: 33,
-            VERSIONCODE: 1012
+            VERSIONCODE: 1013
     ]
     sdk = [
-            COMPDFKIT_SDK_VERSION : "2.0.3",
-            COMPDFKIT_SDK_BUILD_TAG : "build_beta_2.0.3_f95eee300_202404241139"
+            COMPDFKIT_SDK_VERSION : "2.1.0",
+            COMPDFKIT_SDK_BUILD_TAG : "build_beta_2.1.0_f95eee300_202404241139"
     ]
 }