Переглянути джерело

PDFtools(android) - aar增加area类型接口,多行的上下文菜单,透明度,

libai 1 рік тому
батько
коміт
100da130cd

BIN
compdfkit-repo/compdfkit-ui/ComPDFKit-UI.aar


BIN
compdfkit-repo/compdfkit/ComPDFKit.aar


+ 50 - 11
compdfkit-tools/src/main/java/com/compdfkit/tools/common/contextmenu/CEditImageContextMenuView.java

@@ -1,13 +1,20 @@
 package com.compdfkit.tools.common.contextmenu;
 
+import static com.compdfkit.ui.contextmenu.CPDFContextMenuShowHelper.ReplaceEditImageArea;
+
+import android.content.Intent;
 import android.graphics.RectF;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.Toast;
 
+import androidx.fragment.app.FragmentActivity;
+
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.common.contextmenu.interfaces.ContextMenuEditImageProvider;
+import com.compdfkit.tools.common.contextmenu.provider.ContextMenuMultipleLineView;
 import com.compdfkit.tools.common.contextmenu.provider.ContextMenuView;
+import com.compdfkit.ui.edit.CPDFEditTextSelections;
 import com.compdfkit.ui.reader.CPDFPageView;
 
 import java.io.File;
@@ -15,39 +22,71 @@ import java.io.File;
 public class CEditImageContextMenuView implements ContextMenuEditImageProvider {
     @Override
     public View createEditImageAreaContentView(CPDFContextMenuHelper helper, CPDFPageView pageView, LayoutInflater layoutInflater, RectF area) {
-        ContextMenuView menuView = new ContextMenuView(pageView.getContext());
-        menuView.addItem(R.string.tools_context_menu_image_rotate_left, v -> {
+        ContextMenuMultipleLineView menuView = new ContextMenuMultipleLineView(pageView.getContext());
+        menuView.setLineNumber(2);
+        menuView.addItem(R.string.tools_context_menu_image_rotate_left, 0, v -> {
             pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.ROTATE, -90.0f);
         } );
-        menuView.addItem(R.string.tools_context_menu_image_rotate_right, v -> {
+        menuView.addItem(R.string.tools_context_menu_image_rotate_right, 0, v -> {
             pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.ROTATE, 90.0f);
         } );
-        menuView.addItem(R.string.tools_context_menu_image_replace, v -> {
-
+        menuView.addItem(R.string.tools_context_menu_image_replace, 0, v -> {
+            if (helper.getReaderView().getContext() instanceof FragmentActivity) {
+                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
+                intent.setType("image/*");
+                intent.addCategory(Intent.CATEGORY_OPENABLE);
+                ((FragmentActivity) helper.getReaderView().getContext()).startActivityForResult(intent, ReplaceEditImageArea);
+            }
         } );
-        menuView.addItem(R.string.tools_context_menu_image_crop, v -> {
+        menuView.addItem(R.string.tools_context_menu_image_crop, 0, v -> {
             pageView.setCropCallback(rect -> {
             });
             pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.ENTER_CROP, null);
             helper.dismissContextMenu();
         } );
-        menuView.addItem(R.string.tools_context_menu_image_transparancy, v -> {
 
+        menuView.addSecondView();
+
+        View view = LayoutInflater.from(pageView.getContext()).inflate(R.layout.tools_context_menu_image_item_layout, null);
+        view.setOnClickListener(v-> {
+            menuView.showSecondView(false);
+        });
+        menuView.addItemToSecondView(view);
+
+        menuView.addItemToSecondView(R.string.tools_context_menu_transparacy_0, v -> {
+            pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.TRANCPARENCY, 0f);
+        });
+        menuView.addItemToSecondView(R.string.tools_context_menu_transparacy_25, v -> {
+            pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.TRANCPARENCY, 0.25f);
+        });
+        menuView.addItemToSecondView(R.string.tools_context_menu_transparacy_50, v -> {
+            pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.TRANCPARENCY, 0.50f);
+        });
+        menuView.addItemToSecondView(R.string.tools_context_menu_transparacy_75, v -> {
+            pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.TRANCPARENCY, 0.75f);
+        });
+        menuView.addItemToSecondView(R.string.tools_context_menu_transparacy_100, v -> {
+            pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.TRANCPARENCY, 1f);
+        });
+
+        menuView.addItem(R.string.tools_context_menu_image_transparancy,1, v -> {
+            menuView.showSecondView(true);
         } );
-        menuView.addItem(R.string.tools_context_menu_image_horizental_mirror, v -> {
+
+        menuView.addItem(R.string.tools_context_menu_image_horizental_mirror, 1,v -> {
             pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.HORIZENTAL_MIRROR, null);
         } );
-        menuView.addItem(R.string.tools_context_menu_image_vertical_mirror, v -> {
+        menuView.addItem(R.string.tools_context_menu_image_vertical_mirror, 1,v -> {
             pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.VERTICLE_MIRROR, null);
         } );
-        menuView.addItem(R.string.tools_context_menu_image_extract, v -> {
+        menuView.addItem(R.string.tools_context_menu_image_extract, 1,v -> {
             String sdPath = pageView.getContext().getFilesDir().getAbsolutePath();
             File file = new File(sdPath, System.currentTimeMillis() + ".png");
             pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.EXTRACT_IMAGE, file.getAbsolutePath());
             helper.dismissContextMenu();
             Toast.makeText(pageView.getContext(), "save finish:"+file.getAbsolutePath(), Toast.LENGTH_LONG).show();
         } );
-        menuView.addItem(R.string.tools_context_menu_image_delete, v -> {
+        menuView.addItem(R.string.tools_context_menu_image_delete, 1,v -> {
             pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.DELETE, null);
             helper.dismissContextMenu();
         } );

+ 60 - 23
compdfkit-tools/src/main/java/com/compdfkit/tools/common/contextmenu/CEditTextContextMenuView.java

@@ -22,6 +22,7 @@ import androidx.fragment.app.FragmentActivity;
 import com.compdfkit.core.edit.CPDFEditTextArea;
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.common.contextmenu.interfaces.ContextMenuEditTextProvider;
+import com.compdfkit.tools.common.contextmenu.provider.ContextMenuMultipleLineView;
 import com.compdfkit.tools.common.contextmenu.provider.ContextMenuView;
 import com.compdfkit.tools.common.views.pdfstyle.CAnnotStyle;
 import com.compdfkit.tools.common.views.pdfstyle.CStyleType;
@@ -33,25 +34,24 @@ import com.compdfkit.ui.edit.CPDFEditTextSelections;
 import com.compdfkit.ui.reader.CPDFPageView;
 import com.compdfkit.ui.utils.CPDFTextUtils;
 
-import java.util.concurrent.atomic.AtomicReference;
-
 public class CEditTextContextMenuView implements ContextMenuEditTextProvider {
 
     @Override
     public View createEditTextAreaContentView(CPDFContextMenuHelper helper, CPDFPageView pageView, LayoutInflater layoutInflater, CPDFEditSelections cpdfEditSelections) {
-        ContextMenuView menuView = new ContextMenuView(pageView.getContext());
-        menuView.addItem(R.string.tools_context_menu_edit, v -> {
+        ContextMenuMultipleLineView menuView = new ContextMenuMultipleLineView(pageView.getContext());
+        menuView.setLineNumber(1);
+        menuView.addItem(R.string.tools_context_menu_edit, 0, v -> {
             pageView.operateEditTextArea(CPDFPageView.EditTextAreaFuncType.EDIT);
         } );
-        menuView.addItem(R.string.tools_context_menu_copy, v -> {
+        menuView.addItem(R.string.tools_context_menu_copy, 0, v -> {
             pageView.operateEditTextArea(CPDFPageView.EditTextAreaFuncType.COPY);
             helper.dismissContextMenu();
         } );
-        menuView.addItem(R.string.tools_context_menu_cut, v -> {
+        menuView.addItem(R.string.tools_context_menu_cut, 0, v -> {
             pageView.operateEditTextArea(CPDFPageView.EditTextAreaFuncType.CUT);
             helper.dismissContextMenu();
         } );
-        menuView.addItem(R.string.tools_context_menu_attribute,v -> {
+        menuView.addItem(R.string.tools_context_menu_attribute, 0, v -> {
             CStyleManager styleManager = new CStyleManager(new CEditSelectionStyle(cpdfEditSelections, pageView));
             CAnnotStyle annotStyle = styleManager.getStyle(CStyleType.EDIT_TEXT);
             CEditStyleDialogFragment dialogFragment = CEditStyleDialogFragment.newInstance(annotStyle);
@@ -61,10 +61,46 @@ public class CEditTextContextMenuView implements ContextMenuEditTextProvider {
             }
             helper.dismissContextMenu();
         });
-        menuView.addItem(R.string.tools_context_menu_transparancy, v -> {
 
+        menuView.addSecondView();
+
+        View view = LayoutInflater.from(pageView.getContext()).inflate(R.layout.tools_context_menu_image_item_layout, null);
+        view.setOnClickListener(v-> {
+            menuView.showSecondView(false);
+        });
+        menuView.addItemToSecondView(view);
+
+        menuView.addItemToSecondView(R.string.tools_context_menu_transparacy_0, v -> {
+            CPDFEditTextSelections textSelections = (CPDFEditTextSelections) cpdfEditSelections;
+            textSelections.setTransparancy(0);
+            pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.ATTR);
+        });
+        menuView.addItemToSecondView(R.string.tools_context_menu_transparacy_25, v -> {
+            CPDFEditTextSelections textSelections = (CPDFEditTextSelections) cpdfEditSelections;
+            textSelections.setTransparancy(0.25f);
+            pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.ATTR);
+        });
+        menuView.addItemToSecondView(R.string.tools_context_menu_transparacy_50, v -> {
+            CPDFEditTextSelections textSelections = (CPDFEditTextSelections) cpdfEditSelections;
+            textSelections.setTransparancy(0.5f);
+            pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.ATTR);
+        });
+        menuView.addItemToSecondView(R.string.tools_context_menu_transparacy_75, v -> {
+            CPDFEditTextSelections textSelections = (CPDFEditTextSelections) cpdfEditSelections;
+            textSelections.setTransparancy(0.75f);
+            pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.ATTR);
+        });
+        menuView.addItemToSecondView(R.string.tools_context_menu_transparacy_100, v -> {
+            CPDFEditTextSelections textSelections = (CPDFEditTextSelections) cpdfEditSelections;
+            textSelections.setTransparancy(1f);
+            pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.ATTR);
+        });
+
+        menuView.addItem(R.string.tools_context_menu_transparancy, 0, v -> {
+            menuView.showSecondView(true);
         } );
-        menuView.addItem(R.string.tools_context_menu_delete, v -> {
+
+        menuView.addItem(R.string.tools_context_menu_delete, 0, v -> {
             pageView.operateEditTextArea(CPDFPageView.EditTextAreaFuncType.DELETE);
             helper.dismissContextMenu();
         } );
@@ -95,7 +131,8 @@ public class CEditTextContextMenuView implements ContextMenuEditTextProvider {
     float currentSize = 25;
     @Override
     public View createEditSelectTextContentView(CPDFContextMenuHelper helper, CPDFPageView pageView, LayoutInflater layoutInflater, CPDFEditSelections selections) {
-        ContextMenuView menuView = new ContextMenuView(pageView.getContext());
+        ContextMenuMultipleLineView menuView = new ContextMenuMultipleLineView(pageView.getContext());
+        menuView.setLineNumber(3);
         final CPDFEditTextSelections textSelections = (CPDFEditTextSelections) selections;
 
         final boolean isBold = textSelections.isBold();
@@ -106,56 +143,56 @@ public class CEditTextContextMenuView implements ContextMenuEditTextProvider {
             currentSize = 25;
         }
 
-        menuView.addItem(R.string.tools_context_menu_select_text_delete, v -> {
+        menuView.addItem(R.string.tools_context_menu_select_text_delete, 0,v -> {
             pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.DELETE);
         } );
-        menuView.addItem(R.string.tools_context_menu_select_text_cut, v -> {
+        menuView.addItem(R.string.tools_context_menu_select_text_cut, 0,v -> {
             pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.CUT);
         } );
-        menuView.addItem(R.string.tools_context_menu_select_text_copy, v -> {
+        menuView.addItem(R.string.tools_context_menu_select_text_copy, 0,v -> {
             pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.COPY);
         } );
-        menuView.addItem(isItalic == true ? R.string.tools_context_menu_select_text_uitalic : R.string.tools_context_menu_select_text_italic, v -> {
+        menuView.addItem(isItalic == true ? R.string.tools_context_menu_select_text_uitalic : R.string.tools_context_menu_select_text_italic, 0,v -> {
             textSelections.setItalic(!textSelections.isItalic());
             ((AppCompatTextView)v).setText(textSelections.isItalic() ? R.string.context_menu_edit_uitalic : R.string.context_menu_edit_italic);
             pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.ATTR);
         } );
-        menuView.addItem(isBold == true ? R.string.tools_context_menu_select_text_ubold : R.string.tools_context_menu_select_text_bold, v -> {
+        menuView.addItem(isBold == true ? R.string.tools_context_menu_select_text_ubold : R.string.tools_context_menu_select_text_bold, 0, v -> {
             textSelections.setBold(!textSelections.isBold());
             ((AppCompatTextView)v).setText(textSelections.isBold() ? R.string.context_menu_edit_ubold : R.string.context_menu_edit_bold);
             pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.ATTR);
         } );
-        menuView.addItem(R.string.tools_context_menu_select_text_red, v -> {
+        menuView.addItem(R.string.tools_context_menu_select_text_red, 1,v -> {
             textSelections.setFontColor(Color.RED);
             pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.ATTR);
         } );
-        menuView.addItem(R.string.tools_context_menu_select_text_yellow, v -> {
+        menuView.addItem(R.string.tools_context_menu_select_text_yellow, 1,v -> {
             textSelections.setFontColor(Color.YELLOW);
             pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.ATTR);
         } );
-        menuView.addItem(R.string.tools_context_menu_select_text_selectall, v -> {
+        menuView.addItem(R.string.tools_context_menu_select_text_selectall, 1,v -> {
             pageView.operateEditText(CPDFPageView.EditTextFuncType.SELECT_ALL);
         } );
 
-        menuView.addItem(R.string.tools_context_menu_select_text_font_dec, v -> {
+        menuView.addItem(R.string.tools_context_menu_select_text_font_dec, 1, v -> {
             currentSize--;
             textSelections.setFontSize(currentSize);
             pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.ATTR);
         } );
-        menuView.addItem(R.string.tools_context_menu_select_text_font_add, v -> {
+        menuView.addItem(R.string.tools_context_menu_select_text_font_add, 1, v -> {
             currentSize++;
             textSelections.setFontSize(currentSize);
             pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.ATTR);
         } );
-        menuView.addItem(R.string.tools_context_menu_select_text_courier, v -> {
+        menuView.addItem(R.string.tools_context_menu_select_text_courier, 2, v -> {
             textSelections.setFontFromNativeTrueTypeFont(CPDFEditTextArea.FontCourier);
             pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.ATTR);
         } );
-        menuView.addItem(R.string.tools_context_menu_select_text_helvetica, v -> {
+        menuView.addItem(R.string.tools_context_menu_select_text_helvetica, 2, v -> {
             textSelections.setFontFromNativeTrueTypeFont(CPDFEditTextArea.FontHelvtics);
             pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.ATTR);
         } );
-        menuView.addItem(R.string.tools_context_menu_select_text_roman, v -> {
+        menuView.addItem(R.string.tools_context_menu_select_text_roman, 2, v -> {
             textSelections.setFontFromNativeTrueTypeFont(CPDFEditTextArea.FontTimesRoman);
             pageView.operateEditTextSelect(CPDFPageView.EditTextSelectFuncType.ATTR);
         } );

+ 7 - 0
compdfkit-tools/src/main/java/com/compdfkit/tools/common/contextmenu/CPDFContextMenuHelper.java

@@ -43,6 +43,11 @@ import com.compdfkit.ui.reader.CPDFReaderView;
 public class CPDFContextMenuHelper extends CPDFContextMenuShowHelper {
 
     public ContextMenuProviderParams helperParams;
+    private CPDFPageView pageView;
+
+    public CPDFPageView getPageView() {
+        return pageView;
+    }
 
     public CPDFContextMenuHelper(CPDFViewCtrl pdfView, ContextMenuProviderParams params) {
         super(pdfView.getCPdfReaderView());
@@ -157,6 +162,7 @@ public class CPDFContextMenuHelper extends CPDFContextMenuShowHelper {
 
     @Override
     public View getEditImageAreaContentView(final CPDFPageView pageView, LayoutInflater layoutInflater, RectF area) {
+        this.pageView = pageView;
         if (helperParams.editImageProvider != null) {
             return helperParams.editImageProvider.createEditImageAreaContentView(this, pageView, layoutInflater,area);
         }
@@ -165,6 +171,7 @@ public class CPDFContextMenuHelper extends CPDFContextMenuShowHelper {
 
     @Override
     public View getCropImageAreaContentView(final CPDFPageView pageView, LayoutInflater layoutInflater) {
+        this.pageView = pageView;
         if (helperParams.editImageProvider != null) {
             return helperParams.editImageProvider.createGetCropImageAreaContentView(this, pageView, layoutInflater);
         }

+ 88 - 0
compdfkit-tools/src/main/java/com/compdfkit/tools/common/contextmenu/provider/ContextMenuMultipleLineView.java

@@ -0,0 +1,88 @@
+/**
+ * Copyright © 2014-2023 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.contextmenu.provider;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.LinearLayout;
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+import com.compdfkit.tools.R;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ContextMenuMultipleLineView extends LinearLayout {
+    Context mContext;
+    List<ContextMenuView> lineList = new ArrayList<>();
+    ContextMenuView secondView = null;
+    public ContextMenuMultipleLineView(Context context) {
+        this(context, null);
+    }
+
+    public ContextMenuMultipleLineView(Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public ContextMenuMultipleLineView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        mContext = context;
+        setOrientation(LinearLayout.VERTICAL);
+        setBackgroundResource(R.drawable.bg_context_menu_window);
+    }
+
+    public void setLineNumber(int number) {
+        for (int i = 0 ; i < number; i++) {
+            ContextMenuView view = new ContextMenuView(mContext);
+            lineList.add(view);
+            addView(view);
+        }
+    }
+
+    public ContextMenuMultipleLineView addItem(@StringRes int titleRes, int lineIndex, OnClickListener clickListener) {
+        if (lineIndex >= lineList.size()) {
+            return this;
+        }
+        lineList.get(lineIndex).addItem(titleRes, clickListener);
+        return this;
+    }
+
+    public void addSecondView() {
+        ContextMenuView view = new ContextMenuView(mContext);
+        addView(view);
+        secondView = view;
+        secondView.setGravity(Gravity.CENTER_VERTICAL);
+        secondView.setVisibility(View.GONE);
+    }
+
+    public ContextMenuMultipleLineView addItemToSecondView(@StringRes int titleRes, OnClickListener clickListener) {
+        if (secondView == null) {
+            return this;
+        }
+        secondView.addItem(titleRes, clickListener);
+        return this;
+    }
+
+    public ContextMenuMultipleLineView addItemToSecondView(View view){
+        secondView.addItem(view);
+        return this;
+    }
+
+    public void showSecondView(boolean show) {
+        if (secondView == null) {
+            return;
+        }
+        for (int i = 0; i < lineList.size(); i++) {
+            lineList.get(i).setVisibility(show == true ? View.GONE : View.VISIBLE);
+        }
+        secondView.setVisibility(show == true ? View.VISIBLE : View.GONE);
+    }
+}

+ 0 - 10
compdfkit-tools/src/main/java/com/compdfkit/tools/common/contextmenu/provider/ContextMenuView.java

@@ -53,14 +53,4 @@ public class ContextMenuView extends LinearLayout {
         addView(view);
         return this;
     }
-
-    public ContextMenuView addItem(String content, OnClickListener clickListener){
-        View view = LayoutInflater.from(getContext()).inflate(R.layout.tools_context_menu_item_layout, null);
-        AppCompatTextView textView = (AppCompatTextView) view;
-        textView.setId(View.generateViewId());
-        textView.setText(content);
-        textView.setOnClickListener(clickListener);
-        addView(view);
-        return this;
-    }
 }

+ 39 - 20
compdfkit-tools/src/main/java/com/compdfkit/tools/viewer/pdfproperty/CImagePropertyBottomSheetDialogFragment.java

@@ -1,9 +1,8 @@
-package com.compdfkit.tools.viewer.pdfproperty;
+package com.compdfkit.tools.edit;
 
 import android.content.Intent;
 import android.content.res.Configuration;
 import android.os.Bundle;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -11,28 +10,32 @@ import android.widget.SeekBar;
 import android.widget.Toast;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+
 import com.compdfkit.tools.R;
+import com.compdfkit.tools.common.contextmenu.CPDFContextMenuHelper;
 import com.compdfkit.tools.common.utils.UriUtil;
 import com.compdfkit.tools.common.utils.dialog.CDialogFragmentUtil;
 import com.compdfkit.tools.common.views.pdfstyle.CStyleUIParams;
 import com.compdfkit.tools.common.views.pdfview.CPDFViewCtrl;
-import com.compdfkit.tools.edit.CEditContextMenuHelper;
 import com.compdfkit.ui.contextmenu.IContextMenuShowListener;
 import com.compdfkit.ui.reader.CPDFPageView;
 import com.google.android.material.bottomsheet.BottomSheetBehavior;
 import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
 import java.io.File;
 
-public class CImagePropertyBottomSheetDialogFragment extends BottomSheetDialogFragment implements View.OnClickListener {
+public class CEditImagePropertyDialogFragment extends BottomSheetDialogFragment implements View.OnClickListener {
     private final int replaceImageRequestCode = 0;
     private CPDFViewCtrl pdfView;
     private View mContentView;
+    private androidx.appcompat.widget.AppCompatImageView ivPreview;
     private androidx.appcompat.widget.AppCompatImageView ivClose;
     private androidx.appcompat.widget.AppCompatImageView ivLeftRotate;
     private androidx.appcompat.widget.AppCompatImageView ivRightRotate;
     private androidx.appcompat.widget.AppCompatImageView ivHorizontalMirror;
     private androidx.appcompat.widget.AppCompatImageView ivVerticleMirror;
     private androidx.appcompat.widget.AppCompatSeekBar sbTransparancy;
+
+    private androidx.appcompat.widget.AppCompatTextView tvTransparancy;
     private androidx.appcompat.widget.AppCompatImageView ivReplace;
     private androidx.appcompat.widget.AppCompatImageView ivExport;
     private androidx.appcompat.widget.AppCompatImageView ivCrop;
@@ -74,15 +77,19 @@ public class CImagePropertyBottomSheetDialogFragment extends BottomSheetDialogFr
     }
 
     private void initView() {
+        ivPreview = mContentView.findViewById(R.id.style_preview);
         ivClose = mContentView.findViewById(R.id.iv_tool_bar_close);
         ivLeftRotate = mContentView.findViewById(R.id.iv_left_rotate);
         ivRightRotate = mContentView.findViewById(R.id.iv_right_rotate);
         ivHorizontalMirror = mContentView.findViewById(R.id.iv_horizontal_mirror);
         ivVerticleMirror = mContentView.findViewById(R.id.iv_verticle_mirror);
         sbTransparancy = mContentView.findViewById(R.id.sb_transparancy);
+        tvTransparancy = mContentView.findViewById(R.id.tv_transparancy);
         ivReplace = mContentView.findViewById(R.id.iv_replace);
         ivExport = mContentView.findViewById(R.id.iv_export);
         ivCrop = mContentView.findViewById(R.id.iv_crop);
+        ivHorizontalMirror.setSelected(false);
+        ivVerticleMirror.setSelected(false);
         ivClose.setOnClickListener(this);
         ivLeftRotate.setOnClickListener(this);
         ivRightRotate.setOnClickListener(this);
@@ -104,9 +111,11 @@ public class CImagePropertyBottomSheetDialogFragment extends BottomSheetDialogFr
 
             @Override
             public void onStopTrackingTouch(SeekBar seekBar) {
+                ivPreview.setAlpha(seekBar.getProgress() / 100.0f);
                 IContextMenuShowListener menuShowListener = pdfView.getCPdfReaderView().getContextMenuShowListener();
-                CEditContextMenuHelper menuHelper = (CEditContextMenuHelper)menuShowListener;
-                menuHelper.getCurrentPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.TRANCPARENCY, seekBar.getProgress() / 100.0f);
+                CPDFContextMenuHelper menuHelper = (CPDFContextMenuHelper)menuShowListener;
+                menuHelper.getPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.TRANCPARENCY, seekBar.getProgress() / 100.0f);
+                tvTransparancy.setText(seekBar.getProgress() + "");
             }
         });
     }
@@ -118,20 +127,30 @@ public class CImagePropertyBottomSheetDialogFragment extends BottomSheetDialogFr
             dismiss();
         } else if (id == R.id.iv_left_rotate) {
             IContextMenuShowListener menuShowListener = pdfView.getCPdfReaderView().getContextMenuShowListener();
-            CEditContextMenuHelper menuHelper = (CEditContextMenuHelper)menuShowListener;
-            menuHelper.getCurrentPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.ROTATE, -90.0f);
+            CPDFContextMenuHelper menuHelper = (CPDFContextMenuHelper)menuShowListener;
+            menuHelper.getPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.ROTATE, -90.0f);
+            ivPreview.setPivotX(ivPreview.getWidth()/2);
+            ivPreview.setPivotY(ivPreview.getHeight()/2);
+            ivPreview.setRotation(ivPreview.getRotation() - 90);
         } else if (id == R.id.iv_right_rotate) {
             IContextMenuShowListener menuShowListener = pdfView.getCPdfReaderView().getContextMenuShowListener();
-            CEditContextMenuHelper menuHelper = (CEditContextMenuHelper)menuShowListener;
-            menuHelper.getCurrentPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.ROTATE, 90.0f);
+            CPDFContextMenuHelper menuHelper = (CPDFContextMenuHelper)menuShowListener;
+            menuHelper.getPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.ROTATE, 90.0f);
+            ivPreview.setPivotX(ivPreview.getWidth()/2);
+            ivPreview.setPivotY(ivPreview.getHeight()/2);
+            ivPreview.setRotation(ivPreview.getRotation() + 90);
         } else if (id == R.id.iv_horizontal_mirror) {
             IContextMenuShowListener menuShowListener = pdfView.getCPdfReaderView().getContextMenuShowListener();
-            CEditContextMenuHelper menuHelper = (CEditContextMenuHelper)menuShowListener;
-            menuHelper.getCurrentPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.HORIZENTAL_MIRROR, null);
+            CPDFContextMenuHelper menuHelper = (CPDFContextMenuHelper)menuShowListener;
+            menuHelper.getPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.HORIZENTAL_MIRROR, null);
+            view.setSelected(!view.isSelected());
+            ivPreview.setScaleX(view.isSelected() ? -1 : 1);
         } else if (id == R.id.iv_verticle_mirror) {
             IContextMenuShowListener menuShowListener = pdfView.getCPdfReaderView().getContextMenuShowListener();
-            CEditContextMenuHelper menuHelper = (CEditContextMenuHelper)menuShowListener;
-            menuHelper.getCurrentPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.VERTICLE_MIRROR, null);
+            CPDFContextMenuHelper menuHelper = (CPDFContextMenuHelper)menuShowListener;
+            menuHelper.getPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.VERTICLE_MIRROR, null);
+            view.setSelected(!view.isSelected());
+            ivPreview.setScaleY(view.isSelected() ? -1 : 1);
         } else if (id == R.id.iv_replace) {
             Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
             intent.setType("image/*");
@@ -140,15 +159,15 @@ public class CImagePropertyBottomSheetDialogFragment extends BottomSheetDialogFr
             dismiss();
         } else if (id == R.id.iv_crop) {
             IContextMenuShowListener menuShowListener = pdfView.getCPdfReaderView().getContextMenuShowListener();
-            CEditContextMenuHelper menuHelper = (CEditContextMenuHelper)menuShowListener;
-            menuHelper.getCurrentPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.ENTER_CROP, null);
+            CPDFContextMenuHelper menuHelper = (CPDFContextMenuHelper)menuShowListener;
+            menuHelper.getPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.ENTER_CROP, null);
             dismiss();
         } else if (id == R.id.iv_export) {
             IContextMenuShowListener menuShowListener = pdfView.getCPdfReaderView().getContextMenuShowListener();
-            CEditContextMenuHelper menuHelper = (CEditContextMenuHelper)menuShowListener;
+            CPDFContextMenuHelper menuHelper = (CPDFContextMenuHelper)menuShowListener;
             String sdPath = getContext().getFilesDir().getAbsolutePath();
             File file = new File(sdPath, System.currentTimeMillis() + ".png");
-            menuHelper.getCurrentPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.EXTRACT_IMAGE, file.getAbsolutePath());
+            menuHelper.getPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.EXTRACT_IMAGE, file.getAbsolutePath());
             Toast.makeText(getContext(), "save finish", Toast.LENGTH_LONG).show();
         }
     }
@@ -157,8 +176,8 @@ public class CImagePropertyBottomSheetDialogFragment extends BottomSheetDialogFr
     public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
         IContextMenuShowListener menuShowListener = pdfView.getCPdfReaderView().getContextMenuShowListener();
-        CEditContextMenuHelper menuHelper = (CEditContextMenuHelper)menuShowListener;
+        CPDFContextMenuHelper menuHelper = (CPDFContextMenuHelper)menuShowListener;
         UriUtil util = new UriUtil();
-        menuHelper.getCurrentPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.REPLACE, util.getPath(getContext(), data.getData()));
+        menuHelper.getPageView().operateEditImageArea(CPDFPageView.EditImageFuncType.REPLACE, util.getPath(getContext(), data.getData()));
     }
 }

+ 8 - 0
compdfkit-tools/src/main/res/layout/tools_context_menu_image_item_layout.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.appcompat.widget.AppCompatImageView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/back"
+    android:layout_width="60dp"
+    android:layout_height="30dp"
+    android:foregroundGravity="center"
+    android:src="@drawable/tools_ic_back" />
+

+ 6 - 0
compdfkit-tools/src/main/res/values/tools_strings.xml

@@ -212,6 +212,12 @@
     <string name="tools_context_menu_image_crop_done">Done</string>
     <string name="tools_context_menu_image_crop_cancel">Cancel</string>
 
+    <string name="tools_context_menu_transparacy_0">0</string>
+    <string name="tools_context_menu_transparacy_25">0.25</string>
+    <string name="tools_context_menu_transparacy_50">0.5</string>
+    <string name="tools_context_menu_transparacy_75">0.75</string>
+    <string name="tools_context_menu_transparacy_100">1</string>
+
     <string name="tools_edit_image_property_rotate_tools">Tools</string>
     <string name="tools_context_menu_add_here">Add Here</string>
 </resources>

+ 11 - 14
edit-ctrl-demo/src/main/java/com/compdfkit/demo/edit/PDFEditSampleActivity.java

@@ -9,7 +9,6 @@
 
 package com.compdfkit.demo.edit;
 
-import android.Manifest;
 import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
@@ -33,12 +32,10 @@ import com.compdfkit.tools.common.views.CPDFToolBar;
 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.pdfstyle.CAnnotStyle;
-import com.compdfkit.tools.edit.CEditContextMenuHelper;
+import com.compdfkit.tools.edit.CEditImagePropertyDialogFragment;
 import com.compdfkit.tools.viewer.pdfdisplaysettings.CPDFDisplaySettingDialogFragment;
 import com.compdfkit.tools.viewer.pdfinfo.CPDFDocumentInfoDialogFragment;
 import com.compdfkit.tools.edit.CEditTextPropertyDialogFragment;
-import com.compdfkit.tools.viewer.pdfproperty.CImagePropertyBottomSheetDialogFragment;
 import com.compdfkit.tools.viewer.pdfsearch.CSearchResultBottomSheetDialogFragment;
 import com.compdfkit.ui.contextmenu.IContextMenuShowListener;
 import com.compdfkit.ui.reader.CPDFPageView;
@@ -185,16 +182,16 @@ public class PDFEditSampleActivity extends AppCompatActivity {
     private void initEditBar() {
         binding.pdfEditToolBar.initWithPDFView(binding.pdfView);
         binding.pdfEditToolBar.setEditPropertyBtnClickLisener((view)-> {
-
-
-
-//            CImagePropertyBottomSheetDialogFragment editPropertyDialog = new CImagePropertyBottomSheetDialogFragment();
-//            editPropertyDialog.initWithPDFView(binding.pdfView);
-//            editPropertyDialog.show(getSupportFragmentManager(), "imagePropertyDialogFragment");
-
-            CEditTextPropertyDialogFragment editTextPropertyDialog = new CEditTextPropertyDialogFragment();
-            //editTextPropertyDialog.initWithPDFView(binding.pdfView);
-            editTextPropertyDialog.show(getSupportFragmentManager(), "textPropertyDialogFragment");
+            int type = binding.pdfView.getCPdfReaderView().getSelectAreaType();
+            if (type == 1) {
+                CEditTextPropertyDialogFragment editTextPropertyDialog = new CEditTextPropertyDialogFragment();
+                //editTextPropertyDialog.initWithPDFView(binding.pdfView);
+                editTextPropertyDialog.show(getSupportFragmentManager(), "textPropertyDialogFragment");
+            } else if (type == 2) {
+            CEditImagePropertyDialogFragment editPropertyDialog = new CEditImagePropertyDialogFragment();
+            editPropertyDialog.initWithPDFView(binding.pdfView);
+            editPropertyDialog.show(getSupportFragmentManager(), "imagePropertyDialogFragment");
+            }
         });
     }