PDFViewerSampleActivity.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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.viewer;
  10. import android.os.Build;
  11. import android.os.Bundle;
  12. import android.view.View;
  13. import androidx.activity.result.ActivityResultLauncher;
  14. import com.compdfkit.core.annotation.CPDFTextAnnotation;
  15. import com.compdfkit.tools.annotation.pdfproperties.pdfnote.CPDFtextAnnotImpl;
  16. import com.compdfkit.tools.common.basic.activity.CBasicPDFActivity;
  17. import com.compdfkit.tools.common.utils.CFileUtils;
  18. import com.compdfkit.tools.common.utils.CPermissionUtil;
  19. import com.compdfkit.tools.common.utils.activitycontracts.CSelectPDFDocumentResultContract;
  20. import com.compdfkit.tools.common.utils.task.CExtractAssetFileTask;
  21. import com.compdfkit.tools.common.utils.window.CPopupMenuWindow;
  22. import com.compdfkit.tools.common.views.pdfbota.CPDFBOTA;
  23. import com.compdfkit.tools.common.views.pdfbota.CPDFBotaDialogFragment;
  24. import com.compdfkit.tools.common.views.pdfbota.CPDFBotaFragmentTabs;
  25. import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
  26. import com.compdfkit.tools.viewer.pdfsearch.CSearchResultDialogFragment;
  27. import com.compdfkit.ui.reader.CPDFReaderView;
  28. import com.compdfkit.viewer.databinding.ViewerPdfSampleActivityBinding;
  29. import java.util.ArrayList;
  30. public class PDFViewerSampleActivity extends CBasicPDFActivity {
  31. /**
  32. * assets folder pdf file
  33. */
  34. public static final String QUICK_START_GUIDE = "PDF32000_2008.pdf";
  35. private ViewerPdfSampleActivityBinding binding;
  36. private CViewerScreenStatusManager screenStatusManager;
  37. private ActivityResultLauncher<Void> selectDocumentLauncher = registerForActivityResult(new CSelectPDFDocumentResultContract(), uri -> {
  38. if (uri != null) {
  39. CFileUtils.takeUriPermission(this, uri);
  40. binding.pdfView.openPDF(uri);
  41. }
  42. });
  43. @Override
  44. protected void onCreate(Bundle savedInstanceState) {
  45. super.onCreate(savedInstanceState);
  46. binding = ViewerPdfSampleActivityBinding.inflate(getLayoutInflater());
  47. setContentView(binding.getRoot());
  48. binding.pdfView.setViewMode(CPDFReaderView.ViewMode.VIEW);
  49. screenStatusManager = new CViewerScreenStatusManager(binding);
  50. initToolbarListener();
  51. initSearchBar();
  52. //Extract PDF files from the Android assets folder
  53. CExtractAssetFileTask.extract(this, QUICK_START_GUIDE, QUICK_START_GUIDE, (filePath) -> {
  54. binding.pdfView.openPDF(filePath);
  55. });
  56. resetContextMenu(binding.pdfView, CPreviewMode.Viewer);
  57. binding.pdfView.setOnTapMainDocAreaCallback(() -> {
  58. screenStatusManager.fillScreenChange();
  59. });
  60. binding.pdfView.getCPdfReaderView().setMinScaleEnable(false);
  61. binding.pdfView.getCPdfReaderView().getAnnotImplRegistry().registImpl(CPDFTextAnnotation.class, CPDFtextAnnotImpl.class);
  62. registerFormHelper(binding.pdfView);
  63. }
  64. private void initToolbarListener() {
  65. binding.pdfToolBar.addMode(CPreviewMode.Viewer);
  66. binding.pdfToolBar.addAction(R.drawable.tools_ic_thumbnail, v -> {
  67. CPDFBotaDialogFragment boTaDialogFragment = CPDFBotaDialogFragment.newInstance();
  68. boTaDialogFragment.initWithPDFView(binding.pdfView);
  69. CPDFBotaFragmentTabs thumbnailTabs = new CPDFBotaFragmentTabs(CPDFBOTA.THUMBNAIL, getString(R.string.tools_thumbnails));
  70. ArrayList<CPDFBotaFragmentTabs> tabs = new ArrayList<>();
  71. tabs.add(thumbnailTabs);
  72. boTaDialogFragment.setBotaDialogTabs(tabs);
  73. boTaDialogFragment.show(getSupportFragmentManager(), "boTaDialogFragment");
  74. });
  75. binding.pdfToolBar.addAction(R.drawable.tools_ic_search, v -> {
  76. binding.pdfToolBar.setVisibility(View.GONE);
  77. binding.pdfSearchToolBar.setVisibility(View.VISIBLE);
  78. binding.pdfSearchToolBar.showKeyboard();
  79. });
  80. binding.pdfToolBar.addAction(R.drawable.tools_ic_bookmark, v -> {
  81. //Show a fragment of the PDF thumbnail and a dialog fragment of the PDF outline list.
  82. CPDFBotaDialogFragment boTaDialogFragment = CPDFBotaDialogFragment.newInstance();
  83. boTaDialogFragment.initWithPDFView(binding.pdfView);
  84. CPDFBotaFragmentTabs outlineTabs = new CPDFBotaFragmentTabs(CPDFBOTA.OUTLINE, getString(R.string.tools_outlines));
  85. CPDFBotaFragmentTabs bookmarks = new CPDFBotaFragmentTabs(CPDFBOTA.BOOKMARKS, getString(R.string.tools_bookmarks));
  86. ArrayList<CPDFBotaFragmentTabs> tabs = new ArrayList<>();
  87. tabs.add(outlineTabs);
  88. tabs.add(bookmarks);
  89. boTaDialogFragment.setBotaDialogTabs(tabs);
  90. boTaDialogFragment.show(getSupportFragmentManager(), "boTaDialogFragment");
  91. });
  92. binding.pdfToolBar.addAction(R.drawable.tools_ic_more, v -> {
  93. v.setSelected(true);
  94. //Show the PDF settings dialog fragment
  95. CPopupMenuWindow menuWindow = new CPopupMenuWindow(this);
  96. menuWindow.addItem(R.drawable.tools_ic_preview_settings, R.string.tools_view_setting, v1 -> {
  97. showDisplaySettings(binding.pdfView);
  98. });
  99. menuWindow.addItem(R.drawable.tools_ic_document_info, R.string.tools_document_info, v1 -> {
  100. showDocumentInfo(binding.pdfView);
  101. });
  102. menuWindow.addItem(R.drawable.tools_ic_share, R.string.tools_share, v1 -> {
  103. sharePDF(binding.pdfView);
  104. });
  105. menuWindow.addItem(R.drawable.tools_ic_new_file, R.string.tools_open_document, v1 -> {
  106. if (CPermissionUtil.hasStoragePermissions(this)) {
  107. selectDocumentLauncher.launch(null);
  108. } else {
  109. requestStoragePermissions();
  110. }
  111. });
  112. menuWindow.setOnDismissListener(() -> v.setSelected(false));
  113. menuWindow.showAsDropDown(v);
  114. });
  115. }
  116. private void requestStoragePermissions(){
  117. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
  118. CPermissionUtil.openManageAllFileAppSettings(this);
  119. }else {
  120. multiplePermissionResultLauncher.launch(STORAGE_PERMISSIONS, result -> {
  121. if (CPermissionUtil.hasStoragePermissions(this)) {
  122. selectDocumentLauncher.launch(null);
  123. }
  124. });
  125. }
  126. }
  127. private void initSearchBar() {
  128. binding.pdfSearchToolBar.initWithPDFView(binding.pdfView);
  129. binding.pdfSearchToolBar.onSearchQueryResults(list -> {
  130. CSearchResultDialogFragment searchResultDialog = new CSearchResultDialogFragment();
  131. searchResultDialog.show(getSupportFragmentManager(), "searchResultDialogFragment");
  132. searchResultDialog.setSearchTextInfos(list);
  133. searchResultDialog.setOnClickSearchItemListener(clickItem -> {
  134. binding.pdfView.getCPdfReaderView().setDisplayPageIndex(clickItem.page);
  135. binding.pdfView.getCPdfReaderView().getTextSearcher().searchBegin(clickItem.page, clickItem.textRangeIndex);
  136. searchResultDialog.dismiss();
  137. });
  138. });
  139. binding.pdfSearchToolBar.setExitSearchListener(() -> {
  140. binding.pdfToolBar.setVisibility(View.VISIBLE);
  141. binding.pdfSearchToolBar.setVisibility(View.GONE);
  142. binding.pdfSearchToolBar.showKeyboard();
  143. });
  144. }
  145. }