Просмотр исходного кода

PDFTools(Android) - 1.完善代码结构 2.新增代码注释

liuxiaolong 1 год назад
Родитель
Сommit
5b13a381b9
20 измененных файлов с 316 добавлено и 246 удалено
  1. 6 0
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/bota/CPDFBotaDialogFragment.java
  2. 6 0
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/bota/adapter/CBotaViewPagerAdapter.java
  3. 2 2
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/pdfoutline/CPDFOutlineFragment.java
  4. 24 1
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/pdfoutline/adapter/COutlineListAdapter.java
  5. 10 0
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/pdfthumbnail/CPDFThumbnailFragment.java
  6. 6 0
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/pdfthumbnail/adpater/CPDFThumbnailListAdapter.java
  7. 26 12
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfdisplaysettings/CPDFDisplaySettingDialogFragment.java
  8. 5 5
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfsearch/CSearchResultBottomSheetDialogFragment.java
  9. 40 48
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfsearch/CSearchToolbar.java
  10. 18 11
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfsearch/adapter/CSearchTextRecyclerviewAdapter.java
  11. 28 15
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfsearch/bean/CSearchTextInfo.java
  12. 7 3
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfsearch/data/CPDFSearchKeywordsDatas.java
  13. 2 2
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/CPDFView.java
  14. 59 56
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/dialog/CCommonInputDialog.java
  15. 22 16
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/dialog/CGotoPageDialog.java
  16. 0 7
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/view/CPDFPageIndicatorView.java
  17. 6 0
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/view/CPDFSliderBarView.java
  18. 24 24
      compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/view/CPDFToolBar.java
  19. 1 4
      compdfkit-tools/src/main/res/values/tools_attrs.xml
  20. 24 40
      viewer-ctrl-demo/src/main/java/com/compdfkit/demo/viewer/MainActivity.java

+ 6 - 0
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/bota/CPDFBotaDialogFragment.java

@@ -29,6 +29,12 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
 import com.google.android.material.tabs.TabLayout;
 import com.google.android.material.tabs.TabLayoutMediator;
 
+
+/**
+ * The interface contains two PDF function lists, the PDF thumbnail list and the PDF outline list.
+ * @see com.compdfkit.tools.pdfbota.pdfthumbnail.CPDFThumbnailFragment
+ * @see com.compdfkit.tools.pdfbota.pdfoutline.CPDFOutlineFragment
+ */
 public class CPDFBotaDialogFragment extends BottomSheetDialogFragment {
 
     private TabLayout tabLayout;

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

@@ -22,6 +22,12 @@ import com.compdfkit.tools.interfaces.OnSetPDFDisplayPageIndexListener;
 import com.compdfkit.tools.pdfbota.pdfthumbnail.CPDFThumbnailFragment;
 import com.compdfkit.tools.pdfview.CPDFView;
 
+
+/**
+ * The adapter contains two fragments, namely the thumbnail list fragment and the PDF outline list fragment.
+ * @see CPDFThumbnailFragment
+ * @see CPDFOutlineFragment
+ */
 public class CBotaViewPagerAdapter extends FragmentStateAdapter {
     /**
      * Array of titles for the two fragments

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

@@ -80,7 +80,7 @@ public class CPDFOutlineFragment extends Fragment {
         rvOutlineRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
         rvOutlineRecyclerView.setAdapter(outlineListAdapter);
         // Set the list of outline data for the adapter to display.
-        outlineListAdapter.setList(getOutlineData(savedInstanceState));
+        outlineListAdapter.setList(getOutlineData());
     }
 
     /**
@@ -88,7 +88,7 @@ public class CPDFOutlineFragment extends Fragment {
      *
      * @return The list of outline data.
      */
-    private ArrayList<COutlineData> getOutlineData(Bundle savedInstanceState) {
+    private ArrayList<COutlineData> getOutlineData() {
         if (cpdfView != null) {
             return COutlineDatas.getOutlineList(cpdfView, OUTLINE_MAX_LEVEL);
         } else {

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

@@ -22,13 +22,31 @@ 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.pdfview.CPDFView;
+import com.compdfkit.ui.reader.CPDFReaderView;
 
 import java.util.ArrayList;
 import java.util.List;
 
 
+/**
+ * PDF outline data list. When the outline has sub-levels,<br/>
+ * the sub-level outline list can be expanded or collapsed by clicking.<br/>
+ * Clicking on a non-collapsible outline will jump to the corresponding PDF page.<br/>
+ *
+ * <p/>
+ * If you do not like this list style and want to obtain PDF outline data for display on your own,<br/>
+ * you can get the PDF outline data by calling "cpdfView.getCPdfReaderView().getPDFDocument().getOutlineRoot()". <br/>
+ * Alternatively, you can use the preprocessed data that we have provided for you.<br/>
+ * {@link com.compdfkit.tools.pdfbota.pdfoutline.data.COutlineDatas#getOutlineList(CPDFView cpdfView, int maxLevel)}
+ *
+ * @see CPDFView
+ * @see CPDFReaderView#getPDFDocument()
+ * @see com.compdfkit.tools.pdfbota.pdfoutline.data.COutlineDatas
+ */
 public class COutlineListAdapter extends RecyclerView.Adapter<COutlineListAdapter.OutlineItemViewHolder> {
 
+
     public static final String REFRESH_ARROW = "refresh_arrow";
 
     public ArrayList<COutlineData> list = new ArrayList<>();
@@ -38,7 +56,7 @@ public class COutlineListAdapter extends RecyclerView.Adapter<COutlineListAdapte
     /**
      * set outline list data
      *
-     * @param data
+     * @param data new outline list data
      */
     public void setList(ArrayList<COutlineData> data) {
         list.clear();
@@ -69,14 +87,19 @@ public class COutlineListAdapter extends RecyclerView.Adapter<COutlineListAdapte
         holder.ivItemArrow.setImageResource(item.isExpand() ? R.drawable.tools_ic_arrow_down : R.drawable.tools_ic_right);
 
         holder.itemView.setOnClickListener(v -> {
+            // Check if the child outline of the item is empty
             if (item.childOutlineIsEmpty()) {
+                // If the child outline is empty and an outlineClickListener is set, display the page
                 if (outlineClickListener != null) {
                     outlineClickListener.displayPage(item.getPageIndex());
                 }
             } else {
+                // If the child outline is not empty, check if the item is already expanded
                 if (item.isExpand()) {
+                    // If the item is already expanded, collapse it
                     collapseItem(holder.getAdapterPosition(), item);
                 } else {
+                    // If the item is not expanded, expand it
                     expandItem(holder.getAdapterPosition(), item);
                 }
             }

+ 10 - 0
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/pdfthumbnail/CPDFThumbnailFragment.java

@@ -27,6 +27,16 @@ import com.compdfkit.tools.interfaces.OnSetPDFDisplayPageIndexListener;
 import com.compdfkit.tools.pdfbota.pdfthumbnail.adpater.CPDFThumbnailListAdapter;
 import com.compdfkit.tools.pdfview.CPDFView;
 
+/**
+ * PDF thumbnail list Fragment.
+ *
+ * <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.
+ *
+ * @see CPDFThumbnailListAdapter
+ *
+ */
 public class CPDFThumbnailFragment extends Fragment {
 
     private RecyclerView rvThumbnailRecyclerView;

+ 6 - 0
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfbota/pdfthumbnail/adpater/CPDFThumbnailListAdapter.java

@@ -25,6 +25,11 @@ import com.compdfkit.tools.interfaces.OnSetPDFDisplayPageIndexListener;
 import com.compdfkit.tools.utils.glide.CPDFImageLoad;
 import com.compdfkit.tools.utils.glide.pdf.CGlidePDFUrl;
 
+/**
+ * PDF thumbnail list adapter, displays the thumbnail of each page of a PDF file,
+ * and clicking on it will navigate to the corresponding PDF page.
+ * <p/>
+ */
 public class CPDFThumbnailListAdapter extends RecyclerView.Adapter<CPDFThumbnailListAdapter.CPDFThumbnailItemViewHolder> {
 
     private CPDFDocument cPdfDocument;
@@ -45,6 +50,7 @@ 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(),

+ 26 - 12
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfdisplaysettings/CPDFDisplaySettingDialogFragment.java

@@ -32,11 +32,23 @@ import com.google.android.material.switchmaterial.SwitchMaterial;
 
 public class CPDFDisplaySettingDialogFragment extends BottomSheetDialogFragment implements RadioGroup.OnCheckedChangeListener, CompoundButton.OnCheckedChangeListener {
 
-    public static final int READER_BG_LIGHT_MODE = 0xFFFFFFFF;
-    public static final int READER_BG_DARK_MODE = 0xFF333333;
-    public static final int READER_BG_SEPIA_MODE = 0xFFFFEFBE;
 
-    public static final int READER_BG_RESEDA_MODE = 0XFFCDE6D0;
+    /**
+     * Bright mode, white color
+     */
+    public static final int READER_LIGHT_MODE = 0xFFFFFFFF;
+    /**
+     * Dark mode, dark gray color
+     */
+    public static final int READER_DARK_MODE = 0xFF333333;
+    /**
+     * Sepia mode, a color similar to the brown color of paper
+     */
+    public static final int READER_SEPIA_MODE = 0xFFFFEFBE;
+    /**
+     * Eye protection mode, light green color
+     */
+    public static final int READER_RESEDA_MODE = 0XFFCDE6D0;
 
 
     private CToolBar toolBar;
@@ -128,16 +140,16 @@ public class CPDFDisplaySettingDialogFragment extends BottomSheetDialogFragment
 
 
             switch (readerView.getReadBackgroundColor()) {
-                case READER_BG_LIGHT_MODE:
+                case READER_LIGHT_MODE:
                     rbLightMode.setChecked(true);
                     break;
-                case READER_BG_DARK_MODE:
+                case READER_DARK_MODE:
                     rbDarkMode.setChecked(true);
                     break;
-                case READER_BG_SEPIA_MODE:
+                case READER_SEPIA_MODE:
                     rbSepiaMode.setChecked(true);
                     break;
-                case READER_BG_RESEDA_MODE:
+                case READER_RESEDA_MODE:
                     rbResedaMode.setChecked(true);
                     break;
                 default:
@@ -149,18 +161,20 @@ public class CPDFDisplaySettingDialogFragment extends BottomSheetDialogFragment
     @Override
     public void onCheckedChanged(RadioGroup group, int checkedId) {
         if (checkedId == R.id.r_btn_light_mode) {
-            setReaderBackgroundColor(READER_BG_LIGHT_MODE);
+            setReaderBackgroundColor(READER_LIGHT_MODE);
         } else if (checkedId == R.id.r_btn_dark_mode) {
-            setReaderBackgroundColor(READER_BG_DARK_MODE);
+            setReaderBackgroundColor(READER_DARK_MODE);
         } else if (checkedId == R.id.r_btn_sepia_mode) {
-            setReaderBackgroundColor(READER_BG_SEPIA_MODE);
+            setReaderBackgroundColor(READER_SEPIA_MODE);
         } else if (checkedId == R.id.r_btn_reseda_mode) {
-            setReaderBackgroundColor(READER_BG_RESEDA_MODE);
+            setReaderBackgroundColor(READER_RESEDA_MODE);
         } else if (checkedId == R.id.r_btn_single_page) {
+
             if (cpdfView != null) {
                 cpdfView.getCPdfReaderView().setDoublePageMode(false);
                 cpdfView.getCPdfReaderView().setCoverPageMode(false);
             }
+
         } else if (checkedId == R.id.r_btn_double_page) {
             if (cpdfView != null) {
                 cpdfView.getCPdfReaderView().setDoublePageMode(true);

+ 5 - 5
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfsearch/CSearchResultBottomSheetDialogFragment.java

@@ -11,7 +11,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.compdfkit.tools.R;
-import com.compdfkit.tools.pdfsearch.adapter.CSearchTextRecyclerviewAdapter;
+import com.compdfkit.tools.pdfsearch.adapter.CSearchPDFTextRecyclerviewAdapter;
 import com.compdfkit.tools.pdfsearch.bean.CSearchTextInfo;
 import com.compdfkit.tools.utils.dialog.DialogFragmentUtil;
 import com.compdfkit.tools.utils.view.CToolBar;
@@ -27,8 +27,8 @@ public class CSearchResultBottomSheetDialogFragment extends BottomSheetDialogFra
     private RecyclerView recyclerView;
 
     private List<CSearchTextInfo> searchTextInfos = null;
-    private CSearchTextRecyclerviewAdapter searchTextAdapter;
-    private CSearchTextRecyclerviewAdapter.OnClickSearchItemListener onClickSearchItemListener;
+    private CSearchPDFTextRecyclerviewAdapter searchTextAdapter;
+    private CSearchPDFTextRecyclerviewAdapter.OnClickSearchItemListener onClickSearchItemListener;
 
     @Override
     public void onCreate(@Nullable Bundle savedInstanceState) {
@@ -66,7 +66,7 @@ public class CSearchResultBottomSheetDialogFragment extends BottomSheetDialogFra
         recyclerView = mContentView.findViewById(R.id.id_reader_search_recyclerView);
         LinearLayoutManager layoutManager = new LinearLayoutManager(recyclerView.getContext());
         recyclerView.setLayoutManager(layoutManager);
-        searchTextAdapter = new CSearchTextRecyclerviewAdapter();
+        searchTextAdapter = new CSearchPDFTextRecyclerviewAdapter();
         recyclerView.setAdapter(searchTextAdapter);
         if (null != searchTextInfos) {
             searchTextAdapter.clearList();
@@ -88,7 +88,7 @@ public class CSearchResultBottomSheetDialogFragment extends BottomSheetDialogFra
         }
     }
 
-    public void setOnClickSearchItemListener(CSearchTextRecyclerviewAdapter.OnClickSearchItemListener listener) {
+    public void setOnClickSearchItemListener(CSearchPDFTextRecyclerviewAdapter.OnClickSearchItemListener listener) {
         onClickSearchItemListener = listener;
         if (null != searchTextAdapter) {
             searchTextAdapter.setOnClickSearchItemListener(listener);

+ 40 - 48
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfsearch/CSearchToolbar.java

@@ -12,6 +12,8 @@ import android.widget.ImageView;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+import androidx.fragment.app.FragmentManager;
+
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.pdfsearch.bean.CSearchTextInfo;
 import com.compdfkit.tools.pdfsearch.data.CPDFSearchKeywordsDatas;
@@ -31,13 +33,15 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
 
     private CPDFView cpdfView;
 
-    OnSearchListener onSearchListener = null;
+    OnExitSearchListener onExitSearchListener = null;
     List<CSearchTextInfo> searchTextInfos = null;
 
+    private FragmentManager fragmentManager;
 
     public CSearchToolbar(Context context, AttributeSet attrs) {
         super(context, attrs);
         init(context);
+
     }
 
     public CSearchToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
@@ -45,10 +49,6 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
         init(context);
     }
 
-    public CSearchToolbar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
-        super(context, attrs, defStyleAttr, defStyleRes);
-        init(context);
-    }
 
     public void setCpdfView(CPDFView cpdfView) {
         this.cpdfView = cpdfView;
@@ -80,7 +80,13 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
 
             @Override
             public void afterTextChanged(Editable s) {
-                startSearch(searchEdit.getText().toString());
+                startSearch(searchEdit.getText().toString(), list -> {
+                    searchTextInfos = list;
+                    if (list.size() > 0) {
+                        CSearchTextInfo searchTextInfo = searchTextInfos.get(0);
+                        cpdfView.getCPdfReaderView().getTextSearcher().searchBegin(searchTextInfo.page, searchTextInfo.textRangeIndex);
+                    }
+                });
             }
         });
 
@@ -103,7 +109,7 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
         }
     }
 
-    private void startSearch(String keywords) {
+    private void startSearch(String keywords, OnSearchResultListener searchResultListener) {
         if (TextUtils.isEmpty(keywords)) {
             return;
         }
@@ -122,10 +128,8 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
             @Override
             protected void onPostExecute(List<CSearchTextInfo> list) {
                 super.onPostExecute(list);
-                searchTextInfos = list;
-                if (list.size() > 0) {
-                    CSearchTextInfo searchTextInfo = searchTextInfos.get(0);
-                    cpdfView.getCPdfReaderView().getTextSearcher().searchBegin(searchTextInfo.page, searchTextInfo.textRangeIndex);
+                if (searchResultListener != null) {
+                    searchResultListener.result(list);
                 }
             }
         };
@@ -140,41 +144,15 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
             cpdfView.getCPdfReaderView().getTextSearcher().searchForward();
     }
 
-    private void startSearch() {
-        final String search = searchEdit.getText().toString();
-        if (!TextUtils.isEmpty(search)) {
-            cancelTask();
-            searchTask = new AsyncTask<Void, Void, List<CSearchTextInfo>>() {
-                @Override
-                protected void onPreExecute() {
-                    super.onPreExecute();
-                }
-
-                @Override
-                protected List<CSearchTextInfo> doInBackground(Void... voids) {
-                    return CPDFSearchKeywordsDatas.startSearch(cpdfView, search);
 
-                }
-
-                @Override
-                protected void onPostExecute(List<CSearchTextInfo> list) {
-                    super.onPostExecute(list);
-                    if (onSearchListener != null) {
-                        onSearchListener.show(list);
-                    }
-                }
-            };
-            searchTask.execute();
-        }
-    }
 
     @Override
     public void onClick(View view) {
         int id = view.getId();
         if (id == R.id.complete) {
             cancelTask();
-            if (null != onSearchListener) {
-                onSearchListener.onExitSearch();
+            if (null != onExitSearchListener) {
+                onExitSearchListener.exitSearch();
             }
             searchEdit.setText("");
         } else if (id == R.id.iv_search_next) {
@@ -182,24 +160,38 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
         } else if (id == R.id.iv_search_previous) {
             previous();
         } else if (id == R.id.iv_search_list) {
-            startSearch();
+            startSearch(searchEdit.getText().toString(), list -> {
+                if (fragmentManager != null) {
+                    CSearchResultBottomSheetDialogFragment searchResultDialog = new CSearchResultBottomSheetDialogFragment();
+                    searchResultDialog.show(fragmentManager, "search");
+                    searchResultDialog.setSearchTextInfos(list);
+                    searchResultDialog.setOnClickSearchItemListener(clickItem -> {
+                        cpdfView.getCPdfReaderView().setDisplayPageIndex(clickItem.page);
+                        cpdfView.getCPdfReaderView().getTextSearcher().searchBegin(clickItem.page, clickItem.textRangeIndex);
+                        searchResultDialog.dismiss();
+                    });
+                }
+            });
         }
     }
 
-    public void setSearchListener(OnSearchListener onSearchListener) {
-        this.onSearchListener = onSearchListener;
+    public void setExitSearchListener(OnExitSearchListener onExitSearchListener) {
+        this.onExitSearchListener = onExitSearchListener;
     }
 
+    public void bindingFragmentManager(FragmentManager fragmentManager){
+        this.fragmentManager = fragmentManager;
+    }
 
+    interface OnSearchResultListener {
+        void result(List<CSearchTextInfo> list);
+    }
 
-    public interface OnSearchListener {
-
-
-        void onExitSearch();
+    public interface OnExitSearchListener {
+        void exitSearch();
+    }
 
-        void show(List<CSearchTextInfo> list);
 
-    }
 
 
 

+ 18 - 11
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfsearch/adapter/CSearchTextRecyclerviewAdapter.java

@@ -22,22 +22,29 @@ import com.compdfkit.tools.pdfsearch.bean.CSearchTextInfo;
 import java.util.ArrayList;
 import java.util.List;
 
-public class CSearchTextRecyclerviewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
-    /****** 头部 ******/
+
+/**
+ * PDF text search result list adapter. The search results will be displayed in groups according to the page numbers.
+ *
+ *
+ */
+public class CSearchPDFTextRecyclerviewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
+
+    /**
+     * head item type
+     */
     private final static int ITEM_TYPE_HEAD = 0x100;
-    /****** 搜索的内容 ******/
+    /**
+     * search result data item type
+     */
     private final static int ITEM_TYPE_CONTENT = 0x200;
-    private final List<CSearchTextInfo> searchTextInfoList;
+    private final List<CSearchTextInfo> searchTextInfoList = new ArrayList<>();
 
     private OnClickSearchItemListener onClickSearchItemListener;
 
-    public CSearchTextRecyclerviewAdapter() {
-        this.searchTextInfoList = new ArrayList<>();
+    public CSearchPDFTextRecyclerviewAdapter() {
     }
 
-    public void addItem(CSearchTextInfo item) {
-        searchTextInfoList.add(item);
-    }
 
     public void addList(List<CSearchTextInfo> list) {
         searchTextInfoList.addAll(list);
@@ -62,7 +69,7 @@ public class CSearchTextRecyclerviewAdapter extends RecyclerView.Adapter<Recycle
 
     @Override
     public int getItemViewType(int position) {
-        if (searchTextInfoList != null && searchTextInfoList.size() > 0) {
+        if ( searchTextInfoList.size() > 0) {
             if (searchTextInfoList.get(position).isHeader) {
                 return ITEM_TYPE_HEAD;
             }
@@ -73,7 +80,7 @@ public class CSearchTextRecyclerviewAdapter extends RecyclerView.Adapter<Recycle
     @Override
     public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
         final int adapterPosition = holder.getAdapterPosition();
-        if (searchTextInfoList != null && searchTextInfoList.size() > 0) {
+        if (searchTextInfoList.size() > 0) {
             if (holder instanceof SearchTextHeadViewHolder) {
                 ((SearchTextHeadViewHolder) holder).idItemSearchHeadPage.setText(String.valueOf(searchTextInfoList.get(adapterPosition).page + 1));
             } else {

+ 28 - 15
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfsearch/bean/CSearchTextInfo.java

@@ -1,3 +1,12 @@
+/**
+ * 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.pdfsearch.bean;
 
 import android.content.Context;
@@ -15,11 +24,7 @@ import com.compdfkit.tools.R;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-/**
- * @classname:SearchTextInfo
- * @date:2018/8/23 下午1:46
- * @description:
- */
+
 public class CSearchTextInfo {
 
     private Context context;
@@ -29,17 +34,21 @@ public class CSearchTextInfo {
     public boolean isHeader;
     public int textRangeIndex;
 
-    public CSearchTextInfo(Context context, int page, String keyword, CPDFTextPage textPage, CPDFTextRange textRange, int textRangeIndex, boolean isHeader) {
+    public CSearchTextInfo(Context context, int page, String keyword, int textRangeIndex, boolean isHeader) {
         this.context = context;
         this.page = page;
         this.keyword = keyword;
         this.isHeader = isHeader;
         this.textRangeIndex = textRangeIndex;
 
-        if (isHeader) {
+
+
+    }
+
+    public void initHighLightTextData(Context context, CPDFTextPage textPage, CPDFTextRange textRange){
+        if (textPage == null || textRange == null){
             return;
         }
-
         int targetStart = textRange.location - 20;
         int length;
         if (targetStart > 0) {
@@ -51,27 +60,31 @@ public class CSearchTextInfo {
         CPDFTextRange targetTextRange = new CPDFTextRange(targetStart, length);
         String target = textPage.getText(targetTextRange);
 
-        this.stringBuilder = highlight(target.toLowerCase(), keyword.toLowerCase());
+        this.stringBuilder = highlight(context, target.toLowerCase(), keyword.toLowerCase());
+
     }
 
     /**
-     * 关键字高亮显示
+     * Highlight keywords
      *
-     * @param text   需要显示的文字
-     * @param target 需要高亮的关键字
-     * @return spannable 处理完后的结果,记得不要toString(),否则没有效果
+     * @param text   The text to be displayed
+     * @param target The keyword to be highlighted
+     * @return spannable The processed result, remember not to use toString(), otherwise it won't work
      */
-    private SpannableStringBuilder highlight(String text, String target) {
+    private SpannableStringBuilder highlight(Context context, String text, String target) {
         SpannableStringBuilder spannable = new SpannableStringBuilder(text);
         CharacterStyle span;
         Pattern p = Pattern.compile(target);
         Matcher m = p.matcher(text);
         int backGroundColor = ContextCompat.getColor(context, R.color.tools_search_result_text_highlight);
         while (m.find()) {
-            /****** 需要重复 ******/
             span = new BackgroundColorSpan(backGroundColor);
             spannable.setSpan(span, m.start(), m.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
         }
         return spannable;
     }
+
+
+
+
 }

+ 7 - 3
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfsearch/data/CPDFSearchKeywordsDatas.java

@@ -24,6 +24,8 @@ import com.compdfkit.ui.textsearch.ITextSearcher;
 import java.util.ArrayList;
 import java.util.List;
 
+
+
 public class CPDFSearchKeywordsDatas {
 
 
@@ -46,8 +48,8 @@ public class CPDFSearchKeywordsDatas {
             }
             final List<CSearchTextInfo> searchPageContent = findSearchText(cpdfView.getContext(), textSearcher, textPage, keywords, i);
             if (searchPageContent.size() > 0) {
-                final int searchPageNum = i;
-                final CSearchTextInfo pageTextInfo = new CSearchTextInfo(cpdfView.getContext(), searchPageNum, keywords, null, null, 0, true);
+                final CSearchTextInfo pageTextInfo = new CSearchTextInfo(cpdfView.getContext(), i, keywords, 0,true);
+                pageTextInfo.initHighLightTextData(cpdfView.getContext(), null,null);
                 searchTextInfoList.add(pageTextInfo);
                 searchTextInfoList.addAll(searchPageContent);
             }
@@ -60,7 +62,9 @@ public class CPDFSearchKeywordsDatas {
         ArrayList<CPDFTextRange> textRanges = textSearcher.searchKeyword(page);
         ArrayList<CSearchTextInfo> searchTextInfos = new ArrayList<>(textRanges.size());
         for (int i = 0; i < textRanges.size(); i++) {
-            searchTextInfos.add(new CSearchTextInfo(context, page, keyword, textPage, textRanges.get(i), i, false));
+            CSearchTextInfo textInfo = new CSearchTextInfo(context, page, keyword, i, false);
+            textInfo.initHighLightTextData(context, textPage, textRanges.get(i));
+            searchTextInfos.add(textInfo);
         }
         return searchTextInfos;
     }

+ 2 - 2
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/CPDFView.java

@@ -259,8 +259,8 @@ public class CPDFView extends RelativeLayout implements IReaderViewCallback {
         indicatorView.setPageIndicatorClickListener(pageIndex -> {
             CGotoPageDialog dialog = new CGotoPageDialog(getContext());
             dialog.setHintInputText(getContext().getString(R.string.tools_search_header_page) +
-                    String.format(" (%d/%d)", currentPageIndex + 1, totalPageCount));
-            dialog.setTotoPageListener(page -> {
+                    String.format(" (%d/%d)", 1, totalPageCount));
+            dialog.setOnSetPDFDisplayPageIndexListener(page -> {
                 if (page <= totalPageCount && page > 0){
                     cPdfReaderView.setDisplayPageIndex(page - 1, true);
                 }

+ 59 - 56
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/dialog/CCommonInputDialog.java

@@ -1,3 +1,12 @@
+/**
+ * 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.pdfview.dialog;
 
 import android.content.Context;
@@ -13,33 +22,24 @@ import androidx.appcompat.app.AppCompatDialog;
 
 import com.compdfkit.tools.R;
 
-/**
- * @author luozhipeng
- * @classname CommonInputDialog
- * @date 2020-02-21 11:42
- * @description
- */
-public class CCommonInputDialog extends AppCompatDialog {
 
-    private Context context;
+public class CCommonInputDialog extends AppCompatDialog {
 
     private String title;
-    private String message;
-    private String cancelStr;
-    private String okStr;
-    private Runnable cancelCallback;
-    private OnInputConpleteListener onInputConpleteListener;
-
-    private View mView;
+    private String hintMessageText;
+    private String cancelText;
+    private String confirmText;
+    private OnCancelClickListener cancelClickListener;
+    private OnInputCompleteListener onInputCompleteListener;
 
-    private TextView titleTv;
+    private TextView tvTitle;
 
-    private TextView messageTv;
+    private TextView tvMessage;
     private String messageStrTv;
 
-    private EditText messageEt;
-    private Button cancelBt;
-    private Button okBt;
+    private EditText etMessage;
+    private Button btnCancel;
+    private Button btnConfirm;
 
     public CCommonInputDialog(Context context) {
         super(context);
@@ -57,30 +57,29 @@ public class CCommonInputDialog extends AppCompatDialog {
     }
 
     private void initView(Context context) {
-        this.context = context;
 
-        mView = View.inflate(context, R.layout.tools_common_input_dialog_layout, null);
+        View rootView = View.inflate(context, R.layout.tools_common_input_dialog_layout, null);
 
-        titleTv = mView.findViewById(R.id.common_input_dialog_title);
+        tvTitle = rootView.findViewById(R.id.common_input_dialog_title);
 
-        messageTv = mView.findViewById(R.id.common_input_dialog_message);
+        tvMessage = rootView.findViewById(R.id.common_input_dialog_message);
 
-        messageEt = mView.findViewById(R.id.common_input_dialog_et);
-        cancelBt = mView.findViewById(R.id.common_input_dialog_cancel);
-        okBt = mView.findViewById(R.id.common_input_dialog_ok);
-        cancelBt.setOnClickListener(v -> {
-            if (cancelCallback != null) {
-                cancelCallback.run();
+        etMessage = rootView.findViewById(R.id.common_input_dialog_et);
+        btnCancel = rootView.findViewById(R.id.common_input_dialog_cancel);
+        btnConfirm = rootView.findViewById(R.id.common_input_dialog_ok);
+        btnCancel.setOnClickListener(v -> {
+            if (cancelClickListener != null) {
+                cancelClickListener.click();
             }
         });
 
-        okBt.setOnClickListener(v -> {
-            if (onInputConpleteListener != null) {
-                onInputConpleteListener.getInputText(messageEt.getText().toString());
+        btnConfirm.setOnClickListener(v -> {
+            if (onInputCompleteListener != null) {
+                onInputCompleteListener.getInputText(etMessage.getText().toString());
             }
         });
 
-        setContentView(mView);
+        setContentView(rootView);
 
         Window window = getWindow();
         WindowManager m = window.getWindowManager();
@@ -92,55 +91,55 @@ public class CCommonInputDialog extends AppCompatDialog {
 
     private void initVisibility() {
         if (TextUtils.isEmpty(title)) {
-            titleTv.setVisibility(View.GONE);
+            tvTitle.setVisibility(View.GONE);
         } else {
-            titleTv.setVisibility(View.VISIBLE);
+            tvTitle.setVisibility(View.VISIBLE);
         }
 
         if (TextUtils.isEmpty(messageStrTv)) {
-            messageTv.setVisibility(View.GONE);
+            tvMessage.setVisibility(View.GONE);
         } else {
-            messageTv.setVisibility(View.VISIBLE);
+            tvMessage.setVisibility(View.VISIBLE);
         }
 
-        if (cancelCallback != null) {
-            cancelBt.setVisibility(View.VISIBLE);
+        if (cancelClickListener != null) {
+            btnCancel.setVisibility(View.VISIBLE);
         } else {
-            cancelBt.setVisibility(View.GONE);
+            btnCancel.setVisibility(View.GONE);
         }
     }
 
     public void setInputType(int type) {
-        messageEt.setInputType(type);
+        etMessage.setInputType(type);
     }
 
-    public CCommonInputDialog setTitle(String title) {
-        this.title = title;
-        titleTv.setText(title);
+    public CCommonInputDialog setTitle(String titleText) {
+        this.title = titleText;
+        tvTitle.setText(titleText);
         return this;
     }
 
     public CCommonInputDialog setMessage(String message) {
         this.messageStrTv = message;
-        messageTv.setText(message);
+        tvMessage.setText(message);
         return this;
     }
 
-    public CCommonInputDialog setHintInputText(String message) {
-        this.message = message;
-        messageEt.setHint(message);
+    public CCommonInputDialog setHintInputText(String hintMessageText) {
+        this.hintMessageText = hintMessageText;
+        etMessage.setHint(hintMessageText);
         return this;
     }
 
-    public CCommonInputDialog setCancelCallback(String cancelStr, Runnable cancelCallback) {
-        this.cancelStr = cancelStr;
-        this.cancelCallback = cancelCallback;
+    public CCommonInputDialog setCancelCallback(String cancelText, OnCancelClickListener cancelClickListener) {
+        this.cancelText = cancelText;
+        this.cancelClickListener = cancelClickListener;
         return this;
     }
 
-    public CCommonInputDialog setOkCallback(String okStr, OnInputConpleteListener onInputConpleteListener) {
-        this.okStr = okStr;
-        this.onInputConpleteListener = onInputConpleteListener;
+    public CCommonInputDialog setConfirmCallback(String confirmText, OnInputCompleteListener onInputCompleteListener) {
+        this.confirmText = confirmText;
+        this.onInputCompleteListener = onInputCompleteListener;
         return this;
     }
 
@@ -150,7 +149,11 @@ public class CCommonInputDialog extends AppCompatDialog {
         super.show();
     }
 
-    public interface OnInputConpleteListener {
+    public interface OnInputCompleteListener {
         void getInputText(String text);
     }
+
+    public interface OnCancelClickListener {
+        void click();
+    }
 }

+ 22 - 16
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/dialog/CGotoPageDialog.java

@@ -1,3 +1,12 @@
+/**
+ * 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.pdfview.dialog;
 
 import android.content.Context;
@@ -5,10 +14,11 @@ import android.text.InputType;
 import android.text.TextUtils;
 
 import com.compdfkit.tools.R;
+import com.compdfkit.tools.interfaces.OnSetPDFDisplayPageIndexListener;
 
 public class CGotoPageDialog extends CCommonInputDialog {
 
-    private OnGotoPageListener onGotoPageListener = null;
+    private OnSetPDFDisplayPageIndexListener onSetPDFDisplayPageIndexListener;
 
     public CGotoPageDialog(Context context) {
         super(context);
@@ -25,35 +35,31 @@ public class CGotoPageDialog extends CCommonInputDialog {
         initDialogView();
     }
 
-    public void setTotoPageListener(OnGotoPageListener onGotoPageListener) {
-        this.onGotoPageListener = onGotoPageListener;
+    public void setOnSetPDFDisplayPageIndexListener(OnSetPDFDisplayPageIndexListener onSetPDFDisplayPageIndexListener) {
+        this.onSetPDFDisplayPageIndexListener = onSetPDFDisplayPageIndexListener;
     }
 
+
     private void initDialogView() {
         setTitle(R.string.tools_goto_page_dialog_title);
         setMessage(getContext().getResources().getText(R.string.tools_goto_page_dialog_msg).toString());
-//        setHintInputText(getContext().getResources().getText(R.string.tools_goto_page_dialog_hint).toString());
         setInputType(InputType.TYPE_CLASS_NUMBER);
-        setOkCallback(getContext().getResources().getText(R.string.tools_common_okay).toString(), text -> {
-            if (null != onGotoPageListener && (!TextUtils.isEmpty(text))) {
-               int page = -1;
+        setConfirmCallback(getContext().getResources().getText(R.string.tools_common_okay).toString(), text -> {
+            if (null != onSetPDFDisplayPageIndexListener && (!TextUtils.isEmpty(text))) {
+               int page;
                try {
                    page = Integer.parseInt(text);
+                   if (page >= 0) {
+                       onSetPDFDisplayPageIndexListener.displayPage(page);
+                   }
                } catch (NumberFormatException e) {
 
                }
-                if (page >= 0) {
-                    onGotoPageListener.onGotoPage(page);
-                }
+
             }
             dismiss();
         });
-        setCancelCallback(getContext().getResources().getText(R.string.tools_common_cancel).toString(), ()-> {
-            dismiss();
-        });
+        setCancelCallback(getContext().getResources().getText(R.string.tools_common_cancel).toString(), ()-> dismiss());
     }
 
-    public interface OnGotoPageListener {
-        public void onGotoPage(int page);
-    }
 }

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

@@ -62,13 +62,6 @@ public class CPDFPageIndicatorView extends LinearLayout {
         initView();
     }
 
-    private void initAttr(Context context, AttributeSet attributeSet){
-        TypedArray typedArray = context.obtainStyledAttributes(attributeSet, R.styleable.CPDFPageIndicatorView);
-        if (typedArray != null){
-            typedArray.recycle();
-        }
-    }
-
 
     /**
      * Initializes the view by creating and configuring the text view and adding it to the layout.

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

@@ -25,6 +25,12 @@ import com.compdfkit.tools.utils.glide.pdf.CGlidePDFUrl;
 import com.compdfkit.ui.widget.CPDFSlideBar;
 
 
+/**
+ *
+ *
+ *
+ *
+ */
 public class CPDFSliderBarView extends CPDFSlideBar implements CPDFSlideBar.OnScrollToPageListener {
 
     int currentScrollPageIndex = -1;

+ 24 - 24
compdfkit-tools/src/main/java/com/compdfkit/tools/pdfview/view/CPDFToolBar.java

@@ -29,30 +29,30 @@ import com.compdfkit.tools.utils.viewutils.ViewUtils;
 
 
 /**
- * pdf ui tool bar
- * ︳------------------------------------------------︳
- * ︳                 title     icon1  icon2 icon3   ︳
- * ︳------------------------------------------------︳
- * icon1: searchIcon
- * icon2: boTaIcon
- * icon3: moreIcon
- *
- * use samples:
- * <com.compdfkit.tools.pdfview.view.CPDFToolBar
- *     android:id="@+id/pdf_tool_bar"
- *     android:layout_width="match_parent"
- *     android:layout_height="?android:attr/actionBarSize"
- *     app:tools_toolbar_title="@string/viewer_toolbar_title"
- *     app:tools_toolbar_bota_icon="@drawable/xxx"
- *     app:tools_toolbar_more_icon="@drawable/xxx"
- *     app:tools_toolbar_search_icon="@drawable/xxx"/>
- *
- * custom attrs:
- * app:tools_toolbar_title="@string/xxx"
- * app:tools_toolbar_search_icon="@drawable/xxx"
- * app:tools_toolbar_bota_icon="@drawable/xxx"
- * app:tools_toolbar_more_icon="@drawable/xxx"
- *
+ * pdf ui tool bar <br/>
+ * ︳------------------------------------------------︳<br/>
+ * ︳        title     icon1  icon2 icon3   ︳<br/>
+ * ︳------------------------------------------------︳<br/>
+ * icon1: searchIcon <br/>
+ * icon2: boTaIcon <br/>
+ * icon3: moreIcon <br/>
+ * <p/>
+ * use samples:<br/>
+ * com.compdfkit.tools.pdfview.view.CPDFToolBar <br/>
+ *     android:id="@+id/pdf_tool_bar" <br/>
+ *     android:layout_width="match_parent" <br/>
+ *     android:layout_height="?android:attr/actionBarSize" <br/>
+ *     app:tools_toolbar_title="@string/viewer_toolbar_title" <br/>
+ *     app:tools_toolbar_bota_icon="@drawable/xxx" <br/>
+ *     app:tools_toolbar_more_icon="@drawable/xxx" <br/>
+ *     app:tools_toolbar_search_icon="@drawable/xxx"/> <br/>
+ * <p/>
+ * custom attrs: <br/>
+ * app:tools_toolbar_title="@string/xxx" <br/>
+ * app:tools_toolbar_search_icon="@drawable/xxx" <br/>
+ * app:tools_toolbar_bota_icon="@drawable/xxx" <br/>
+ * app:tools_toolbar_more_icon="@drawable/xxx" <br/>
+ * <p/>
  * btn click listener
  * searchBtnClick:
  * @see CPDFToolBar#setSearchBtnClickListener(OnClickListener)

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

@@ -27,8 +27,5 @@
         <attr name="tools_enable_page_indicator" format="boolean"/>
     </declare-styleable>
 
-    <declare-styleable name="CPDFPageIndicatorView" tools:ignore="ResourceName">
-        <attr name="android:textColor"/>
-        <attr name="android:background"/>
-    </declare-styleable>
+
 </resources>

+ 24 - 40
viewer-ctrl-demo/src/main/java/com/compdfkit/demo/viewer/MainActivity.java

@@ -1,28 +1,23 @@
+/**
+ * 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.demo.viewer;
 
 import androidx.appcompat.app.AppCompatActivity;
 
 import android.os.Bundle;
 import android.view.View;
-import android.widget.Toast;
 
-import com.compdfkit.core.document.CPDFDocument;
-import com.compdfkit.core.page.CPDFPage;
-import com.compdfkit.core.page.CPDFTextPage;
-import com.compdfkit.core.page.CPDFTextRange;
-import com.compdfkit.core.page.CPDFTextSearcher;
 import com.compdfkit.demo.viewer.databinding.ViewerActivityMainBinding;
 
 
-import com.compdfkit.tools.pdfsearch.CSearchToolbar;
-import com.compdfkit.tools.pdfsearch.adapter.CSearchTextRecyclerviewAdapter;
-import com.compdfkit.tools.pdfsearch.bean.CSearchTextInfo;
-import com.compdfkit.tools.pdfsearch.CSearchResultBottomSheetDialogFragment;
-import com.compdfkit.tools.pdfsearch.data.CPDFSearchKeywordsDatas;
-import com.compdfkit.ui.reader.CPDFReaderView;
 import com.compdfkit.ui.textsearch.ITextSearcher;
-import java.util.ArrayList;
-import java.util.List;
 
 import com.compdfkit.tools.pdfbota.bota.CPDFBotaDialogFragment;
 import com.compdfkit.tools.pdfmore.CPDFMoreSettingsDialogFragment;
@@ -43,13 +38,12 @@ public class MainActivity extends AppCompatActivity {
         binding = ViewerActivityMainBinding.inflate(getLayoutInflater());
         setContentView(binding.getRoot());
         initToolbarListener();
-        intSearchBarListener();
+        initSearchBar();
+        //Extract PDF files from the Android assets folder
         CExtractAssetFileTask.extract(this, QUICK_START_GUIDE, QUICK_START_GUIDE, (pdfFile) ->
                 runOnUiThread(() -> {
                     binding.pdfView.openPdfFile(pdfFile.getAbsolutePath());
                 }));
-        binding.pdfSearchToolBar.setCpdfView(binding.pdfView);
-
     }
 
 
@@ -59,40 +53,30 @@ public class MainActivity extends AppCompatActivity {
             binding.pdfSearchToolBar.setVisibility(View.VISIBLE);
         });
         binding.pdfToolBar.setBoTaBtnClickListener(v -> {
+            //Show a fragment of the PDF thumbnail and a dialog fragment of the PDF outline list.
             CPDFBotaDialogFragment botaDialogFragment = CPDFBotaDialogFragment.newInstance();
             botaDialogFragment.setCPdfReaderView(binding.pdfView);
             botaDialogFragment.show(getSupportFragmentManager(), "boTaDialogFragment");
         });
         binding.pdfToolBar.setMoreBtnClickListener(v -> {
+            //Show the PDF settings dialog fragment
             CPDFMoreSettingsDialogFragment.show(getSupportFragmentManager(), binding.pdfView);
         });
     }
-    private void intSearchBarListener() {
-        binding.pdfSearchToolBar.setSearchListener(new CSearchToolbar.OnSearchListener() {
-            @Override
-            public void onExitSearch() {
-                ITextSearcher searcher = binding.pdfView.getCPdfReaderView().getTextSearcher();
-                if (searcher != null) {
-                    searcher.cancelSearch();
-                    binding.pdfView.getCPdfReaderView().reloadPages();
-                }
-                binding.pdfToolBar.setVisibility(View.VISIBLE);
-                binding.pdfSearchToolBar.setVisibility(View.GONE);
-            }
 
-            @Override
-            public void show(List<CSearchTextInfo> list) {
-                CSearchResultBottomSheetDialogFragment searchResultDialog = new CSearchResultBottomSheetDialogFragment();
-                searchResultDialog.show(getSupportFragmentManager(), "search");
-                searchResultDialog.setSearchTextInfos(list);
-                searchResultDialog.setOnClickSearchItemListener(clickItem -> {
-                    binding.pdfView.getCPdfReaderView().setDisplayPageIndex(clickItem.page);
-                    binding.pdfView.getCPdfReaderView().getTextSearcher().searchBegin(clickItem.page, clickItem.textRangeIndex);
-                    searchResultDialog.dismiss();
-                });
+    private void initSearchBar() {
+
+        binding.pdfSearchToolBar.setCpdfView(binding.pdfView);
+        binding.pdfSearchToolBar.bindingFragmentManager(getSupportFragmentManager());
+        binding.pdfSearchToolBar.setExitSearchListener(()->{
+            ITextSearcher searcher = binding.pdfView.getCPdfReaderView().getTextSearcher();
+            if (searcher != null) {
+                searcher.cancelSearch();
+                binding.pdfView.getCPdfReaderView().invalidateAllChildren();
             }
+            binding.pdfToolBar.setVisibility(View.VISIBLE);
+            binding.pdfSearchToolBar.setVisibility(View.GONE);
         });
-
     }
 
 }