MainActivity.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  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. if (curEditMode > 0 && binding.pdfToolBar.getMode() == CPreviewMode.Edit) {
  208. CPDFEditManager editManager = binding.pdfView.getCPdfReaderView().getEditManager();
  209. if (!editManager.isEditMode()) {
  210. editManager.beginEdit(curEditMode);
  211. }
  212. }
  213. });
  214. });
  215. binding.pdfToolBar.setBoTaBtnClickListener(v -> {
  216. binding.pdfView.getCPdfReaderView().removeAllAnnotFocus();
  217. binding.pdfView.exitEditMode();
  218. ArrayList<CPDFBotaFragmentTabs> tabs = new ArrayList<>();
  219. CPDFBotaFragmentTabs annotationTab = new CPDFBotaFragmentTabs(CPDFBOTA.ANNOTATION, getString(R.string.tools_annotations));
  220. CPDFBotaFragmentTabs outlineTab = new CPDFBotaFragmentTabs(CPDFBOTA.OUTLINE, getString(R.string.tools_outlines));
  221. CPDFBotaFragmentTabs bookmarkTab = new CPDFBotaFragmentTabs(CPDFBOTA.BOOKMARKS, getString(R.string.tools_bookmarks));
  222. if (binding.pdfToolBar.getMode() == CPreviewMode.Viewer) {
  223. tabs.add(outlineTab);
  224. tabs.add(bookmarkTab);
  225. } else {
  226. tabs.add(outlineTab);
  227. tabs.add(bookmarkTab);
  228. tabs.add(annotationTab);
  229. }
  230. CPDFBotaDialogFragment dialogFragment = CPDFBotaDialogFragment.newInstance();
  231. dialogFragment.initWithPDFView(binding.pdfView);
  232. dialogFragment.setBotaDialogTabs(tabs);
  233. dialogFragment.show(getSupportFragmentManager(), "annotationList");
  234. });
  235. binding.pdfToolBar.setMoreBtnClickListener(v -> {
  236. v.setSelected(true);
  237. //Show the PDF settings dialog fragment
  238. CPopupMenuWindow menuWindow = new CPopupMenuWindow(this);
  239. menuWindow.addItem(R.drawable.tools_ic_preview_settings, R.string.tools_view_setting, v1 -> {
  240. showDisplaySettings(binding.pdfView);
  241. });
  242. menuWindow.addItem(R.drawable.tools_page_edit, R.string.tools_page_edit_toolbar_title, v1 -> {
  243. showPageEdit(binding.pdfView, true,()->{
  244. if (curEditMode > 0 && binding.pdfToolBar.getMode() == CPreviewMode.Edit) {
  245. CPDFEditManager editManager = binding.pdfView.getCPdfReaderView().getEditManager();
  246. if (!editManager.isEditMode()) {
  247. editManager.beginEdit(curEditMode);
  248. }
  249. }
  250. });
  251. });
  252. menuWindow.addItem(R.drawable.tools_ic_document_info, R.string.tools_document_info, v1 -> {
  253. showDocumentInfo(binding.pdfView);
  254. });
  255. menuWindow.addItem(R.drawable.tools_ic_share, R.string.tools_share, v1 -> {
  256. sharePDF(binding.pdfView);
  257. });
  258. menuWindow.addItem(R.drawable.tools_ic_new_file, R.string.tools_open_document, v1 -> {
  259. if (hasPermissions(STORAGE_PERMISSIONS)) {
  260. selectDocument();
  261. } else {
  262. EasyPermissions.requestPermissions(this, "request permission", REQUEST_EXTERNAL_PERMISSION, STORAGE_PERMISSIONS);
  263. }
  264. });
  265. menuWindow.setOnDismissListener(() -> v.setSelected(false));
  266. menuWindow.showAsDropDown(v);
  267. });
  268. }
  269. private void initAnnotToolbar() {
  270. binding.annotationToolBar.initWithPDFView(binding.pdfView);
  271. binding.annotationToolBar.setFragmentManager(getSupportFragmentManager());
  272. binding.annotationToolBar.setAnnotationChangeListener(type -> {
  273. screenManager.changeWindowStatus(type);
  274. //You are required to grant recording permission when selecting voice notes
  275. if (type == CAnnotationType.SOUND) {
  276. if (!EasyPermissions.hasPermissions(this, Manifest.permission.RECORD_AUDIO)) {
  277. EasyPermissions.requestPermissions(this, getString(R.string.tools_use_sound_annot), 112, Manifest.permission.RECORD_AUDIO);
  278. }
  279. }
  280. });
  281. binding.inkCtrlView.initWithPDFView(binding.pdfView);
  282. binding.inkCtrlView.setFragmentManager(getSupportFragmentManager());
  283. }
  284. private void initFormToolbar() {
  285. binding.formToolBar.initWithPDFView(binding.pdfView);
  286. binding.formToolBar.setFragmentManager(getSupportFragmentManager());
  287. }
  288. private void initSearchBar() {
  289. binding.pdfSearchToolBar.initWithPDFView(binding.pdfView);
  290. binding.pdfSearchToolBar.onSearchQueryResults(list -> {
  291. CSearchResultDialogFragment searchResultDialog = new CSearchResultDialogFragment();
  292. searchResultDialog.show(getSupportFragmentManager(), "searchResultDialogFragment");
  293. searchResultDialog.setSearchTextInfos(list);
  294. searchResultDialog.setOnClickSearchItemListener(clickItem -> {
  295. binding.pdfView.getCPdfReaderView().setDisplayPageIndex(clickItem.page);
  296. binding.pdfView.getCPdfReaderView().getTextSearcher().searchBegin(clickItem.page, clickItem.textRangeIndex);
  297. searchResultDialog.dismiss();
  298. });
  299. });
  300. binding.pdfSearchToolBar.setExitSearchListener(() -> {
  301. if (curEditMode > 0) {
  302. CPDFEditManager editManager = binding.pdfView.getCPdfReaderView().getEditManager();
  303. if (!editManager.isEditMode()) {
  304. editManager.beginEdit(curEditMode);
  305. }
  306. }
  307. binding.pdfToolBar.setVisibility(View.VISIBLE);
  308. binding.pdfSearchToolBar.setVisibility(View.GONE);
  309. });
  310. }
  311. @Override
  312. public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  313. super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  314. if (requestCode == REQUEST_EXTERNAL_PERMISSION) {
  315. if (EasyPermissions.hasPermissions(this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
  316. selectDocument();
  317. }
  318. } else if (requestCode == 112) {
  319. if (!EasyPermissions.hasPermissions(this, permissions)) {
  320. if (EasyPermissions.somePermissionPermanentlyDenied(this, Arrays.asList(permissions))) {
  321. new AppSettingsDialog.Builder(this)
  322. .build().show();
  323. }else {
  324. binding.pdfView.resetAnnotationType();
  325. }
  326. }
  327. } else if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {
  328. if (!EasyPermissions.hasPermissions(this, permissions)) {
  329. binding.pdfView.resetAnnotationType();
  330. }
  331. }
  332. }
  333. private void initEditBar() {
  334. if (binding.pdfView == null || binding.pdfView.getCPdfReaderView() == null) {
  335. return;
  336. }
  337. binding.editToolBar.initWithPDFView(binding.pdfView);
  338. binding.editToolBar.setEditPropertyBtnClickListener((view) -> {
  339. int type = binding.pdfView.getCPdfReaderView().getSelectAreaType();
  340. CStyleType styleType = CStyleType.UNKNOWN;
  341. if (type == SELECT_AREA_TEXT) {
  342. styleType = CStyleType.EDIT_TEXT;
  343. } else if (type == SELECT_AREA_IMAGE) {
  344. styleType = CStyleType.EDIT_IMAGE;
  345. }
  346. if (styleType != CStyleType.UNKNOWN) {
  347. CPDFReaderView readerView = binding.pdfView.getCPdfReaderView();
  348. CPDFContextMenuHelper menuHelper = (CPDFContextMenuHelper) readerView.getContextMenuShowListener();
  349. if (menuHelper == null || menuHelper.getReaderView() == null) {
  350. return;
  351. }
  352. CStyleManager styleManager = new CStyleManager(menuHelper.getEditSelection(), menuHelper.getPageView());
  353. CAnnotStyle annotStyle = styleManager.getStyle(styleType);
  354. CStyleDialogFragment styleDialogFragment = CStyleDialogFragment.newInstance(annotStyle);
  355. styleManager.setAnnotStyleFragmentListener(styleDialogFragment);
  356. styleManager.setDialogHeightCallback(styleDialogFragment, binding.pdfView.getCPdfReaderView());
  357. styleDialogFragment.show(getSupportFragmentManager(), "textPropertyDialogFragment");
  358. menuHelper.dismissContextMenu();
  359. }
  360. });
  361. binding.pdfView.setEndScrollCallback(() -> {
  362. binding.editToolBar.updateUndoRedo();
  363. });
  364. }
  365. private void selectDocument() {
  366. if (binding.pdfToolBar.getMode() == CPreviewMode.Edit) {
  367. binding.pdfView.exitEditMode();
  368. }
  369. if (!binding.pdfView.getCPdfReaderView().getPDFDocument().hasChanges()) {
  370. selectDocumentLauncher.launch(CFileUtils.getContentIntent());
  371. return;
  372. }
  373. CAlertDialog alertDialog = CAlertDialog.newInstance(getString(com.compdfkit.tools.R.string.tools_save_title), getString(com.compdfkit.tools.R.string.tools_save_message));
  374. alertDialog.setConfirmClickListener(v -> {
  375. //save pdf document
  376. binding.pdfView.savePDF((filePath, pdfUri) -> {
  377. alertDialog.dismiss();
  378. selectDocumentLauncher.launch(CFileUtils.getContentIntent());
  379. });
  380. });
  381. alertDialog.setCancelClickListener(v -> {
  382. alertDialog.dismiss();
  383. selectDocumentLauncher.launch(CFileUtils.getContentIntent());
  384. });
  385. alertDialog.show(getSupportFragmentManager(), "alertDialog");
  386. }
  387. @AfterPermissionGranted(RC_PERMISSION_PERM)
  388. private void onDoNext() {
  389. if (!hasPermissions()) {
  390. EasyPermissions.requestPermissions(this, getString(R.string.app_permission_storage), RC_PERMISSION_PERM, STORAGE_PERMISSIONS);
  391. }
  392. }
  393. @Override
  394. public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  395. super.onActivityResult(requestCode, resultCode, data);
  396. if (requestCode == ReplaceEditImageArea) {
  397. if (binding.pdfView == null || binding.pdfView.getCPdfReaderView() == null) {
  398. return;
  399. }
  400. for (int i = 0; i < binding.pdfView.getCPdfReaderView().getChildCount(); i++) {
  401. CPDFPageView pageView = (CPDFPageView) binding.pdfView.getCPdfReaderView().getChildAt(i);
  402. if (pageView == null) {
  403. continue;
  404. }
  405. if (data == null) {
  406. return;
  407. }
  408. if (pageView.getPageNum() == binding.pdfView.getCPdfReaderView().getPageNum()) {
  409. CUriUtil util = new CUriUtil();
  410. boolean ret = pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.REPLACE, util.getPath(this, data.getData()));
  411. if (ret == false) {
  412. Toast.makeText(getApplicationContext(), "replace fail", Toast.LENGTH_LONG).show();
  413. }
  414. break;
  415. }
  416. }
  417. } else if (requestCode == AddEditImageArea) {
  418. if (binding.pdfView == null || binding.pdfView.getCPdfReaderView() == null) {
  419. return;
  420. }
  421. if (data == null) {
  422. return;
  423. }
  424. for (int i = 0; i < binding.pdfView.getCPdfReaderView().getChildCount(); i++) {
  425. CPDFPageView pageView = (CPDFPageView) binding.pdfView.getCPdfReaderView().getChildAt(i);
  426. if (pageView == null) {
  427. continue;
  428. }
  429. if (pageView.getPageNum() == binding.pdfView.getCPdfReaderView().getAddImagePage()) {
  430. CUriUtil util = new CUriUtil();
  431. boolean ret = pageView.addEditImageArea(binding.pdfView.getCPdfReaderView().getAddImagePoint(), util.getPath(this, data.getData()));
  432. if (ret == false) {
  433. Toast.makeText(getApplicationContext(), "add fail", Toast.LENGTH_LONG).show();
  434. }
  435. break;
  436. }
  437. }
  438. }
  439. }
  440. @Override
  441. public void onBackPressed() {
  442. if (binding.pdfView != null) {
  443. binding.pdfView.savePDF((filePath, pdfUri) -> super.onBackPressed());
  444. }
  445. }
  446. }