Pārlūkot izejas kodu

PDFTools(Android) - 1.优化Glide加载PDF缩略图代码 2.RTL适配

liuxiaolong 1 gadu atpakaļ
vecāks
revīzija
c7ad460c2d
53 mainītis faili ar 492 papildinājumiem un 15832 dzēšanām
  1. 2 2
      compdfkit-tools/build.gradle
  2. 1 1
      compdfkit-tools/src/main/AndroidManifest.xml
  3. 1 1
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/bota/adapter/CBotaViewPagerAdapter.java
  4. 1 1
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/pdfoutline/CPDFOutlineFragment.java
  5. 1 1
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/pdfoutline/adapter/COutlineListAdapter.java
  6. 24 1
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/pdfthumbnail/CPDFThumbnailFragment.java
  7. 8 21
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/pdfthumbnail/adpater/CPDFThumbnailListAdapter.java
  8. 4 3
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfdisplaysettings/CPDFDisplaySettingDialogFragment.java
  9. 1 0
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/dialog/CCommonInputDialog.java
  10. 0 3
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/view/CPDFPageIndicatorView.java
  11. 12 12
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/view/CPDFSliderBarView.java
  12. 4 36
      compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/CPDFGlideModule.java
  13. 0 37
      compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/CPDFImageLoad.java
  14. 0 184
      compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/CGlidePDFUrl.java
  15. 32 22
      compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/CPDFFether.java
  16. 0 45
      compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/CPDFGlideUrlLoad.java
  17. 63 0
      compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/CPDFModelLoader.java
  18. 98 0
      compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/CPDFWrapper.java
  19. 18 0
      compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/wrapper/CIPDFWrapper.java
  20. 74 0
      compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/wrapper/impl/CPDFCoverWrapper.java
  21. 56 0
      compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/wrapper/impl/CPDFDocumentPageWrapper.java
  22. 0 1
      compdfkit-tools/src/main/java/com/compdfkit/tools/utils/task/CExtractAssetFileTask.java
  23. 13 0
      compdfkit-tools/src/main/res/drawable-ldrtl/tools_ic_back.xml
  24. 8 0
      compdfkit-tools/src/main/res/drawable-ldrtl/tools_ic_right.xml
  25. 9 0
      compdfkit-tools/src/main/res/drawable-ldrtl/tools_svg_ic_left_arrow.xml
  26. 9 0
      compdfkit-tools/src/main/res/drawable-ldrtl/tools_svg_ic_right_arrow.xml
  27. 3 3
      compdfkit-tools/src/main/res/drawable/tool_button_click.xml
  28. 0 0
      compdfkit-tools/src/main/res/drawable/tools_button_normal.xml
  29. 0 0
      compdfkit-tools/src/main/res/drawable/tools_button_pressed.xml
  30. 0 1
      compdfkit-tools/src/main/res/layout/tools_cpdf_outline_list_fragment.xml
  31. 25 14
      compdfkit-tools/src/main/res/layout/tools_item_search_text_content.xml
  32. 7 7
      compdfkit-tools/src/main/res/layout/tools_item_search_text_header.xml
  33. 3 1
      compdfkit-tools/src/main/res/layout/tools_outline_list_item.xml
  34. 5 5
      compdfkit-tools/src/main/res/layout/tools_pdf_display_settings_dialog_fragment.xml
  35. 1 0
      compdfkit-tools/src/main/res/layout/tools_pdf_document_info_dialog_fragment.xml
  36. 0 1285
      compdfkit-tools/src/main/res/values-sw213dp/dimens.xml
  37. 0 1285
      compdfkit-tools/src/main/res/values-sw320dp/dimens.xml
  38. 0 1285
      compdfkit-tools/src/main/res/values-sw360dp/dimens.xml
  39. 0 1285
      compdfkit-tools/src/main/res/values-sw384dp/dimens.xml
  40. 0 1285
      compdfkit-tools/src/main/res/values-sw400dp/dimens.xml
  41. 0 1285
      compdfkit-tools/src/main/res/values-sw420dp/dimens.xml
  42. 0 1285
      compdfkit-tools/src/main/res/values-sw432dp/dimens.xml
  43. 0 1285
      compdfkit-tools/src/main/res/values-sw480dp/dimens.xml
  44. 0 1285
      compdfkit-tools/src/main/res/values-sw533dp/dimens.xml
  45. 0 1285
      compdfkit-tools/src/main/res/values-sw560dp/dimens.xml
  46. 0 1285
      compdfkit-tools/src/main/res/values-sw600dp/dimens.xml
  47. 0 1285
      compdfkit-tools/src/main/res/values-sw720dp/dimens.xml
  48. 1 1
      compdfkit-tools/src/main/res/values/tools_strings.xml
  49. 1 1
      compdfkit-tools/src/main/res/values/tools_styles.xml
  50. 1 0
      viewer-ctrl-demo/build.gradle
  51. 4 6
      viewer-ctrl-demo/src/main/java/com/compdfkit/demo/viewer/MainActivity.java
  52. 1 1
      viewer-ctrl-demo/src/main/res/values-night/themes.xml
  53. 1 1
      viewer-ctrl-demo/src/main/res/values/themes.xml

+ 2 - 2
compdfkit-tools/build.gradle

@@ -44,8 +44,8 @@ dependencies {
     api project(path:':compdfkit_repo:compdfkit')
     api project(path:':compdfkit_repo:compdfkit-ui')
 
-    api 'com.github.bumptech.glide:glide:4.14.2'
-    annotationProcessor 'com.github.bumptech.glide:compiler:4.14.2'
+    api 'com.github.bumptech.glide:glide:4.15.1'
+    annotationProcessor 'com.github.bumptech.glide:compiler:4.15.1'
 
     api 'androidx.documentfile:documentfile:1.0.1'
 

+ 1 - 1
compdfkit-tools/src/main/AndroidManifest.xml

@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android">
 
 
-    <application>
+    <application android:supportsRtl="true">
 
         <meta-data
             android:name="compdfkit_license"

+ 1 - 1
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/bota/adapter/CBotaViewPagerAdapter.java

@@ -17,8 +17,8 @@ import androidx.lifecycle.Lifecycle;
 import androidx.viewpager2.adapter.FragmentStateAdapter;
 
 import com.compdfkit.tools.R;
-import com.compdfkit.tools.pdfbota.pdfoutline.CPDFOutlineFragment;
 import com.compdfkit.tools.interfaces.OnSetPDFDisplayPageIndexListener;
+import com.compdfkit.tools.pdfbota.pdfoutline.CPDFOutlineFragment;
 import com.compdfkit.tools.pdfbota.pdfthumbnail.CPDFThumbnailFragment;
 import com.compdfkit.tools.pdfview.CPDFView;
 

+ 1 - 1
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/pdfoutline/CPDFOutlineFragment.java

@@ -22,10 +22,10 @@ import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.compdfkit.tools.R;
+import com.compdfkit.tools.interfaces.OnSetPDFDisplayPageIndexListener;
 import com.compdfkit.tools.pdfbota.pdfoutline.adapter.COutlineListAdapter;
 import com.compdfkit.tools.pdfbota.pdfoutline.bean.COutlineData;
 import com.compdfkit.tools.pdfbota.pdfoutline.data.COutlineDatas;
-import com.compdfkit.tools.interfaces.OnSetPDFDisplayPageIndexListener;
 import com.compdfkit.tools.pdfview.CPDFView;
 
 import java.util.ArrayList;

+ 1 - 1
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/pdfoutline/adapter/COutlineListAdapter.java

@@ -20,8 +20,8 @@ import androidx.constraintlayout.widget.ConstraintLayout;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.compdfkit.tools.R;
-import com.compdfkit.tools.pdfbota.pdfoutline.bean.COutlineData;
 import com.compdfkit.tools.interfaces.OnSetPDFDisplayPageIndexListener;
+import com.compdfkit.tools.pdfbota.pdfoutline.bean.COutlineData;
 import com.compdfkit.tools.pdfview.CPDFView;
 import com.compdfkit.ui.reader.CPDFReaderView;
 

+ 24 - 1
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/pdfthumbnail/CPDFThumbnailFragment.java

@@ -11,6 +11,7 @@ package com.compdfkit.tools.pdfbota.pdfthumbnail;
 
 
 import android.content.res.Configuration;
+import android.net.Uri;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -22,6 +23,7 @@ import androidx.fragment.app.Fragment;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
+import com.compdfkit.core.document.CPDFDocument;
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.interfaces.OnSetPDFDisplayPageIndexListener;
 import com.compdfkit.tools.pdfbota.pdfthumbnail.adpater.CPDFThumbnailListAdapter;
@@ -33,9 +35,30 @@ import com.compdfkit.tools.pdfview.CPDFView;
  * <p/>
  * If you want to obtain the PDF thumbnail list to implement your own UI style,
  * you can refer to the code in "CPDFThumbnailListAdapter" for implementation.
+ * <p/>
+ * You can use Glide SDK to load the thumbnail of a PDF document.<br/>
+ * GlideApp.with(context) <br/>
+ *      .load(CPDFWrapper.fromDocument(CPDFDocument document, int pageIndex) <br/>
+ *      .diskCacheStrategy(DiskCacheStrategy.NONE) <br/>
+ *      .into(imageView) <br/>
+ * <p/>
+ * 如果你想加载pdf 的封面图,你可以使用以下方式 <br/>
+ * - fromFile <br/>
+ * GlideApp.with(context) <br/>
+ *      .load(CPDFWrapper.fromFile(String pdfFilePath)) <br/>
+ *      .diskCacheStrategy(DiskCacheStrategy.NONE) <br/>
+ *      .into(imageView) <br/>
+ * <p/>
+ * - fromUri <br/>
+ * GlideApp.with(context) <br/>
+ *      .load(CPDFWrapper.fromUri(Uri pdfFileUri)) <br/>
+ *      .diskCacheStrategy(DiskCacheStrategy.NONE) <br/>
+ *      .into(imageview) <br/>
  *
  * @see CPDFThumbnailListAdapter
- *
+ * @see com.compdfkit.tools.utils.glide.pdf.CPDFWrapper#fromDocument(CPDFDocument, int)
+ * @see com.compdfkit.tools.utils.glide.pdf.CPDFWrapper#fromFile(String)
+ * @see com.compdfkit.tools.utils.glide.pdf.CPDFWrapper#fromUri(Uri)
  */
 public class CPDFThumbnailFragment extends Fragment {
 

+ 8 - 21
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/pdfthumbnail/adpater/CPDFThumbnailListAdapter.java

@@ -19,11 +19,12 @@ import androidx.appcompat.widget.AppCompatTextView;
 import androidx.cardview.widget.CardView;
 import androidx.recyclerview.widget.RecyclerView;
 
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
 import com.compdfkit.core.document.CPDFDocument;
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.interfaces.OnSetPDFDisplayPageIndexListener;
-import com.compdfkit.tools.utils.glide.CPDFImageLoad;
-import com.compdfkit.tools.utils.glide.pdf.CGlidePDFUrl;
+import com.compdfkit.tools.utils.glide.pdf.CPDFWrapper;
 
 /**
  * PDF thumbnail list adapter, displays the thumbnail of each page of a PDF file,
@@ -49,15 +50,11 @@ public class CPDFThumbnailListAdapter extends RecyclerView.Adapter<CPDFThumbnail
 
     @Override
     public void onBindViewHolder(@NonNull CPDFThumbnailItemViewHolder holder, int position) {
-        int[] size = getPdfImageSize(holder.ivThumbnailImage);
-
-        CPDFImageLoad.loadPdfPageImage(holder.itemView.getContext(),
-                new CGlidePDFUrl(cPdfDocument, position, size[0], size[1]),
-                cPdfDocument.getAbsolutePath(),
-                false,
-                false,
-                holder.ivThumbnailImage
-        );
+
+        Glide.with(holder.itemView.getContext())
+                .load(CPDFWrapper.fromDocument(cPdfDocument, position))
+                .diskCacheStrategy(DiskCacheStrategy.NONE)
+                .into(holder.ivThumbnailImage);
         holder.tvPageIndex.setText(String.valueOf(holder.getAdapterPosition() + 1));
         holder.cardView.setOnClickListener(v -> {
             if (displayPageIndexListener != null) {
@@ -66,16 +63,6 @@ public class CPDFThumbnailListAdapter extends RecyclerView.Adapter<CPDFThumbnail
         });
     }
 
-    private int[] getPdfImageSize(AppCompatImageView imageView) {
-        int[] size = new int[]{300, 300};
-        int width = imageView.getWidth();
-        int height = imageView.getHeight();
-        if (width > 0 && height > 0) {
-            size[0] = width;
-            size[1] = height;
-        }
-        return size;
-    }
 
     @Override
     public int getItemCount() {

+ 4 - 3
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfdisplaysettings/CPDFDisplaySettingDialogFragment.java

@@ -16,6 +16,7 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.widget.CompoundButton;
 import android.widget.RadioGroup;
+import android.widget.Switch;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -57,9 +58,9 @@ public class CPDFDisplaySettingDialogFragment extends BottomSheetDialogFragment
     private AppCompatRadioButton rbDoublePage;
     private AppCompatRadioButton rbCoverDoublePage;
 
-    private SwitchMaterial swIsContinue;
-    private SwitchMaterial swIsVertical;
-    private SwitchMaterial swIsCropMode;
+    private Switch swIsContinue;
+    private Switch swIsVertical;
+    private Switch swIsCropMode;
     private RadioGroup readerBgRadioGroup;
     private AppCompatRadioButton rbLightMode;
     private AppCompatRadioButton rbDarkMode;

+ 1 - 0
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/dialog/CCommonInputDialog.java

@@ -18,6 +18,7 @@ import android.view.WindowManager;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.TextView;
+
 import androidx.appcompat.app.AppCompatDialog;
 
 import com.compdfkit.tools.R;

+ 0 - 3
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/view/CPDFPageIndicatorView.java

@@ -11,7 +11,6 @@ package com.compdfkit.tools.pdfview.view;
 
 
 import android.content.Context;
-import android.content.res.TypedArray;
 import android.graphics.Color;
 import android.util.AttributeSet;
 import android.widget.LinearLayout;
@@ -22,8 +21,6 @@ import androidx.appcompat.widget.AppCompatTextView;
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.utils.viewutils.DimensUtils;
 
-import org.w3c.dom.Attr;
-
 
 /**
  * CPDFPageIndicatorView is a custom view that displays the current page index and the total number of pages in a PDF document.

+ 12 - 12
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/view/CPDFSliderBarView.java

@@ -1,6 +1,6 @@
 /**
  * Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
- *
+ * <p>
  * 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.
@@ -16,12 +16,13 @@ import android.util.AttributeSet;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
 import com.bumptech.glide.request.target.SimpleTarget;
 import com.bumptech.glide.request.transition.Transition;
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.pdfview.CPDFView;
-import com.compdfkit.tools.utils.glide.CPDFImageLoad;
-import com.compdfkit.tools.utils.glide.pdf.CGlidePDFUrl;
+import com.compdfkit.tools.utils.glide.pdf.CPDFWrapper;
 import com.compdfkit.ui.widget.CPDFSlideBar;
 
 
@@ -61,7 +62,7 @@ public class CPDFSliderBarView extends CPDFSlideBar implements CPDFSlideBar.OnSc
         }
     }
 
-    public void initSliderBar(CPDFSlideBar.SlideBarPosition position, int thumbnailWidth, int thumbnailHeight){
+    public void initSliderBar(CPDFSlideBar.SlideBarPosition position, int thumbnailWidth, int thumbnailHeight) {
         sliderBarThumbnailWidth = thumbnailWidth;
         sliderBarThumbnailHeight = thumbnailHeight;
         setDefaultThumbnailSize(sliderBarThumbnailWidth, sliderBarThumbnailHeight);
@@ -70,7 +71,6 @@ public class CPDFSliderBarView extends CPDFSlideBar implements CPDFSlideBar.OnSc
     }
 
 
-
     @Override
     public void onScrollBegin(int pageIndex) {
         if (cpdfView != null) {
@@ -96,18 +96,18 @@ public class CPDFSliderBarView extends CPDFSlideBar implements CPDFSlideBar.OnSc
 
 
     private void refreshDocumentPageThumbnail(int pageIndex) {
-        if (currentScrollPageIndex != pageIndex){
+        if (currentScrollPageIndex != pageIndex) {
             currentScrollPageIndex = pageIndex;
-            CPDFImageLoad.loadPdfPageImage(getContext(),
-                    new CGlidePDFUrl(cpdfView.getCPdfReaderView().getPDFDocument(), currentScrollPageIndex, sliderBarThumbnailWidth, sliderBarThumbnailHeight),
-                    cpdfView.getCPdfReaderView().getPDFDocument().getAbsolutePath(),
-                    false, false, new SimpleTarget<Bitmap>(sliderBarThumbnailWidth, sliderBarThumbnailHeight) {
+            Glide.with(getContext())
+                    .asBitmap()
+                    .load(CPDFWrapper.fromDocument(cpdfView.getCPdfReaderView().getPDFDocument(), currentScrollPageIndex))
+                    .diskCacheStrategy(DiskCacheStrategy.NONE)
+                    .into(new SimpleTarget<Bitmap>(sliderBarThumbnailWidth, sliderBarThumbnailHeight) {
                         @Override
                         public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                             setThumbnailBitmap(resource);
                         }
-                    }
-            );
+                    });
         }
     }
 }

+ 4 - 36
compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/CPDFGlideModule.java

@@ -6,47 +6,15 @@ import android.graphics.Bitmap;
 import androidx.annotation.NonNull;
 
 import com.bumptech.glide.Glide;
-import com.bumptech.glide.GlideBuilder;
 import com.bumptech.glide.Registry;
 import com.bumptech.glide.annotation.GlideModule;
-import com.bumptech.glide.load.DecodeFormat;
-import com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool;
-import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory;
-import com.bumptech.glide.load.engine.cache.LruResourceCache;
-import com.bumptech.glide.load.engine.cache.MemorySizeCalculator;
 import com.bumptech.glide.module.AppGlideModule;
-import com.bumptech.glide.request.RequestOptions;
-import com.compdfkit.tools.utils.glide.pdf.CGlidePDFUrl;
-import com.compdfkit.tools.utils.glide.pdf.CPDFGlideUrlLoad;
+import com.compdfkit.tools.utils.glide.pdf.CPDFModelLoader;
+import com.compdfkit.tools.utils.glide.pdf.CPDFWrapper;
 
 @GlideModule
 public class CPDFGlideModule extends AppGlideModule {
 
-    @Override
-    public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
-        /*内存缓存池*/
-        MemorySizeCalculator cache_calculator = new MemorySizeCalculator.Builder(context)
-                .setMemoryCacheScreens(2)
-                .build();
-        builder.setMemoryCache(new LruResourceCache(cache_calculator.getMemoryCacheSize()));
-
-        /*磁盘缓存*/
-        //100 MB
-        int diskCacheSizeBytes = 1024 * 1024 * 100;
-        builder.setDiskCache(new InternalCacheDiskCacheFactory(context, diskCacheSizeBytes));
-
-        /*Bitmap 池*/
-        MemorySizeCalculator bitmap_calculator = new MemorySizeCalculator.Builder(context)
-                .setBitmapPoolScreens(3)
-                .build();
-        builder.setBitmapPool(new LruBitmapPool(bitmap_calculator.getBitmapPoolSize()));
-
-        builder.setDefaultRequestOptions(
-                new RequestOptions()
-                        .format(DecodeFormat.PREFER_RGB_565)
-                        .disallowHardwareConfig());
-    }
-
     @Override
     public boolean isManifestParsingEnabled() {
         return false;
@@ -54,7 +22,7 @@ public class CPDFGlideModule extends AppGlideModule {
 
     @Override
     public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
-        registry.append(CGlidePDFUrl.class, Bitmap.class, new CPDFGlideUrlLoad.Factory());
-        super.registerComponents(context, glide, registry);
+        registry.append(CPDFWrapper.class, Bitmap.class, new CPDFModelLoader.Factory(context));
     }
+
 }

+ 0 - 37
compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/CPDFImageLoad.java

@@ -1,37 +0,0 @@
-package com.compdfkit.tools.utils.glide;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.widget.ImageView;
-
-import com.bumptech.glide.load.engine.DiskCacheStrategy;
-import com.bumptech.glide.request.target.Target;
-import com.bumptech.glide.signature.ObjectKey;
-import com.compdfkit.tools.utils.glide.pdf.CGlidePDFUrl;
-
-
-public class CPDFImageLoad {
-
-
-
-    public static void loadPdfPageImage(Context c, CGlidePDFUrl cGlidePdfUrl, String filePath, boolean diskCacheStrategy, boolean memoryCache, Target<Bitmap> target) {
-        GlideApp.with(c)
-                .asBitmap()
-                .load(cGlidePdfUrl)
-                .signature(new ObjectKey(String.format("%s_%s_%s", filePath, cGlidePdfUrl.getPageIndex(), System.currentTimeMillis() - 10000)))
-                .diskCacheStrategy(diskCacheStrategy ? DiskCacheStrategy.DATA : DiskCacheStrategy.NONE)
-                .skipMemoryCache(!memoryCache)
-                .into(target);
-    }
-
-    public static void loadPdfPageImage(Context c, CGlidePDFUrl cGlidePDFUrl, String filePath, boolean diskCacheStrategy, boolean memoryCache, ImageView imageView) {
-        GlideApp.with(c)
-                .asBitmap()
-                .load(cGlidePDFUrl)
-                .signature(new ObjectKey(String.format("%s_%s_%s", filePath, cGlidePDFUrl.getPageIndex(), System.currentTimeMillis() - 10000)))
-                .diskCacheStrategy(diskCacheStrategy ? DiskCacheStrategy.DATA : DiskCacheStrategy.NONE)
-                .skipMemoryCache(!memoryCache)
-                .into(imageView);
-    }
-
-}

+ 0 - 184
compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/CGlidePDFUrl.java

@@ -1,184 +0,0 @@
-/**
- * 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.utils.glide.pdf;
-
-import android.graphics.Color;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.bumptech.glide.load.Key;
-import com.bumptech.glide.load.model.Headers;
-import com.compdfkit.core.document.CPDFDocument;
-
-import java.security.MessageDigest;
-import java.util.Locale;
-
-
-public class CGlidePDFUrl implements Key {
-    private static final String TAG = "CGlidePDFUrl";
-    public static final String TPDF = "TPDF:";
-    public static final String TAG_PAGEINDEX = "pageIndex";
-    public static final String TAG_WIDTH = "width";
-    public static final String TAG_HEIGHT = "height";
-    public static final String TAG_PATCHX = "patchx";
-    public static final String TAG_PATCHY = "patchy";
-    public static final String TAG_PATCHW = "patchw";
-    public static final String TAG_PATCHH = "patchh";
-    public static final String TAG_BGCOLOR = "bgcolor";
-    public static final String TAG_DRAWANNOT = "drawannot";
-    public static final String TAG_IS_UPDATE = "isupdate";
-
-    private CPDFDocument tpdfDocument;
-    private int pageIndex;
-    private int width;
-    private int height;
-    private int patchX;
-    private int patchY;
-    private int patchW;
-    private int patchH;
-    private int bgColor;
-    private boolean isDrawAnnot;
-    private boolean isUpdate;
-
-    private final Headers headers = Headers.DEFAULT;
-    private int hashCode;
-    @Nullable
-    private volatile byte[] cacheKeyBytes;
-
-    public CGlidePDFUrl(CPDFDocument tpdfDocument, int pageIndex, int width, int height, int patchX, int patchY, int patchW, int patchH, int bgColor, boolean isDrawAnnot, boolean isUpdate) {
-        this.tpdfDocument = tpdfDocument;
-        this.pageIndex = pageIndex;
-        this.width = width;
-        this.height = height;
-        this.patchX = patchX;
-        this.patchY = patchY;
-        this.patchW = patchW;
-        this.patchH = patchH;
-        this.bgColor = bgColor;
-        this.isDrawAnnot = isDrawAnnot;
-        this.isUpdate = isUpdate;
-    }
-
-    public CGlidePDFUrl(CPDFDocument tpdfDocument, int pageIndex, int width, int height){
-        this.tpdfDocument = tpdfDocument;
-        this.pageIndex = pageIndex;
-        this.width = width;
-        this.height = height;
-        this.patchX = 0;
-        this.patchY = 0;
-        this.patchW = width;
-        this.patchH = height;
-        this.bgColor = Color.WHITE;
-        this.isDrawAnnot = true;
-        this.isUpdate = false;
-    }
-
-    public CPDFDocument getTpdfDocument() {
-        return tpdfDocument;
-    }
-
-    public int getPageIndex() {
-        return pageIndex;
-    }
-
-    public int getWidth() {
-        return width;
-    }
-
-    public int getHeight() {
-        return height;
-    }
-
-    public int getPatchX() {
-        return patchX;
-    }
-
-    public int getPatchY() {
-        return patchY;
-    }
-
-    public int getPatchW() {
-        return patchW;
-    }
-
-    public int getPatchH() {
-        return patchH;
-    }
-
-    public int getBgColor() {
-        return bgColor;
-    }
-
-    public boolean isDrawAnnot() {
-        return isDrawAnnot;
-    }
-
-    public boolean isUpdate() {
-        return isUpdate;
-    }
-
-    public String getCacheKey() {
-        String urlFormat = "%s{" +
-                "\"%s\":\"%d\"," +
-                "\"%s\":\"%d\"," +
-                "\"%s\":\"%d\"," +
-                "\"%s\":\"%d\"," +
-                "\"%s\":\"%d\"," +
-                "\"%s\":\"%d\"," +
-                "\"%s\":\"%d\"," +
-                "\"%s\":\"%d\"," +
-                "\"%s\":\"%d\"," +
-                "\"%s\":\"%d\"}";
-        String cacheKey = String.format(Locale.US, urlFormat,
-                TPDF,
-                TAG_PAGEINDEX, pageIndex,
-                TAG_WIDTH, width,
-                TAG_HEIGHT, height,
-                TAG_PATCHX, patchX,
-                TAG_PATCHY, patchY,
-                TAG_PATCHW, patchW,
-                TAG_PATCHH, patchH,
-                TAG_BGCOLOR, bgColor,
-                TAG_DRAWANNOT, (isDrawAnnot ? 1 : 0),
-                TAG_IS_UPDATE, (isUpdate ? 1 : 0));
-        return cacheKey;
-    }
-
-    @Override
-    public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
-        messageDigest.update(getCacheKeyBytes());
-    }
-
-    private byte[] getCacheKeyBytes() {
-        if (cacheKeyBytes == null) {
-            cacheKeyBytes = getCacheKey().getBytes(CHARSET);
-        }
-        return cacheKeyBytes;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (o instanceof CGlidePDFUrl) {
-            CGlidePDFUrl other = (CGlidePDFUrl) o;
-            return getCacheKey().equals(other.getCacheKey());
-        }
-        return false;
-    }
-
-    @Override
-    public int hashCode() {
-        if (hashCode == 0) {
-            hashCode = getCacheKey().hashCode();
-            hashCode = 31 * hashCode + headers.hashCode();
-        }
-        return hashCode;
-    }
-}

+ 32 - 22
compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/CPDFFether.java

@@ -11,6 +11,7 @@ package com.compdfkit.tools.utils.glide.pdf;
 
 import android.content.Context;
 import android.graphics.Bitmap;
+import android.graphics.RectF;
 
 import androidx.annotation.NonNull;
 
@@ -18,37 +19,38 @@ import com.bumptech.glide.Glide;
 import com.bumptech.glide.Priority;
 import com.bumptech.glide.load.DataSource;
 import com.bumptech.glide.load.data.DataFetcher;
+import com.bumptech.glide.request.target.Target;
 import com.compdfkit.core.document.CPDFDocument;
+import com.compdfkit.tools.utils.glide.pdf.wrapper.impl.CPDFDocumentPageWrapper;
 
 public class CPDFFether implements DataFetcher<Bitmap> {
     private static final int MAXIMUM_REDIRECTS = 1;
 
     private final static String TAG = "CPDFFether";
-    private CGlidePDFUrl glideUrl;
+    private CPDFDocumentPageWrapper cpdfWrapper;
     private volatile boolean isCancelled;
     private CPDFDocument tpdfDocument;
     private Context context;
 
-    public CPDFFether(CGlidePDFUrl glideUrl) {
-        this.glideUrl = glideUrl;
-        tpdfDocument = glideUrl.getTpdfDocument();
+    private int loadImageWidth;
+
+    private int loadImageHeight;
+
+
+    public CPDFFether(CPDFDocumentPageWrapper cpdfWrapper, int width, int height) {
+        this.cpdfWrapper = cpdfWrapper;
+        tpdfDocument = cpdfWrapper.getDocument();
         context = tpdfDocument.getContext();
+        this.loadImageWidth = width;
+        this.loadImageHeight = height;
     }
 
     @Override
     public void loadData(@NonNull Priority priority, @NonNull DataCallback<? super Bitmap> callback) {
         try {
             isCancelled = false;
-            Bitmap result = loadDataWithRedirects(glideUrl.getPageIndex(),
-                    glideUrl.getWidth(),
-                    glideUrl.getHeight(),
-                    glideUrl.getPatchX(),
-                    glideUrl.getPatchY(),
-                    glideUrl.getPatchW(),
-                    glideUrl.getPatchH(),
-                    glideUrl.getBgColor(),
-                    glideUrl.isDrawAnnot(),
-                    glideUrl.isUpdate(),
+            Bitmap result = loadDataWithRedirects(cpdfWrapper.getPageIndex(),
+                    loadImageWidth,loadImageHeight,
                     0);
             callback.onDataReady(result);
         } catch (Exception e) {
@@ -56,7 +58,7 @@ public class CPDFFether implements DataFetcher<Bitmap> {
         }
     }
 
-    private Bitmap loadDataWithRedirects(int pageIndex, int width, int height, int patchX, int patchY, int patchW, int patchH, int bgColor, boolean isDrawAnnot, boolean isUpdate, int redirects) throws Exception {
+    private Bitmap loadDataWithRedirects(int pageIndex, int width, int height, int redirects) throws Exception {
         if (redirects >= MAXIMUM_REDIRECTS) {
             throw new Exception("Too many (> " + MAXIMUM_REDIRECTS + ") redirects!");
         }
@@ -64,30 +66,38 @@ public class CPDFFether implements DataFetcher<Bitmap> {
         if (tpdfDocument == null) {
             throw new Exception("CPDFDocument is null!");
         }
+        RectF sizeRect = tpdfDocument.getPageSize(pageIndex);
+        if (width == Target.SIZE_ORIGINAL ){
+            width = (int) sizeRect.width();
+        }
+        if (height == Target.SIZE_ORIGINAL){
+            height = (int) sizeRect.height();
+        }
+
         Bitmap bitmap = Glide.get(context).getBitmapPool().get(width, height, Bitmap.Config.ARGB_4444);
         boolean res = tpdfDocument.renderPageAtIndex(bitmap,
                 pageIndex,
                 width,
                 height,
-                patchX,
-                patchY,
-                patchW,
-                patchH,
-                bgColor,
+                0,
+                0,
+                width,
+                height,
+                cpdfWrapper.getBackgroundColor(),
                 255,
                 0,
                 true,
                 true);
 
         if (!res || (null == bitmap) || bitmap.isRecycled()) {
-            return loadDataWithRedirects(pageIndex, width, height, patchX, patchY, patchW, patchH, bgColor, isDrawAnnot, isUpdate, ++redirects);
+            return loadDataWithRedirects(pageIndex, width, height, ++redirects);
         }
         return isCancelled ? null : bitmap;
     }
 
     @Override
     public void cleanup() {
-        glideUrl = null;
+        cpdfWrapper = null;
         tpdfDocument = null;
     }
 

+ 0 - 45
compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/CPDFGlideUrlLoad.java

@@ -1,45 +0,0 @@
-package com.compdfkit.tools.utils.glide.pdf;
-
-import android.graphics.Bitmap;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.bumptech.glide.load.Options;
-import com.bumptech.glide.load.data.DataFetcher;
-import com.bumptech.glide.load.model.ModelLoader;
-import com.bumptech.glide.load.model.ModelLoaderFactory;
-import com.bumptech.glide.load.model.MultiModelLoaderFactory;
-
-public class CPDFGlideUrlLoad implements ModelLoader<CGlidePDFUrl, Bitmap> {
-    public CPDFGlideUrlLoad() {
-    }
-
-    @Nullable
-    @Override
-    public LoadData<Bitmap> buildLoadData(@NonNull CGlidePDFUrl model, int width, int height, @NonNull Options options) {
-        DataFetcher<Bitmap> dataFetcher = new CPDFFether(model);
-        return new LoadData<>(model, dataFetcher);
-    }
-
-    @Override
-    public boolean handles(@NonNull CGlidePDFUrl glideUrl) {
-        return true;
-    }
-
-    public static class Factory implements ModelLoaderFactory<CGlidePDFUrl, Bitmap> {
-        public Factory() {
-        }
-
-        @NonNull
-        @Override
-        public ModelLoader<CGlidePDFUrl, Bitmap> build(MultiModelLoaderFactory multiFactory) {
-            return new CPDFGlideUrlLoad();
-        }
-
-        @Override
-        public void teardown() {
-            // Do nothing.
-        }
-    }
-}

+ 63 - 0
compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/CPDFModelLoader.java

@@ -0,0 +1,63 @@
+package com.compdfkit.tools.utils.glide.pdf;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.bumptech.glide.load.Options;
+import com.bumptech.glide.load.data.DataFetcher;
+import com.bumptech.glide.load.model.ModelLoader;
+import com.bumptech.glide.load.model.ModelLoaderFactory;
+import com.bumptech.glide.load.model.MultiModelLoaderFactory;
+import com.compdfkit.core.document.CPDFDocument;
+import com.compdfkit.tools.utils.glide.pdf.wrapper.impl.CPDFCoverWrapper;
+import com.compdfkit.tools.utils.glide.pdf.wrapper.impl.CPDFDocumentPageWrapper;
+
+public class CPDFModelLoader implements ModelLoader<CPDFWrapper, Bitmap> {
+    private Context context;
+
+    public CPDFModelLoader(Context context) {
+        this.context = context;
+    }
+
+    @Nullable
+    @Override
+    public LoadData<Bitmap> buildLoadData(@NonNull CPDFWrapper wrapper, int width, int height, @NonNull Options options) {
+        wrapper.setSize(width, height);
+        CPDFDocumentPageWrapper pageWrapper;
+        if (wrapper.wrapper instanceof CPDFCoverWrapper){
+            CPDFDocument document = ((CPDFCoverWrapper) wrapper.wrapper).getCoverPdfDocument(context);
+            pageWrapper = new CPDFDocumentPageWrapper(document, 0);
+        }else {
+            pageWrapper = (CPDFDocumentPageWrapper) wrapper.wrapper;
+        }
+
+        DataFetcher<Bitmap> dataFetcher = new CPDFFether(pageWrapper, width, height);
+        return new LoadData<>(wrapper, dataFetcher);
+    }
+
+    @Override
+    public boolean handles(@NonNull CPDFWrapper wrapper) {
+        return wrapper.wrapper.isAvailable();
+    }
+
+    public static class Factory implements ModelLoaderFactory<CPDFWrapper, Bitmap> {
+        Context context;
+        public Factory(Context context) {
+            this.context = context;
+        }
+
+        @NonNull
+        @Override
+        public ModelLoader<CPDFWrapper, Bitmap> build(MultiModelLoaderFactory multiFactory) {
+            return new CPDFModelLoader(context);
+        }
+
+        @Override
+        public void teardown() {
+            // Do nothing.
+        }
+    }
+}

+ 98 - 0
compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/CPDFWrapper.java

@@ -0,0 +1,98 @@
+/**
+ * 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.utils.glide.pdf;
+
+import android.net.Uri;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.bumptech.glide.load.Key;
+import com.bumptech.glide.load.model.Headers;
+import com.compdfkit.core.document.CPDFDocument;
+import com.compdfkit.tools.utils.glide.pdf.wrapper.CIPDFWrapper;
+import com.compdfkit.tools.utils.glide.pdf.wrapper.impl.CPDFCoverWrapper;
+import com.compdfkit.tools.utils.glide.pdf.wrapper.impl.CPDFDocumentPageWrapper;
+
+import java.security.MessageDigest;
+
+
+public class CPDFWrapper implements Key {
+
+    public CIPDFWrapper wrapper;
+
+
+    private final Headers headers = Headers.DEFAULT;
+    private int hashCode;
+    @Nullable
+    private volatile byte[] cacheKeyBytes;
+
+    private int width;
+    private int height;
+
+
+    private CPDFWrapper(CIPDFWrapper cipdfWrapper){
+        this.wrapper = cipdfWrapper;
+    }
+
+
+    public static CPDFWrapper fromFile(String pdfFilePath){
+        return new CPDFWrapper(new CPDFCoverWrapper(pdfFilePath));
+    }
+
+    public static CPDFWrapper fromUri(Uri pdfFileUri){
+        return new CPDFWrapper(new CPDFCoverWrapper(pdfFileUri));
+    }
+
+    public static CPDFWrapper fromDocument(CPDFDocument cPdfDocument, int pageIndex){
+        return new CPDFWrapper(new CPDFDocumentPageWrapper(cPdfDocument, pageIndex));
+    }
+
+    public void setSize(int width, int height){
+        this.width = width;
+        this.height = height;
+    }
+
+
+    public String getCacheKey() {
+        return wrapper.cacheKey() + "_" + width +"_" + height;
+    }
+
+
+    @Override
+    public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
+        messageDigest.update(getCacheKeyBytes());
+    }
+
+    private byte[] getCacheKeyBytes() {
+        if (cacheKeyBytes == null) {
+            cacheKeyBytes = getCacheKey().getBytes(CHARSET);
+        }
+        return cacheKeyBytes;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (o instanceof CPDFWrapper) {
+            CPDFWrapper other = (CPDFWrapper) o;
+            return getCacheKey().equals(other.getCacheKey());
+        }
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        if (hashCode == 0) {
+            hashCode = getCacheKey().hashCode();
+            hashCode = 31 * hashCode + headers.hashCode();
+        }
+        return hashCode;
+    }
+}

+ 18 - 0
compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/wrapper/CIPDFWrapper.java

@@ -0,0 +1,18 @@
+/**
+ * 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.utils.glide.pdf.wrapper;
+
+
+public interface CIPDFWrapper {
+
+    boolean isAvailable();
+
+    String cacheKey();
+}

+ 74 - 0
compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/wrapper/impl/CPDFCoverWrapper.java

@@ -0,0 +1,74 @@
+/**
+ * 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.utils.glide.pdf.wrapper.impl;
+
+
+import android.content.Context;
+import android.net.Uri;
+import android.text.TextUtils;
+
+import androidx.annotation.Nullable;
+
+import com.compdfkit.core.document.CPDFDocument;
+import com.compdfkit.tools.utils.glide.pdf.wrapper.CIPDFWrapper;
+
+public class CPDFCoverWrapper implements CIPDFWrapper {
+
+    private String pdfFilePath;
+
+    private Uri pdfFileUri;
+
+
+    public CPDFCoverWrapper(String pdfFilePath){
+        this.pdfFilePath = pdfFilePath;
+    }
+
+    public CPDFCoverWrapper(Uri pdfFileUri){
+        this.pdfFileUri = pdfFileUri;
+    }
+
+
+    public @Nullable CPDFDocument getCoverPdfDocument(Context context){
+
+        CPDFDocument cpdfDocument = new CPDFDocument(context);
+        CPDFDocument.PDFDocumentError error;
+        if (!TextUtils.isEmpty(pdfFilePath)){
+            error = cpdfDocument.open(pdfFilePath);
+        } else if (pdfFileUri != null){
+            error = cpdfDocument.open(pdfFileUri);
+        }else {
+            error = CPDFDocument.PDFDocumentError.PDFDocumentErrorUnknown;
+        }
+        if (error == CPDFDocument.PDFDocumentError.PDFDocumentErrorSuccess){
+            return cpdfDocument;
+        }else {
+            return null;
+        }
+
+    }
+
+
+    @Override
+    public boolean isAvailable(){
+        return !TextUtils.isEmpty(pdfFilePath) || pdfFileUri != null;
+    }
+
+
+    @Override
+    public String cacheKey() {
+        if (!TextUtils.isEmpty(pdfFilePath)){
+            return pdfFilePath;
+        } else if (pdfFileUri != null) {
+            return pdfFileUri.toString();
+        }else {
+            return "";
+        }
+    }
+}

+ 56 - 0
compdfkit-tools/src/main/java/com/compdfkit/tools/utils/glide/pdf/wrapper/impl/CPDFDocumentPageWrapper.java

@@ -0,0 +1,56 @@
+package com.compdfkit.tools.utils.glide.pdf.wrapper.impl;
+
+
+import android.graphics.Color;
+
+import com.compdfkit.core.document.CPDFDocument;
+import com.compdfkit.tools.utils.glide.pdf.wrapper.CIPDFWrapper;
+
+public class CPDFDocumentPageWrapper implements CIPDFWrapper {
+
+
+    public static final String TPDF = "TPDF:";
+
+
+    private CPDFDocument document;
+
+    private int pageIndex;
+
+    private int backgroundColor = Color.WHITE;
+
+
+    public CPDFDocumentPageWrapper(CPDFDocument cpdfDocument, int pageIndex){
+        this.document = cpdfDocument;
+        this.pageIndex = pageIndex;
+    }
+
+    public void setBackgroundColor(int backgroundColor) {
+        this.backgroundColor = backgroundColor;
+    }
+
+    public CPDFDocument getDocument() {
+        return document;
+    }
+
+    public int getPageIndex() {
+        return pageIndex;
+    }
+
+    public int getBackgroundColor() {
+        return backgroundColor;
+    }
+
+    @Override
+    public String cacheKey() {
+        return TPDF + document.getAbsolutePath() +
+                "_" +
+                pageIndex +
+                "_" +
+                backgroundColor;
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return document != null;
+    }
+}

+ 0 - 1
compdfkit-tools/src/main/java/com/compdfkit/tools/utils/task/CExtractAssetFileTask.java

@@ -6,7 +6,6 @@ import android.content.Context;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
-
 import com.compdfkit.tools.utils.CFileUtilsExtension;
 import com.compdfkit.tools.utils.threadpools.CThreadPoolUtils;
 

+ 13 - 0
compdfkit-tools/src/main/res/drawable-ldrtl/tools_ic_back.xml

@@ -0,0 +1,13 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="32"
+    android:viewportHeight="32">
+  <group android:rotation="180" android:translateX="32" android:translateY="32">
+
+    <path
+        android:pathData="M9.476,16.257c-0.103,-0.435 0.015,-0.912 0.355,-1.251l10.685,-10.685c0.521,-0.521 1.365,-0.521 1.886,0s0.521,1.365 0,1.886l-9.745,9.745 9.746,9.746c0.521,0.521 0.521,1.365 0,1.886s-1.365,0.521 -1.886,0l-10.685,-10.685c-0.171,-0.171 -0.296,-0.388 -0.354,-0.632l-0.002,-0.009z"
+        android:fillColor="#000000"/>
+  </group>
+
+</vector>

+ 8 - 0
compdfkit-tools/src/main/res/drawable-ldrtl/tools_ic_right.xml

@@ -0,0 +1,8 @@
+<vector android:height="24dp" android:tint="#000000"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <group android:translateX="24" android:translateY="24" android:rotation="180">
+        <path android:fillColor="@android:color/white" android:pathData="M10,6L8.59,7.41 13.17,12l-4.58,4.59L10,18l6,-6z"/>
+    </group>
+</vector>

+ 9 - 0
compdfkit-tools/src/main/res/drawable-ldrtl/tools_svg_ic_left_arrow.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="32dp"
+    android:height="32dp"
+    android:viewportWidth="1024"
+    android:viewportHeight="1024">
+  <path
+      android:pathData="M613.5,512L274.75,173.25l90.5,-90.5L794.5,512l-429.25,429.25 -90.5,-90.5z"
+      android:fillColor="#000000"/>
+</vector>

+ 9 - 0
compdfkit-tools/src/main/res/drawable-ldrtl/tools_svg_ic_right_arrow.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="32dp"
+    android:height="32dp"
+    android:viewportWidth="1024"
+    android:viewportHeight="1024">
+  <path
+      android:pathData="M474.5,512l338.75,-338.75 -90.5,-90.5L293.5,512l429.25,429.25 90.5,-90.5z"
+      android:fillColor="#000000"/>
+</vector>

+ 3 - 3
compdfkit-tools/src/main/res/drawable/tool_button_click.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android" >
-    <item android:state_pressed="true" android:drawable="@drawable/tool_button_pressed"/>
-    <item android:state_selected="true" android:drawable="@drawable/tool_button_pressed"/>
-    <item android:state_enabled="true" android:drawable="@drawable/tool_button_normal"/>
+    <item android:state_pressed="true" android:drawable="@drawable/tools_button_pressed"/>
+    <item android:state_selected="true" android:drawable="@drawable/tools_button_pressed"/>
+    <item android:state_enabled="true" android:drawable="@drawable/tools_button_normal"/>
 </selector>

compdfkit-tools/src/main/res/drawable/tool_button_normal.xml → compdfkit-tools/src/main/res/drawable/tools_button_normal.xml


compdfkit-tools/src/main/res/drawable/tool_button_pressed.xml → compdfkit-tools/src/main/res/drawable/tools_button_pressed.xml


+ 0 - 1
compdfkit-tools/src/main/res/layout/tools_cpdf_outline_list_fragment.xml

@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent">

+ 25 - 14
compdfkit-tools/src/main/res/layout/tools_item_search_text_content.xml

@@ -1,25 +1,36 @@
 <?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
-    android:layout_height="@dimen/qb_px_64">
+    android:layout_height="wrap_content">
+
     <TextView
         android:id="@+id/id_item_search_content_text"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/qb_px_32"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginTop="16dp"
+        android:layout_marginEnd="16dp"
         android:maxLines="3"
         android:minLines="3"
         android:textColor="@color/tools_search_result_text_color"
-        android:textSize="@dimen/qb_px_12"
-        android:layout_marginLeft="@dimen/qb_px_16"
-        android:layout_marginRight="@dimen/qb_px_16"
-        android:layout_marginTop="@dimen/qb_px_16"/>
+        android:textSize="12sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:text="PDF Document Search Keywords" />
+
     <View
         android:layout_width="match_parent"
-        android:layout_height="@dimen/qb_px_1"
-        android:background="#1a000000"
+        android:layout_height="1dp"
         android:layout_alignParentBottom="true"
-        android:layout_marginLeft="@dimen/qb_px_16"
-        android:layout_marginRight="@dimen/qb_px_16"/>
+        android:layout_marginStart="16dp"
+        android:layout_marginTop="4dp"
+        android:layout_marginEnd="16dp"
+        android:background="@color/tools_item_dividing_line_color"
+        app:layout_constraintTop_toBottomOf="@id/id_item_search_content_text" />
 
-</RelativeLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 7 - 7
compdfkit-tools/src/main/res/layout/tools_item_search_text_header.xml

@@ -2,24 +2,24 @@
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="@dimen/qb_px_24"
+    android:layout_height="wrap_content"
+    android:paddingVertical="6dp"
     android:background="@color/tools_search_result_text_item_bg">
     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="@string/tools_search_header_page"
-        android:layout_marginLeft="@dimen/qb_px_15"
-        android:textSize="@dimen/qb_px_12"
+        android:layout_marginStart="16dp"
+        android:textSize="12sp"
         android:layout_gravity="center"/>
-    <View
-        android:layout_width="@dimen/qb_px_5"
-        android:layout_height="match_parent"/>
+
     <TextView
         android:id="@+id/id_item_search_head_page"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:textSize="@dimen/qb_px_12"
+        android:textSize="12sp"
         android:layout_gravity="center"
+        android:layout_marginStart="8dp"
         android:text="10"/>
 
 </LinearLayout>

+ 3 - 1
compdfkit-tools/src/main/res/layout/tools_outline_list_item.xml

@@ -23,12 +23,14 @@
 
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/tv_outline_item_title"
-        android:layout_width="0dp"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:ellipsize="end"
         android:maxLines="1"
+        app:layout_constraintHorizontal_bias="0"
         android:minLines="1"
         android:paddingTop="12dp"
+        app:layout_constrainedWidth="true"
         android:paddingBottom="12dp"
         android:singleLine="true"
         android:textSize="14sp"

+ 5 - 5
compdfkit-tools/src/main/res/layout/tools_pdf_display_settings_dialog_fragment.xml

@@ -16,7 +16,7 @@
 
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/tv_reader_mode"
-        android:layout_width="match_parent"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="16dp"
         android:layout_marginTop="32dp"
@@ -80,7 +80,7 @@
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 
-        <com.google.android.material.switchmaterial.SwitchMaterial
+        <Switch
             android:id="@+id/sw_is_continue"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
@@ -110,7 +110,7 @@
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 
-        <com.google.android.material.switchmaterial.SwitchMaterial
+        <Switch
             android:id="@+id/sw_is_vertical"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
@@ -142,7 +142,7 @@
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 
-        <com.google.android.material.switchmaterial.SwitchMaterial
+        <Switch
             android:id="@+id/sw_is_crop"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
@@ -155,7 +155,7 @@
 
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/tv_reader_background_color"
-        android:layout_width="match_parent"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="16dp"
         android:layout_marginTop="32dp"

+ 1 - 0
compdfkit-tools/src/main/res/layout/tools_pdf_document_info_dialog_fragment.xml

@@ -19,6 +19,7 @@
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:fillViewport="true"
+        android:layoutDirection="ltr"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintTop_toBottomOf="@id/tool_bar">
 

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1285
compdfkit-tools/src/main/res/values-sw213dp/dimens.xml


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1285
compdfkit-tools/src/main/res/values-sw320dp/dimens.xml


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1285
compdfkit-tools/src/main/res/values-sw360dp/dimens.xml


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1285
compdfkit-tools/src/main/res/values-sw384dp/dimens.xml


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1285
compdfkit-tools/src/main/res/values-sw400dp/dimens.xml


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1285
compdfkit-tools/src/main/res/values-sw420dp/dimens.xml


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1285
compdfkit-tools/src/main/res/values-sw432dp/dimens.xml


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1285
compdfkit-tools/src/main/res/values-sw480dp/dimens.xml


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1285
compdfkit-tools/src/main/res/values-sw533dp/dimens.xml


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1285
compdfkit-tools/src/main/res/values-sw560dp/dimens.xml


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1285
compdfkit-tools/src/main/res/values-sw600dp/dimens.xml


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1285
compdfkit-tools/src/main/res/values-sw720dp/dimens.xml


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

@@ -1,4 +1,4 @@
-<resources xmlns:tools="http://schemas.android.com/tools">
+<resources>
 
     <string name="tools_common_okay">OK</string>
     <string name="tools_common_cancel">Cancel</string>

+ 1 - 1
compdfkit-tools/src/main/res/values/tools_styles.xml

@@ -9,7 +9,7 @@
     </style>
 
     <style name="tools_document_info_header">
-        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_width">wrap_content</item>
         <item name="android:layout_height">wrap_content</item>
         <item name="android:gravity">center_vertical|start</item>
         <item name="android:paddingStart">16dp</item>

+ 1 - 0
viewer-ctrl-demo/build.gradle

@@ -36,5 +36,6 @@ dependencies {
     implementation 'com.google.android.material:material:1.8.0'
     implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
     implementation project(':compdfkit-tools')
+    annotationProcessor 'com.github.bumptech.glide:compiler:4.15.1'
 
 }

+ 4 - 6
viewer-ctrl-demo/src/main/java/com/compdfkit/demo/viewer/MainActivity.java

@@ -9,19 +9,16 @@
 
 package com.compdfkit.demo.viewer;
 
-import androidx.appcompat.app.AppCompatActivity;
-
 import android.os.Bundle;
 import android.view.View;
 
-import com.compdfkit.demo.viewer.databinding.ViewerActivityMainBinding;
-
-
-import com.compdfkit.ui.textsearch.ITextSearcher;
+import androidx.appcompat.app.AppCompatActivity;
 
+import com.compdfkit.demo.viewer.databinding.ViewerActivityMainBinding;
 import com.compdfkit.tools.pdfbota.bota.CPDFBotaDialogFragment;
 import com.compdfkit.tools.pdfmore.CPDFMoreSettingsDialogFragment;
 import com.compdfkit.tools.utils.task.CExtractAssetFileTask;
+import com.compdfkit.ui.textsearch.ITextSearcher;
 
 public class MainActivity extends AppCompatActivity {
 
@@ -44,6 +41,7 @@ public class MainActivity extends AppCompatActivity {
                 runOnUiThread(() -> {
                     binding.pdfView.openPdfFile(pdfFile.getAbsolutePath());
                 }));
+
     }
 
 

+ 1 - 1
viewer-ctrl-demo/src/main/res/values-night/themes.xml

@@ -1,4 +1,4 @@
-<resources xmlns:tools="http://schemas.android.com/tools">
+<resources>
     <!-- Base application theme. -->
     <style name="Viewer_Ctrl_Demo_Theme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
         <item name="colorPrimary">@color/md_theme_dark_primary</item>

+ 1 - 1
viewer-ctrl-demo/src/main/res/values/themes.xml

@@ -1,4 +1,4 @@
-<resources xmlns:tools="http://schemas.android.com/tools">
+<resources>
     <!-- Base application theme. -->
     <style name="Viewer_Ctrl_Demo_Theme" parent="Theme.MaterialComponents.DayNight.NoActionBar">