Browse Source

PDFTools(Android) - 1.Bug修复

liuxiaolong 1 year ago
parent
commit
62081508d4

+ 1 - 1
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/utils/UriUtil.java

@@ -9,7 +9,7 @@ import android.os.Environment;
 import android.provider.DocumentsContract;
 import android.provider.MediaStore;
 
-public class UriUtil {
+public class CUriUtil {
 
 //     public String getRealPathFromURI(Uri contentUri) {
 //          String res = null;

+ 4 - 0
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/views/CPageEditBar.java

@@ -121,6 +121,10 @@ public class CPageEditBar extends FrameLayout implements View.OnClickListener{
         tvToolBarDone.setVisibility(show == true ? View.VISIBLE : View.GONE);
     }
 
+    public void enableDone(boolean enable){
+        tvToolBarDone.setEnabled(enable);
+    }
+
     /**
      * set left back icon resource
      *

+ 0 - 1
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/views/pdfview/CPDFViewCtrl.java

@@ -477,7 +477,6 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
 
     private void showPageIndicator() {
         if (pageIndicatorAnimator != null && indicatorView.getAlpha() != 1.0F) {
-            Log.e("页码","显示页码");
             isHiding = false;
             pageIndicatorAnimator.start();
         }

+ 36 - 11
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/pageedit/pdfpageedit/CPDFPageEditDialogFragment.java

@@ -94,6 +94,26 @@ public class CPDFPageEditDialogFragment extends BottomSheetDialogFragment {
         }
     });
 
+
+    private ActivityResultLauncher<Intent> insertDocumentLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+        if (result.getData() != null && result.getData().getData() != null) {
+            Uri fileUri = result.getData().getData();
+            CFileUtils.takeUriPermission(getContext(), fileUri);
+            CPDFDocument tempDocument = new CPDFDocument(getContext());
+            CPDFDocument.PDFDocumentError pdfDocumentError = tempDocument.open(fileUri);
+            if (pdfDocumentError == PDFDocumentErrorSuccess) {
+                showInsertPDFPageDialog(tempDocument);
+            } else if (pdfDocumentError == PDFDocumentErrorPassword) {
+                CVerifyPasswordDialogFragment verifyPasswordDialogFragment;
+                verifyPasswordDialogFragment = CVerifyPasswordDialogFragment.newInstance(tempDocument, fileUri);
+                verifyPasswordDialogFragment.setVerifyCompleteListener(document -> {
+                    showInsertPDFPageDialog(tempDocument);
+                });
+                verifyPasswordDialogFragment.show(getChildFragmentManager(), "verifyPwdDialog");
+            }
+        }
+    });
+
     public static CPDFPageEditDialogFragment newInstance() {
         return new CPDFPageEditDialogFragment();
     }
@@ -318,22 +338,27 @@ public class CPDFPageEditDialogFragment extends BottomSheetDialogFragment {
             insertDialogFragment.dismiss();
         });
         insertDialogFragment.setInsertPdfPageClickListener(view -> {
-            CInsertPdfPageDialogFragment pdfPageDialogFragment = CInsertPdfPageDialogFragment.newInstance();
-            pdfPageDialogFragment.initWithPDFView(pdfView);
-            pdfPageDialogFragment.setOnEditDoneCallback(() -> {
-                int[] pageNum = pdfPageDialogFragment.getInsertPagesArr();
-                if (pageNum != null && pageNum.length > 0) {
-                    editThumbnailFragment.setSelectPages(pageNum);
-                    editThumbnailFragment.scrollToPosition(pageNum[0]);
-                }
-                hasEdit = true;
-            });
-            pdfPageDialogFragment.show(getChildFragmentManager(), "pdf page");
+            insertDocumentLauncher.launch(CFileUtils.getContentIntent());
             insertDialogFragment.dismiss();
         });
         insertDialogFragment.show(getChildFragmentManager(), "insert page");
     }
 
+    private void showInsertPDFPageDialog(CPDFDocument document){
+        CInsertPdfPageDialogFragment pdfPageDialogFragment = CInsertPdfPageDialogFragment.newInstance();
+        pdfPageDialogFragment.initWithPDFView(pdfView);
+        pdfPageDialogFragment.setInsertDocument(document);
+        pdfPageDialogFragment.setOnEditDoneCallback(() -> {
+            int[] pageNum = pdfPageDialogFragment.getInsertPagesArr();
+            if (pageNum != null && pageNum.length > 0) {
+                editThumbnailFragment.setSelectPages(pageNum);
+                editThumbnailFragment.scrollToPosition(pageNum[0]);
+            }
+            hasEdit = true;
+        });
+        pdfPageDialogFragment.show(getChildFragmentManager(), "pdf page");
+    }
+
     private boolean replacePage(CPDFDocument selectDocument) {
         if (selectDocument == null) {
             return false;

+ 74 - 15
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/pageedit/pdfpageeditinsert/CInsertPdfPageDialogFragment.java

@@ -6,7 +6,9 @@ import static com.compdfkit.core.document.CPDFDocument.PDFDocumentError.PDFDocum
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
+import android.text.Editable;
 import android.text.TextUtils;
+import android.text.TextWatcher;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -25,7 +27,7 @@ import com.compdfkit.core.document.CPDFDocument;
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.common.utils.CFileUtils;
 import com.compdfkit.tools.common.utils.CToastUtil;
-import com.compdfkit.tools.common.utils.UriUtil;
+import com.compdfkit.tools.common.utils.CUriUtil;
 import com.compdfkit.tools.common.utils.dialog.CDialogFragmentUtil;
 import com.compdfkit.tools.common.utils.threadpools.CThreadPoolUtils;
 import com.compdfkit.tools.common.utils.viewutils.CViewUtils;
@@ -58,9 +60,7 @@ public class CInsertPdfPageDialogFragment extends BottomSheetDialogFragment impl
     private AppCompatEditText etToInputPageIndex;
 
     private CPageEditBar.OnEditDoneCallback onEditDoneCallback;
-    private Uri selectUri = null;
     private CPDFDocument selectDocument = null;
-
     private int[] insertPages = null;
     private final String selectPageRegex = "^(\\d+)(-\\d+)?([,,](\\d+)(-\\d+)?)*$";
     private ActivityResultLauncher<Intent> selectDocumentLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
@@ -71,21 +71,19 @@ public class CInsertPdfPageDialogFragment extends BottomSheetDialogFragment impl
             CPDFDocument tempDocument = new CPDFDocument(getContext());
             CPDFDocument.PDFDocumentError pdfDocumentError = tempDocument.open(fileUri);
             if (pdfDocumentError == PDFDocumentErrorSuccess) {
-                String name = UriUtil.getUriFileName(getContext(), fileUri);
+                String name = CUriUtil.getUriFileName(getContext(), fileUri);
                 if (!TextUtils.isEmpty(name)) {
                     tvFilename.setText(name);
                 }
-                selectUri = fileUri;
                 selectDocument = tempDocument;
             } else if (pdfDocumentError == PDFDocumentErrorPassword) {
                 CVerifyPasswordDialogFragment verifyPasswordDialogFragment;
                 verifyPasswordDialogFragment = CVerifyPasswordDialogFragment.newInstance(tempDocument, fileUri);
                 verifyPasswordDialogFragment.setVerifyCompleteListener(document -> {
-                    String name = UriUtil.getUriFileName(getContext(), fileUri);
+                    String name = CUriUtil.getUriFileName(getContext(), fileUri);
                     if (!TextUtils.isEmpty(name)) {
                         tvFilename.setText(name);
                     }
-                    selectUri = fileUri;
                     selectDocument = document;
                 });
                 verifyPasswordDialogFragment.show(getChildFragmentManager(), "verifyPwdDialog");
@@ -93,11 +91,15 @@ public class CInsertPdfPageDialogFragment extends BottomSheetDialogFragment impl
         }
     });
 
-    public static CInsertPdfPageDialogFragment newInstance(){
+    public static CInsertPdfPageDialogFragment newInstance() {
         return new CInsertPdfPageDialogFragment();
     }
 
-    public void initWithPDFView(CPDFViewCtrl pdfView){
+    public void setInsertDocument(CPDFDocument selectDocument) {
+        this.selectDocument = selectDocument;
+    }
+
+    public void initWithPDFView(CPDFViewCtrl pdfView) {
         this.pdfView = pdfView;
     }
 
@@ -110,7 +112,7 @@ public class CInsertPdfPageDialogFragment extends BottomSheetDialogFragment impl
     @Override
     public void onStart() {
         super.onStart();
-        if (!CViewUtils.isLandScape(getContext())){
+        if (!CViewUtils.isLandScape(getContext())) {
             CDialogFragmentUtil.setDimAmount(getDialog(), 0F);
         }
         BottomSheetBehavior<View> behavior = BottomSheetBehavior.from((View) getView().getParent());
@@ -157,6 +159,22 @@ public class CInsertPdfPageDialogFragment extends BottomSheetDialogFragment impl
                 CViewUtils.hideKeyboard(etFromInputPageIndex);
             }
         });
+        etFromInputPageIndex.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+                updateDoneBtnStatus();
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+
+            }
+        });
 
         etToInputPageIndex.setOnFocusChangeListener((view, b) -> {
             if (b) {
@@ -168,10 +186,26 @@ public class CInsertPdfPageDialogFragment extends BottomSheetDialogFragment impl
                 CViewUtils.hideKeyboard(etToInputPageIndex);
             }
         });
+        etToInputPageIndex.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+                updateDoneBtnStatus();
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+
+            }
+        });
 
         toolBar.setBackBtnClickListener(v -> dismiss());
         toolBar.setOnDoneClickCallback(() -> {
-            if (selectUri == null) {
+            if (selectDocument == null) {
                 Toast.makeText(getContext(), R.string.tools_page_edit_select_file_tips, Toast.LENGTH_LONG).show();
             } else {
                 boolean format = true;
@@ -195,14 +229,38 @@ public class CInsertPdfPageDialogFragment extends BottomSheetDialogFragment impl
         toolBar.showSelectButton(false);
         toolBar.showDoneButton(true);
         ivFileNameRight.setOnClickListener(this);
+
+        if (selectDocument != null) {
+            if (selectDocument.getUri() != null) {
+                tvFilename.setText(CUriUtil.getUriFileName(getContext(), selectDocument.getUri()));
+            } else if (selectDocument.getAbsolutePath() != null) {
+                String[] arr = selectDocument.getAbsolutePath().split("/");
+                if (arr != null && arr.length > 0) {
+                    tvFilename.setText(arr[arr.length - 1]);
+                }
+            }
+        }
+
+
         return rootView;
     }
 
+    private void updateDoneBtnStatus() {
+        boolean enable = true;
+        if (rbFromPageLocationSpecify.isChecked()) {
+            enable = !TextUtils.isEmpty(etFromInputPageIndex.getText()) && !TextUtils.isEmpty(etFromInputPageIndex.getText().toString().trim());
+        }
+        if (rbToPageLocationAfter.isChecked() || rbToPageLocationBefore.isChecked()) {
+            enable = !TextUtils.isEmpty(etToInputPageIndex.getText()) && !TextUtils.isEmpty(etToInputPageIndex.getText().toString().trim());
+        }
+        toolBar.enableDone(enable);
+    }
+
     private int[] getPageArr(String pageStr) {
         if (TextUtils.isEmpty(pageStr)) {
             return null;
         }
-        List<Integer> pageList= new ArrayList<>();
+        List<Integer> pageList = new ArrayList<>();
         int[] pageNum = null;
         String[] dotSplit = pageStr.split(",|,");
         if (dotSplit != null && dotSplit.length > 0) {
@@ -212,7 +270,7 @@ public class CInsertPdfPageDialogFragment extends BottomSheetDialogFragment impl
                     if (lineSplit == null) {
                         continue;
                     }
-                    if (lineSplit.length == 1 ) {
+                    if (lineSplit.length == 1) {
                         int page = -1;
                         try {
                             page = Integer.parseInt(lineSplit[0]);
@@ -278,7 +336,7 @@ public class CInsertPdfPageDialogFragment extends BottomSheetDialogFragment impl
             pageNums = getPageArr(etFromInputPageIndex.getText().toString());
         }
         for (int pageNum : pageNums) {
-            if (pageNum >= selectDocument.getPageCount()){
+            if (pageNum >= selectDocument.getPageCount()) {
                 CToastUtil.showLongToast(getContext(), R.string.tools_page_choose_skip_input_error);
                 return;
             }
@@ -301,7 +359,7 @@ public class CInsertPdfPageDialogFragment extends BottomSheetDialogFragment impl
             }
         }
         int pageCount = document.getPageCount();
-        if (insertPos > pageCount || insertPos <0){
+        if (insertPos > pageCount || insertPos < 0) {
             CToastUtil.showLongToast(getContext(), R.string.tools_page_choose_skip_input_error);
             return;
         }
@@ -358,6 +416,7 @@ public class CInsertPdfPageDialogFragment extends BottomSheetDialogFragment impl
                 CViewUtils.showKeyboard(etToInputPageIndex);
             }
         }
+        updateDoneBtnStatus();
     }
 
     public void setOnEditDoneCallback(CPageEditBar.OnEditDoneCallback callback) {

+ 0 - 1
ComPDFKit_Tools/src/main/res/layout/tools_pageedit_insert_pdf_page_dialog_fragment.xml

@@ -61,7 +61,6 @@
                     android:id="@+id/iv_tool_insert_page_filename"
                     style="@style/tools_edit_page_insertpage_cursize_style"
                     android:singleLine="true"
-                    android:text="@string/tools_select_a_file"
                     android:textColor="@color/tools_text_color_primary"
                     app:layout_constraintBottom_toBottomOf="parent"
                     app:layout_constraintEnd_toStartOf="@+id/iv_tool_insert_page_right"

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

@@ -30,7 +30,7 @@ import com.compdfkit.core.edit.CPDFEditManager;
 import com.compdfkit.tools.common.activity.CBasicActivity;
 import com.compdfkit.tools.common.contextmenu.CPDFContextMenuHelper;
 import com.compdfkit.tools.common.utils.CFileUtils;
-import com.compdfkit.tools.common.utils.UriUtil;
+import com.compdfkit.tools.common.utils.CUriUtil;
 import com.compdfkit.tools.common.utils.dialog.CAlertDialog;
 import com.compdfkit.tools.common.utils.task.CExtractAssetFileTask;
 import com.compdfkit.tools.common.utils.threadpools.CThreadPoolUtils;
@@ -305,7 +305,7 @@ public class PDFEditSampleActivity extends CBasicActivity {
                         continue;
                     }
                     if (pageView.getPageNum() == binding.pdfView.getCPdfReaderView().getPageNum()) {
-                        UriUtil util = new UriUtil();
+                        CUriUtil util = new CUriUtil();
                         boolean ret = pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.REPLACE, util.getPath(this, data.getData()));
                         if (ret == false) {
                             Toast.makeText(getApplicationContext(), "replace fail", Toast.LENGTH_LONG).show();
@@ -328,7 +328,7 @@ public class PDFEditSampleActivity extends CBasicActivity {
                         continue;
                     }
                     if (pageView.getPageNum() == binding.pdfView.getCPdfReaderView().getAddImagePage()) {
-                        UriUtil util = new UriUtil();
+                        CUriUtil util = new CUriUtil();
                         boolean ret = pageView.addEditImageArea(binding.pdfView.getCPdfReaderView().getAddImagePoint(), util.getPath(this, data.getData()));
                         if (ret == false) {
                             Toast.makeText(getApplicationContext(), "add fail", Toast.LENGTH_LONG).show();

+ 3 - 3
PDFViewer/src/main/java/com/compdfkit/pdfviewer/MainActivity.java

@@ -32,7 +32,7 @@ import com.compdfkit.pdfviewer.databinding.PdfSampleActivityBinding;
 import com.compdfkit.tools.common.activity.CBasicActivity;
 import com.compdfkit.tools.common.contextmenu.CPDFContextMenuHelper;
 import com.compdfkit.tools.common.utils.CFileUtils;
-import com.compdfkit.tools.common.utils.UriUtil;
+import com.compdfkit.tools.common.utils.CUriUtil;
 import com.compdfkit.tools.common.utils.annotation.CPDFAnnotationManager;
 import com.compdfkit.tools.common.utils.dialog.CAlertDialog;
 import com.compdfkit.tools.common.utils.task.CExtractAssetFileTask;
@@ -418,7 +418,7 @@ public class MainActivity extends CBasicActivity {
                     return;
                 }
                 if (pageView.getPageNum() == binding.pdfView.getCPdfReaderView().getPageNum()) {
-                    UriUtil util = new UriUtil();
+                    CUriUtil util = new CUriUtil();
                     boolean ret = pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.REPLACE, util.getPath(this, data.getData()));
                     if (ret == false) {
                         Toast.makeText(getApplicationContext(), "replace fail", Toast.LENGTH_LONG).show();
@@ -439,7 +439,7 @@ public class MainActivity extends CBasicActivity {
                     continue;
                 }
                 if (pageView.getPageNum() == binding.pdfView.getCPdfReaderView().getAddImagePage()) {
-                    UriUtil util = new UriUtil();
+                    CUriUtil util = new CUriUtil();
                     boolean ret = pageView.addEditImageArea(binding.pdfView.getCPdfReaderView().getAddImagePoint(), util.getPath(this, data.getData()));
                     if (ret == false) {
                         Toast.makeText(getApplicationContext(), "add fail", Toast.LENGTH_LONG).show();

+ 1 - 1
Viewer/src/main/java/com/compdfkit/viewer/CViewerScreenStatusManager.java

@@ -67,7 +67,7 @@ public class CViewerScreenStatusManager {
     }
 
     /**
-     * 退出全屏显示
+     * exit full screen
      */
     private void cancelFullScreen() {
         if (binding.pdfView.getContext() instanceof FragmentActivity) {

+ 1 - 1
config.gradle

@@ -2,7 +2,7 @@ ext {
     android = [
             COMPILESDK: 33,
             MINSDK: 21,
-            TARGETSDK: 31,
+            TARGETSDK: 33,
             VERSIONCODE: 1001
     ]
     sdk = [