Browse Source

PDFTool(Android) - 1.补充部分UI扩展性

liuxiaolong 1 year ago
parent
commit
b82b3cdba6

+ 59 - 1
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/annotation/pdfannotationbar/CAnnotationToolbar.java

@@ -17,6 +17,7 @@ import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.widget.FrameLayout;
 
+import androidx.annotation.DrawableRes;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.appcompat.widget.AppCompatImageView;
@@ -31,6 +32,7 @@ import com.compdfkit.tools.annotation.pdfannotationbar.adapter.CPDFAnnotationToo
 import com.compdfkit.tools.annotation.pdfannotationbar.bean.CAnnotToolBean;
 import com.compdfkit.tools.annotation.pdfannotationbar.data.CAnnotationToolDatas;
 import com.compdfkit.tools.common.interfaces.COnAnnotationChangeListener;
+import com.compdfkit.tools.common.utils.CLog;
 import com.compdfkit.tools.common.utils.viewutils.CViewUtils;
 import com.compdfkit.tools.common.views.pdfproperties.CAnnotationType;
 import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CAnnotStyle;
@@ -42,6 +44,10 @@ import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.manager.CStyleMan
 import com.compdfkit.tools.common.views.pdfview.CPDFViewCtrl;
 import com.compdfkit.ui.proxy.attach.IInkDrawCallback;
 
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
 public class CAnnotationToolbar extends FrameLayout {
 
     private RecyclerView rvAnnotationList;
@@ -52,7 +58,7 @@ public class CAnnotationToolbar extends FrameLayout {
 
     private AppCompatImageView ivRedo;
 
-    private CPDFAnnotationToolListAdapter toolListAdapter;
+    public CPDFAnnotationToolListAdapter toolListAdapter;
 
     private CPDFViewCtrl pdfView;
 
@@ -272,4 +278,56 @@ public class CAnnotationToolbar extends FrameLayout {
     public void setAnnotationChangeListener(COnAnnotationChangeListener annotationChangeListener) {
         this.annotationChangeListener = annotationChangeListener;
     }
+
+    public AppCompatImageView getSettingButton() {
+        return ivSetting;
+    }
+
+    public AppCompatImageView getRedoButton() {
+        return ivRedo;
+    }
+
+    public AppCompatImageView getUndoButton() {
+        return ivUndo;
+    }
+
+    public void setSettingImageResource(@DrawableRes int drawableRes){
+        ivSetting.setImageResource(drawableRes);
+        ivSetting.setImageTintList(null);
+    }
+
+    public void setRedoImageResource(@DrawableRes int drawableRes){
+        ivRedo.setImageResource(drawableRes);
+        ivRedo.setImageTintList(null);
+    }
+
+    public void setUndoImageResource(@DrawableRes int drawableRes){
+        ivUndo.setImageResource(drawableRes);
+        ivUndo.setImageTintList(null);
+    }
+
+    public void setAnnotationList(List<CAnnotToolBean> list){
+        toolListAdapter.setList(list);
+    }
+
+    public void setAnnotationList(CAnnotationType... types){
+        if (pdfView == null){
+            CLog.e("ComPDFKit_Tools", "CAnnotationToolbar.setAnnotationList(), pdfView cannot be null");
+            return;
+        }
+        if (toolListAdapter == null){
+            CLog.e("ComPDFKit_Tools", "CAnnotationToolbar.toolListAdapter, toolListAdapter cannot be null");
+            return;
+        }
+        List<CAnnotationType> typeList = Arrays.asList(types);
+        List<CAnnotToolBean> list = CAnnotationToolDatas.getAnnotationList(pdfView);
+        for (int i = list.size() - 1; i >= 0; i--) {
+            CAnnotToolBean bean = list.get(i);
+            if (!typeList.contains(bean.getType())) {
+                list.remove(i);
+            }
+        }
+        toolListAdapter.setList(list);
+    }
+
 }

+ 22 - 8
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/views/pdfview/CPDFViewCtrl.java

@@ -140,6 +140,7 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
 
     private List<OnFocusedTypeChangedListener> pdfViewFocusedListenerList = new ArrayList<>();
 
+
     private Runnable hideIndicatorRunnable = () -> {
         if (pageIndicatorAnimator != null) {
             isScrolling = false;
@@ -246,26 +247,30 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
      * @param pdfFilePath The file path of the PDF file to be opened.
      */
     public void openPDF(String pdfFilePath) {
+        openPDF(pdfFilePath, null);
+    }
+
+    public void openPDF(String pdfFilePath, String password){
         // Create a new instance of the CPDFDocument class, passing in the current context.
         CPDFDocument cpdfDocument = new CPDFDocument(getContext());
         // Attempt to open the PDF file at the given file path using the open method of the CPDFDocument class.
-        CPDFDocument.PDFDocumentError pdfDocumentError = cpdfDocument.open(pdfFilePath);
+        CPDFDocument.PDFDocumentError pdfDocumentError = cpdfDocument.open(pdfFilePath, password);
         setPDFDocument(cpdfDocument, pdfFilePath, pdfDocumentError, null);
     }
 
     public void openPDF(Uri pdfUri) {
-        // Create a new instance of the CPDFDocument class, passing in the current context.
-        CPDFDocument cpdfDocument = new CPDFDocument(getContext());
-        // Attempt to open the PDF file at the given file path using the open method of the CPDFDocument class.
-        CPDFDocument.PDFDocumentError pdfDocumentError = cpdfDocument.open(pdfUri);
-        setPDFDocument(cpdfDocument, pdfUri, pdfDocumentError, null);
+        openPDF(pdfUri, null);
     }
 
-    public void openPDF(Uri pdfUri, COnOpenPdfFinishCallback openPdfFinishCallback) {
+    public void openPDF(Uri pdfUri, String password){
+        openPDF(pdfUri, password, null);
+    }
+
+    public void openPDF(Uri pdfUri, String password, COnOpenPdfFinishCallback openPdfFinishCallback) {
         // Create a new instance of the CPDFDocument class, passing in the current context.
         CPDFDocument cpdfDocument = new CPDFDocument(getContext());
         // Attempt to open the PDF file at the given file path using the open method of the CPDFDocument class.
-        CPDFDocument.PDFDocumentError pdfDocumentError = cpdfDocument.open(pdfUri);
+        CPDFDocument.PDFDocumentError pdfDocumentError = cpdfDocument.open(pdfUri, password);
         setPDFDocument(cpdfDocument, pdfUri, pdfDocumentError, openPdfFinishCallback);
     }
 
@@ -564,6 +569,15 @@ public class CPDFViewCtrl extends ConstraintLayout implements IReaderViewCallbac
         this.onTapMainDocAreaCallback = onTapMainDocAreaCallback;
     }
 
+    public void enablePageIndicator(boolean enablePageIndicator) {
+        this.enablePageIndicator = enablePageIndicator;
+        addPageIndicator();
+    }
+
+    public void enableSliderBar(boolean enableSliderBar) {
+        this.enableSliderBar = enableSliderBar;
+        initCPDFSliderBar();
+    }
 
     public interface OnTapMainDocAreaCallback {
         void onTapMainDocArea();

+ 52 - 0
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/forms/pdfformbar/CFormToolbar.java

@@ -15,7 +15,9 @@ import android.os.Handler;
 import android.os.Looper;
 import android.util.AttributeSet;
 import android.widget.FrameLayout;
+import android.widget.LinearLayout;
 
+import androidx.annotation.DrawableRes;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.appcompat.widget.AppCompatImageView;
@@ -34,6 +36,9 @@ import com.compdfkit.tools.forms.pdfformbar.bean.CFormToolBean;
 import com.compdfkit.tools.forms.pdfformbar.data.CFormToolDatas;
 import com.compdfkit.ui.contextmenu.IContextMenuShowListener;
 
+import java.util.Arrays;
+import java.util.List;
+
 public class CFormToolbar extends FrameLayout {
 
     private RecyclerView rvFormList;
@@ -46,6 +51,8 @@ public class CFormToolbar extends FrameLayout {
 
     private CPDFViewCtrl pdfView;
 
+    private LinearLayout llFormTool;
+
     private FragmentManager fragmentManager;
 
     private COnFormChangeListener onFormChangeListener;
@@ -70,6 +77,7 @@ public class CFormToolbar extends FrameLayout {
         rvFormList = findViewById(R.id.rv_form);
         ivUndo = findViewById(R.id.iv_form_attr_undo);
         ivRedo = findViewById(R.id.iv_form_attr_redo);
+        llFormTool = findViewById(R.id.ll_form_attr);
         toolListAdapter = new CPDFFormToolListAdapter();
         rvFormList.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
         rvFormList.setAdapter(toolListAdapter);
@@ -170,4 +178,48 @@ public class CFormToolbar extends FrameLayout {
     public void setOnFormChangeListener(COnFormChangeListener onFormChangeListener) {
         this.onFormChangeListener = onFormChangeListener;
     }
+
+    public AppCompatImageView getRedoButton() {
+        return ivRedo;
+    }
+
+    public AppCompatImageView getUndoButton() {
+        return ivUndo;
+    }
+
+    public void setRedoImageResource(@DrawableRes int drawableRes){
+        ivRedo.setImageResource(drawableRes);
+    }
+
+    public void setUndoImageResource(@DrawableRes int drawableRes){
+        ivRedo.setImageResource(drawableRes);
+    }
+
+    public void setFormList(List<CFormToolBean> list){
+        toolListAdapter.setList(list);
+    }
+
+    public void setFormList(CPDFWidget.WidgetType... types){
+        if (pdfView == null){
+            CLog.e("ComPDFKit_Tools", "CFormToolbar.setFormList(), pdfView cannot be null");
+            return;
+        }
+        if (toolListAdapter == null){
+            CLog.e("ComPDFKit_Tools", "CFormToolbar.toolListAdapter, toolListAdapter cannot be null");
+            return;
+        }
+        List<CPDFWidget.WidgetType> typeList = Arrays.asList(types);
+        List<CFormToolBean> list = CFormToolDatas.getFormList(pdfView);
+        for (int i = list.size() - 1; i >= 0; i--) {
+            CFormToolBean bean = list.get(i);
+            if (!typeList.contains(bean.getType())) {
+                list.remove(i);
+            }
+        }
+        toolListAdapter.setList(list);
+    }
+
+    public void showUndoRedo(boolean show){
+        llFormTool.setVisibility(show ? VISIBLE : GONE);
+    }
 }

+ 17 - 8
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/viewer/pdfsearch/CSearchToolbar.java

@@ -40,6 +40,9 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
     Lock lock = new ReentrantLock();
 
     private AsyncTask<Void, Void, List<CSearchTextInfo>> searchTask;
+    private ImageView ivSearchResultList;
+
+    private boolean enableSearchResultList = true;
 
     public CSearchToolbar(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -62,7 +65,7 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
         etSearchKeywords = findViewById(R.id.et_search_keywords);
         ImageView ivNext = findViewById(R.id.iv_search_next);
         ImageView ivPrevious = findViewById(R.id.iv_search_previous);
-        ImageView ivSearchResultList = findViewById(R.id.iv_search_list);
+        ivSearchResultList = findViewById(R.id.iv_search_list);
         tvComplete.setOnClickListener(this);
         ivNext.setOnClickListener(this);
         ivPrevious.setOnClickListener(this);
@@ -75,7 +78,9 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
                     boolean hasResult = list.size() > 0;
                     ivPrevious.setVisibility(hasResult ? VISIBLE : INVISIBLE);
                     ivNext.setVisibility(hasResult ? VISIBLE : INVISIBLE);
-                    ivSearchResultList.setVisibility(hasResult ? VISIBLE : INVISIBLE);
+                    if (enableSearchResultList){
+                        ivSearchResultList.setVisibility(hasResult ? VISIBLE : INVISIBLE);
+                    }
                     if (hasResult) {
                         CSearchTextInfo searchTextInfo = searchTextInfos.get(0);
                         pdfView.getCPdfReaderView().getTextSearcher().searchBegin(searchTextInfo.page, searchTextInfo.textRangeIndex);
@@ -187,12 +192,8 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
         }
     }
 
-    public void setExitSearchListener(OnExitSearchListener onExitSearchListener) {
-        this.onExitSearchListener = onExitSearchListener;
-    }
-
-    public void onSearchQueryResults(OnSearchResultListener searchResultListener) {
-        this.onSearchResultListener = searchResultListener;
+    public void enableSearchResultList(boolean enable){
+        enableSearchResultList = enable;
     }
 
     public void showKeyboard(){
@@ -207,6 +208,14 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
         }
     }
 
+    public void setExitSearchListener(OnExitSearchListener onExitSearchListener) {
+        this.onExitSearchListener = onExitSearchListener;
+    }
+
+    public void onSearchQueryResults(OnSearchResultListener searchResultListener) {
+        this.onSearchResultListener = searchResultListener;
+    }
+
     public interface OnSearchResultListener {
         void result(List<CSearchTextInfo> list);
     }

+ 1 - 1
ComPDFKit_Tools/src/main/res/layout/tools_search_keywords_toolbar.xml

@@ -46,7 +46,7 @@
         android:layout_marginEnd="6dp"
         android:background="@drawable/tools_common_oval_ripple"
         android:padding="6dp"
-        android:visibility="invisible"
+        android:visibility="gone"
         tools:visibility="visible"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"

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

@@ -69,7 +69,7 @@ public class PDFEditSampleActivity extends CBasicPDFActivity {
             CFileUtils.takeUriPermission(this, uri);
             binding.pdfEditToolBar.resetStatus();
             setPreviewMode(CPreviewMode.Edit);
-            binding.pdfView.openPDF(uri, () -> {
+            binding.pdfView.openPDF(uri, null, () -> {
                 binding.pdfEditToolBar.setEditMode(true);
             });
         }

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

@@ -10,6 +10,7 @@ import androidx.activity.result.ActivityResultLauncher;
 import androidx.annotation.NonNull;
 import androidx.core.content.ContextCompat;
 
+import com.compdfkit.core.annotation.form.CPDFWidget;
 import com.compdfkit.forms.databinding.FormPdfSampleActivityBinding;
 import com.compdfkit.tools.common.basic.activity.CBasicPDFActivity;
 import com.compdfkit.tools.common.utils.CFileUtils;
@@ -206,6 +207,7 @@ public class PDFFormSampleActivity extends CBasicPDFActivity {
             binding.pdfToolBar.setVisibility(View.VISIBLE);
             binding.pdfSearchToolBar.setVisibility(View.GONE);
         });
+        binding.pdfSearchToolBar.enableSearchResultList(false);
     }
 
     private void selectDocument() {
@@ -217,7 +219,7 @@ public class PDFFormSampleActivity extends CBasicPDFActivity {
             selectDocumentLauncher.launch(null);
             return;
         }
-        CAlertDialog alertDialog = CAlertDialog.newInstance(getString(com.compdfkit.tools.R.string.tools_save_title), getString(com.compdfkit.tools.R.string.tools_save_message));
+        CAlertDialog alertDialog = CAlertDialog.newInstance(getString(R.string.tools_save_title), getString(R.string.tools_save_message));
         alertDialog.setConfirmClickListener(v -> {
             //save pdf document
             binding.pdfView.savePDF((filePath, pdfUri) -> {

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

@@ -84,7 +84,7 @@ public class MainActivity extends CBasicPDFActivity {
             setPreviewMode(CPreviewMode.Viewer);
             binding.pdfToolBar.selectMode(CPreviewMode.Viewer);
             screenManager.changeWindowStatus(CPreviewMode.Viewer);
-            binding.pdfView.openPDF(uri, () -> {
+            binding.pdfView.openPDF(uri, null, () -> {
                 binding.editToolBar.setEditMode(false);
             });
         }
@@ -283,8 +283,8 @@ public class MainActivity extends CBasicPDFActivity {
             multiplePermissionResultLauncher.launch(STORAGE_PERMISSIONS, result -> {
                 if (CPermissionUtil.hasStoragePermissions(this)) {
                     selectDocument();
-                }else {
-                    if (!CPermissionUtil.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)){
+                } else {
+                    if (!CPermissionUtil.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                         showPermissionsRequiredDialog();
                     }
                 }
@@ -301,9 +301,9 @@ public class MainActivity extends CBasicPDFActivity {
             if (type == CAnnotationType.SOUND) {
                 if (!hasPermission(Manifest.permission.RECORD_AUDIO)) {
                     permissionResultLauncher.launch(Manifest.permission.RECORD_AUDIO, hasRecordAudioPermission -> {
-                        if (!hasRecordAudioPermission){
+                        if (!hasRecordAudioPermission) {
                             binding.pdfView.resetAnnotationType();
-                            if (!CPermissionUtil.shouldShowRequestPermissionRationale(this, Manifest.permission.RECORD_AUDIO)){
+                            if (!CPermissionUtil.shouldShowRequestPermissionRationale(this, Manifest.permission.RECORD_AUDIO)) {
                                 showPermissionsRequiredDialog();
                             }
                         }