MainActivity.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458
  1. /**
  2. * Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
  3. * <p>
  4. * THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  5. * AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  6. * UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  7. * This notice may not be removed from this file.
  8. */
  9. package com.compdfkit.pdfviewer;
  10. import static com.compdfkit.tools.contenteditor.CEditToolbar.SELECT_AREA_IMAGE;
  11. import static com.compdfkit.tools.contenteditor.CEditToolbar.SELECT_AREA_TEXT;
  12. import static com.compdfkit.ui.contextmenu.CPDFContextMenuShowHelper.AddEditImageArea;
  13. import static com.compdfkit.ui.contextmenu.CPDFContextMenuShowHelper.ReplaceEditImageArea;
  14. import android.Manifest;
  15. import android.content.Intent;
  16. import android.net.Uri;
  17. import android.os.Bundle;
  18. import android.view.View;
  19. import android.widget.Toast;
  20. import androidx.activity.result.ActivityResultLauncher;
  21. import androidx.activity.result.contract.ActivityResultContracts;
  22. import androidx.annotation.NonNull;
  23. import androidx.annotation.Nullable;
  24. import com.compdfkit.core.annotation.CPDFAnnotation;
  25. import com.compdfkit.core.annotation.form.CPDFWidget;
  26. import com.compdfkit.core.edit.CPDFEditManager;
  27. import com.compdfkit.pdfviewer.databinding.PdfSampleActivityBinding;
  28. import com.compdfkit.tools.common.activity.CBasicActivity;
  29. import com.compdfkit.tools.common.contextmenu.CPDFContextMenuHelper;
  30. import com.compdfkit.tools.common.utils.CFileUtils;
  31. import com.compdfkit.tools.common.utils.CUriUtil;
  32. import com.compdfkit.tools.common.utils.annotation.CPDFAnnotationManager;
  33. import com.compdfkit.tools.common.utils.dialog.CAlertDialog;
  34. import com.compdfkit.tools.common.utils.task.CExtractAssetFileTask;
  35. import com.compdfkit.tools.common.utils.window.CPopupMenuWindow;
  36. import com.compdfkit.tools.common.views.pdfbota.CPDFBOTA;
  37. import com.compdfkit.tools.common.views.pdfbota.CPDFBotaDialogFragment;
  38. import com.compdfkit.tools.common.views.pdfbota.CPDFBotaFragmentTabs;
  39. import com.compdfkit.tools.common.views.pdfproperties.CAnnotationType;
  40. import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CAnnotStyle;
  41. import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CStyleDialogFragment;
  42. import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CStyleType;
  43. import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.manager.CStyleManager;
  44. import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
  45. import com.compdfkit.tools.contenteditor.CPDFEditType;
  46. import com.compdfkit.tools.viewer.pdfsearch.CSearchResultDialogFragment;
  47. import com.compdfkit.ui.contextmenu.IContextMenuShowListener;
  48. import com.compdfkit.ui.proxy.form.CPDFComboboxWidgetImpl;
  49. import com.compdfkit.ui.proxy.form.CPDFListboxWidgetImpl;
  50. import com.compdfkit.ui.proxy.form.CPDFPushbuttonWidgetImpl;
  51. import com.compdfkit.ui.reader.CPDFPageView;
  52. import com.compdfkit.ui.reader.CPDFReaderView;
  53. import java.util.ArrayList;
  54. import java.util.Arrays;
  55. import pub.devrel.easypermissions.AfterPermissionGranted;
  56. import pub.devrel.easypermissions.AppSettingsDialog;
  57. import pub.devrel.easypermissions.EasyPermissions;
  58. public class MainActivity extends CBasicActivity {
  59. /**
  60. * assets folder pdf file
  61. */
  62. public static final String QUICK_START_GUIDE = "Quick Start Guide V2.4.0.pdf";
  63. private PdfSampleActivityBinding binding;
  64. CSampleScreenManager screenManager = new CSampleScreenManager();
  65. private ActivityResultLauncher<Intent> selectDocumentLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
  66. if (result.getData() != null && result.getData().getData() != null) {
  67. CPDFReaderView readerView = binding.pdfView.getCPdfReaderView();
  68. if (readerView != null && readerView.getEditManager() != null) {
  69. readerView.getEditManager().endEdit();
  70. }
  71. if (readerView.getContextMenuShowListener() != null) {
  72. readerView.getContextMenuShowListener().dismissContextMenu();
  73. }
  74. Uri uri = result.getData().getData();
  75. CFileUtils.takeUriPermission(this, uri);
  76. resetContextMenu(binding.pdfView, CPreviewMode.Viewer);
  77. binding.pdfView.resetAnnotationType();
  78. binding.formToolBar.reset();
  79. binding.editToolBar.resetStatus();
  80. binding.pdfToolBar.selectMode(CPreviewMode.Viewer);
  81. screenManager.changeWindowStatus(CPreviewMode.Viewer);
  82. binding.pdfView.openPDF(uri, () -> {
  83. binding.editToolBar.setEditMode(false);
  84. });
  85. }
  86. });
  87. private final static int RC_PERMISSION_PERM = 111;
  88. @Override
  89. protected void onCreate(Bundle savedInstanceState) {
  90. super.onCreate(savedInstanceState);
  91. binding = PdfSampleActivityBinding.inflate(getLayoutInflater());
  92. setContentView(binding.getRoot());
  93. screenManager.bind(binding);
  94. //Extract PDF files from the Android assets folder
  95. initPDFView();
  96. initToolBarView();
  97. initSearchBar();
  98. initAnnotToolbar();
  99. initFormToolbar();
  100. initEditBar();
  101. setPreviewMode(CPreviewMode.Viewer);
  102. onDoNext();
  103. }
  104. private void initPDFView() {
  105. CExtractAssetFileTask.extract(this, QUICK_START_GUIDE, QUICK_START_GUIDE, (filePath) -> {
  106. binding.pdfView.openPDF(filePath);
  107. binding.editToolBar.setEditMode(false);
  108. }
  109. );
  110. binding.pdfView.setAllowAddAndEditAnnot(false);
  111. binding.pdfView.getCPdfReaderView().setMinScaleEnable(false);
  112. resetContextMenu(binding.pdfView, CPreviewMode.Viewer);
  113. initAnnotationAttr(binding.pdfView);
  114. initFormAttr(binding.pdfView);
  115. registerAnnotHelper(binding.pdfView);
  116. registerFormHelper(binding.pdfView);
  117. binding.pdfView.addOnPDFFocusedTypeChangeListener(type -> {
  118. if (type != CPDFAnnotation.Type.INK) {
  119. if (binding.inkCtrlView.getVisibility() == View.VISIBLE) {
  120. screenManager.changeWindowStatus(type);
  121. }
  122. }
  123. });
  124. binding.pdfView.setOnTapMainDocAreaCallback(() -> {
  125. //Use the CFillScreenManager.class to manage fullscreen switching.
  126. screenManager.fillScreenChange();
  127. });
  128. binding.pdfView.getCPdfReaderView().setPdfAddAnnotCallback((cpdfPageView, cpdfBaseAnnot) -> {
  129. // Annotation creation completed listener, you can use cpdfBaseAnnot.getAnnotType() to determine the type of the added annotation
  130. if (cpdfBaseAnnot instanceof CPDFListboxWidgetImpl) {
  131. // When the ListBox form is created, display an editing dialog for adding list data
  132. CPDFAnnotationManager annotationManager = new CPDFAnnotationManager();
  133. annotationManager.showFormListEditFragment(getSupportFragmentManager(), cpdfBaseAnnot, cpdfPageView, false);
  134. } else if (cpdfBaseAnnot instanceof CPDFComboboxWidgetImpl) {
  135. // When the ComboBox form is created, display an editing dialog for adding list data
  136. CPDFAnnotationManager annotationManager = new CPDFAnnotationManager();
  137. annotationManager.showFormComboBoxEditFragment(getSupportFragmentManager(), cpdfBaseAnnot, cpdfPageView,true);
  138. } else if (cpdfBaseAnnot instanceof CPDFPushbuttonWidgetImpl) {
  139. // When the PushButton form is created, display a dialog for editing the action method
  140. CPDFAnnotationManager annotationManager = new CPDFAnnotationManager();
  141. annotationManager.showPushButtonActionDialog(getSupportFragmentManager(), binding.pdfView.getCPdfReaderView(),
  142. cpdfBaseAnnot, cpdfPageView);
  143. }
  144. });
  145. }
  146. private void setPreviewMode(CPreviewMode mode) {
  147. if (binding.pdfView.getCPdfReaderView() == null) {
  148. return;
  149. }
  150. binding.pdfView.getCPdfReaderView().removeAllAnnotFocus();
  151. IContextMenuShowListener contextMenuShowListener = binding.pdfView.getCPdfReaderView().getContextMenuShowListener();
  152. if (contextMenuShowListener != null) {
  153. contextMenuShowListener.dismissContextMenu();
  154. }
  155. screenManager.changeWindowStatus(mode);
  156. binding.pdfToolBar.selectMode(mode);
  157. binding.formToolBar.reset();
  158. resetContextMenu(binding.pdfView, mode);
  159. CPDFEditManager editManager = binding.pdfView.getCPdfReaderView().getEditManager();
  160. if (mode == CPreviewMode.Edit) {
  161. if (editManager != null && !editManager.isEditMode()) {
  162. editManager.beginEdit(CPDFEditType.EDIT_TEXT_IMAGE);
  163. }
  164. if (!hasPermissions(STORAGE_PERMISSIONS)){
  165. EasyPermissions.requestPermissions(this, "request permission", 1234, STORAGE_PERMISSIONS);
  166. }
  167. } else {
  168. if (editManager != null && editManager.isEditMode()) {
  169. editManager.endEdit();
  170. }
  171. switch (mode) {
  172. case Viewer:
  173. binding.pdfView.getCPdfReaderView().setCurrentFocusedFormType(CPDFWidget.WidgetType.Widget_Unknown);
  174. binding.pdfView.getCPdfReaderView().setCurrentFocusedType(CPDFAnnotation.Type.UNKNOWN);
  175. binding.pdfView.getCPdfReaderView().setTouchMode(CPDFReaderView.TouchMode.BROWSE);
  176. binding.pdfView.setAllowAddAndEditAnnot(true);
  177. break;
  178. case Annotation:
  179. binding.pdfView.setAllowAddAndEditAnnot(true);
  180. binding.pdfView.resetAnnotationType();
  181. break;
  182. case Form:
  183. binding.pdfView.getCPdfReaderView().setCurrentFocusedFormType(CPDFWidget.WidgetType.Widget_Unknown);
  184. binding.pdfView.getCPdfReaderView().setCurrentFocusedType(CPDFAnnotation.Type.WIDGET);
  185. binding.pdfView.getCPdfReaderView().setTouchMode(CPDFReaderView.TouchMode.BROWSE);
  186. binding.pdfView.setAllowAddAndEditAnnot(true);
  187. break;
  188. default:
  189. break;
  190. }
  191. }
  192. }
  193. private void initToolBarView() {
  194. binding.pdfToolBar.addMode(CPreviewMode.Annotation);
  195. binding.pdfToolBar.addMode(CPreviewMode.Edit);
  196. binding.pdfToolBar.addMode(CPreviewMode.Form);
  197. binding.pdfToolBar.setPreviewModeChangeListener(this::setPreviewMode);
  198. binding.pdfToolBar.setSearchBtnClickListener(v -> {
  199. binding.pdfView.exitEditMode();
  200. curEditMode = binding.pdfView.getCPdfReaderView().getLoadType();
  201. binding.pdfToolBar.setVisibility(View.GONE);
  202. binding.pdfSearchToolBar.setVisibility(View.VISIBLE);
  203. binding.pdfSearchToolBar.showKeyboard();
  204. });
  205. binding.pdfToolBar.setThumbnailBtnClickListener(v -> {
  206. showPageEdit(binding.pdfView, false);
  207. });
  208. binding.pdfToolBar.setBoTaBtnClickListener(v -> {
  209. binding.pdfView.getCPdfReaderView().removeAllAnnotFocus();
  210. binding.pdfView.exitEditMode();
  211. ArrayList<CPDFBotaFragmentTabs> tabs = new ArrayList<>();
  212. CPDFBotaFragmentTabs annotationTab = new CPDFBotaFragmentTabs(CPDFBOTA.ANNOTATION, getString(R.string.tools_annotations));
  213. CPDFBotaFragmentTabs outlineTab = new CPDFBotaFragmentTabs(CPDFBOTA.OUTLINE, getString(R.string.tools_outlines));
  214. CPDFBotaFragmentTabs bookmarkTab = new CPDFBotaFragmentTabs(CPDFBOTA.BOOKMARKS, getString(R.string.tools_bookmarks));
  215. if (binding.pdfToolBar.getMode() == CPreviewMode.Viewer) {
  216. tabs.add(outlineTab);
  217. tabs.add(bookmarkTab);
  218. } else {
  219. tabs.add(outlineTab);
  220. tabs.add(bookmarkTab);
  221. tabs.add(annotationTab);
  222. }
  223. CPDFBotaDialogFragment dialogFragment = CPDFBotaDialogFragment.newInstance();
  224. dialogFragment.initWithPDFView(binding.pdfView);
  225. dialogFragment.setBotaDialogTabs(tabs);
  226. dialogFragment.show(getSupportFragmentManager(), "annotationList");
  227. });
  228. binding.pdfToolBar.setMoreBtnClickListener(v -> {
  229. v.setSelected(true);
  230. //Show the PDF settings dialog fragment
  231. CPopupMenuWindow menuWindow = new CPopupMenuWindow(this);
  232. menuWindow.addItem(R.drawable.tools_ic_preview_settings, R.string.tools_view_setting, v1 -> {
  233. showDisplaySettings(binding.pdfView);
  234. });
  235. menuWindow.addItem(R.drawable.tools_page_edit, R.string.tools_page_edit_toolbar_title, v1 -> {
  236. showPageEdit(binding.pdfView, true);
  237. });
  238. menuWindow.addItem(R.drawable.tools_ic_document_info, R.string.tools_document_info, v1 -> {
  239. showDocumentInfo(binding.pdfView);
  240. });
  241. menuWindow.addItem(R.drawable.tools_ic_share, R.string.tools_share, v1 -> {
  242. sharePDF(binding.pdfView);
  243. });
  244. menuWindow.addItem(R.drawable.tools_ic_new_file, R.string.tools_open_document, v1 -> {
  245. if (hasPermissions(STORAGE_PERMISSIONS)) {
  246. selectDocument();
  247. } else {
  248. EasyPermissions.requestPermissions(this, "request permission", REQUEST_EXTERNAL_PERMISSION, STORAGE_PERMISSIONS);
  249. }
  250. });
  251. menuWindow.setOnDismissListener(() -> v.setSelected(false));
  252. menuWindow.showAsDropDown(v);
  253. });
  254. }
  255. private void initAnnotToolbar() {
  256. binding.annotationToolBar.initWithPDFView(binding.pdfView);
  257. binding.annotationToolBar.setFragmentManager(getSupportFragmentManager());
  258. binding.annotationToolBar.setAnnotationChangeListener(type -> {
  259. screenManager.changeWindowStatus(type);
  260. //You are required to grant recording permission when selecting voice notes
  261. if (type == CAnnotationType.SOUND) {
  262. if (!EasyPermissions.hasPermissions(this, Manifest.permission.RECORD_AUDIO)) {
  263. EasyPermissions.requestPermissions(this, getString(R.string.tools_use_sound_annot), 112, Manifest.permission.RECORD_AUDIO);
  264. }
  265. }
  266. });
  267. binding.inkCtrlView.initWithPDFView(binding.pdfView);
  268. binding.inkCtrlView.setFragmentManager(getSupportFragmentManager());
  269. }
  270. private void initFormToolbar() {
  271. binding.formToolBar.initWithPDFView(binding.pdfView);
  272. binding.formToolBar.setFragmentManager(getSupportFragmentManager());
  273. }
  274. private void initSearchBar() {
  275. binding.pdfSearchToolBar.initWithPDFView(binding.pdfView);
  276. binding.pdfSearchToolBar.onSearchQueryResults(list -> {
  277. CSearchResultDialogFragment searchResultDialog = new CSearchResultDialogFragment();
  278. searchResultDialog.show(getSupportFragmentManager(), "searchResultDialogFragment");
  279. searchResultDialog.setSearchTextInfos(list);
  280. searchResultDialog.setOnClickSearchItemListener(clickItem -> {
  281. binding.pdfView.getCPdfReaderView().setDisplayPageIndex(clickItem.page);
  282. binding.pdfView.getCPdfReaderView().getTextSearcher().searchBegin(clickItem.page, clickItem.textRangeIndex);
  283. searchResultDialog.dismiss();
  284. });
  285. });
  286. binding.pdfSearchToolBar.setExitSearchListener(() -> {
  287. if (curEditMode > 0) {
  288. CPDFEditManager editManager = binding.pdfView.getCPdfReaderView().getEditManager();
  289. if (!editManager.isEditMode()) {
  290. editManager.beginEdit(curEditMode);
  291. }
  292. }
  293. binding.pdfToolBar.setVisibility(View.VISIBLE);
  294. binding.pdfSearchToolBar.setVisibility(View.GONE);
  295. });
  296. }
  297. @Override
  298. public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  299. super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  300. if (requestCode == REQUEST_EXTERNAL_PERMISSION) {
  301. if (EasyPermissions.hasPermissions(this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
  302. selectDocument();
  303. }
  304. } else if (requestCode == 112) {
  305. if (!EasyPermissions.hasPermissions(this, permissions)) {
  306. if (EasyPermissions.somePermissionPermanentlyDenied(this, Arrays.asList(permissions))) {
  307. new AppSettingsDialog.Builder(this)
  308. .build().show();
  309. }else {
  310. binding.pdfView.resetAnnotationType();
  311. }
  312. }
  313. } else if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {
  314. if (!EasyPermissions.hasPermissions(this, permissions)) {
  315. binding.pdfView.resetAnnotationType();
  316. }
  317. }
  318. }
  319. private void initEditBar() {
  320. if (binding.pdfView == null || binding.pdfView.getCPdfReaderView() == null) {
  321. return;
  322. }
  323. binding.editToolBar.initWithPDFView(binding.pdfView);
  324. binding.editToolBar.setEditPropertyBtnClickListener((view) -> {
  325. int type = binding.pdfView.getCPdfReaderView().getSelectAreaType();
  326. CStyleType styleType = CStyleType.UNKNOWN;
  327. if (type == SELECT_AREA_TEXT) {
  328. styleType = CStyleType.EDIT_TEXT;
  329. } else if (type == SELECT_AREA_IMAGE) {
  330. styleType = CStyleType.EDIT_IMAGE;
  331. }
  332. if (styleType != CStyleType.UNKNOWN) {
  333. CPDFReaderView readerView = binding.pdfView.getCPdfReaderView();
  334. CPDFContextMenuHelper menuHelper = (CPDFContextMenuHelper) readerView.getContextMenuShowListener();
  335. if (menuHelper == null || menuHelper.getReaderView() == null) {
  336. return;
  337. }
  338. CStyleManager styleManager = new CStyleManager(menuHelper.getEditSelection(), menuHelper.getPageView());
  339. CAnnotStyle annotStyle = styleManager.getStyle(styleType);
  340. CStyleDialogFragment styleDialogFragment = CStyleDialogFragment.newInstance(annotStyle);
  341. styleManager.setAnnotStyleFragmentListener(styleDialogFragment);
  342. styleManager.setDialogHeightCallback(styleDialogFragment, binding.pdfView.getCPdfReaderView());
  343. styleDialogFragment.show(getSupportFragmentManager(), "textPropertyDialogFragment");
  344. menuHelper.dismissContextMenu();
  345. }
  346. });
  347. binding.pdfView.setEndScrollCallback(() -> {
  348. binding.editToolBar.updateUndoRedo();
  349. });
  350. }
  351. private void selectDocument() {
  352. if (binding.pdfToolBar.getMode() == CPreviewMode.Edit) {
  353. binding.pdfView.exitEditMode();
  354. }
  355. if (!binding.pdfView.getCPdfReaderView().getPDFDocument().hasChanges()) {
  356. selectDocumentLauncher.launch(CFileUtils.getContentIntent());
  357. return;
  358. }
  359. CAlertDialog alertDialog = CAlertDialog.newInstance(getString(com.compdfkit.tools.R.string.tools_save_title), getString(com.compdfkit.tools.R.string.tools_save_message));
  360. alertDialog.setConfirmClickListener(v -> {
  361. //save pdf document
  362. binding.pdfView.savePDF((filePath, pdfUri) -> {
  363. alertDialog.dismiss();
  364. selectDocumentLauncher.launch(CFileUtils.getContentIntent());
  365. });
  366. });
  367. alertDialog.setCancelClickListener(v -> {
  368. alertDialog.dismiss();
  369. selectDocumentLauncher.launch(CFileUtils.getContentIntent());
  370. });
  371. alertDialog.show(getSupportFragmentManager(), "alertDialog");
  372. }
  373. @AfterPermissionGranted(RC_PERMISSION_PERM)
  374. private void onDoNext() {
  375. if (!hasPermissions()) {
  376. EasyPermissions.requestPermissions(this, getString(R.string.app_permission_storage), RC_PERMISSION_PERM, STORAGE_PERMISSIONS);
  377. }
  378. }
  379. @Override
  380. public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  381. super.onActivityResult(requestCode, resultCode, data);
  382. if (requestCode == ReplaceEditImageArea) {
  383. if (binding.pdfView == null || binding.pdfView.getCPdfReaderView() == null) {
  384. return;
  385. }
  386. for (int i = 0; i < binding.pdfView.getCPdfReaderView().getChildCount(); i++) {
  387. CPDFPageView pageView = (CPDFPageView) binding.pdfView.getCPdfReaderView().getChildAt(i);
  388. if (pageView == null) {
  389. continue;
  390. }
  391. if (data == null) {
  392. return;
  393. }
  394. if (pageView.getPageNum() == binding.pdfView.getCPdfReaderView().getPageNum()) {
  395. CUriUtil util = new CUriUtil();
  396. boolean ret = pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.REPLACE, util.getPath(this, data.getData()));
  397. if (ret == false) {
  398. Toast.makeText(getApplicationContext(), "replace fail", Toast.LENGTH_LONG).show();
  399. }
  400. break;
  401. }
  402. }
  403. } else if (requestCode == AddEditImageArea) {
  404. if (binding.pdfView == null || binding.pdfView.getCPdfReaderView() == null) {
  405. return;
  406. }
  407. if (data == null) {
  408. return;
  409. }
  410. for (int i = 0; i < binding.pdfView.getCPdfReaderView().getChildCount(); i++) {
  411. CPDFPageView pageView = (CPDFPageView) binding.pdfView.getCPdfReaderView().getChildAt(i);
  412. if (pageView == null) {
  413. continue;
  414. }
  415. if (pageView.getPageNum() == binding.pdfView.getCPdfReaderView().getAddImagePage()) {
  416. CUriUtil util = new CUriUtil();
  417. boolean ret = pageView.addEditImageArea(binding.pdfView.getCPdfReaderView().getAddImagePoint(), util.getPath(this, data.getData()));
  418. if (ret == false) {
  419. Toast.makeText(getApplicationContext(), "add fail", Toast.LENGTH_LONG).show();
  420. }
  421. break;
  422. }
  423. }
  424. }
  425. }
  426. @Override
  427. public void onBackPressed() {
  428. if (binding.pdfView != null) {
  429. binding.pdfView.savePDF((filePath, pdfUri) -> super.onBackPressed());
  430. }
  431. }
  432. }