123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- package com.compdfkit.annotations;
- import android.Manifest;
- import android.content.Intent;
- import android.net.Uri;
- import android.os.Build;
- import android.os.Bundle;
- import android.provider.Settings;
- import android.view.View;
- import androidx.activity.result.ActivityResultLauncher;
- import androidx.activity.result.contract.ActivityResultContracts;
- import androidx.annotation.NonNull;
- import com.compdfkit.annotations.CAnnotSampleScreenManager;
- import com.compdfkit.annotations.R;
- import com.compdfkit.annotations.databinding.AnnotationPdfSampleActivityBinding;
- import com.compdfkit.core.annotation.CPDFAnnotation;
- import com.compdfkit.tools.common.activity.CBasicActivity;
- import com.compdfkit.tools.common.utils.CFileUtils;
- import com.compdfkit.tools.common.utils.dialog.CAlertDialog;
- import com.compdfkit.tools.common.utils.task.CExtractAssetFileTask;
- import com.compdfkit.tools.common.utils.window.CPopupMenuWindow;
- import com.compdfkit.tools.common.views.pdfbota.CPDFBOTA;
- import com.compdfkit.tools.common.views.pdfbota.CPDFBotaDialogFragment;
- import com.compdfkit.tools.common.views.pdfbota.CPDFBotaFragmentTabs;
- import com.compdfkit.tools.common.views.pdfproperties.CAnnotationType;
- import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
- import com.compdfkit.tools.viewer.pdfsearch.CSearchResultDialogFragment;
- import java.util.ArrayList;
- import java.util.Arrays;
- import pub.devrel.easypermissions.AppSettingsDialog;
- import pub.devrel.easypermissions.EasyPermissions;
- public class PDFAnnotationSampleActivity extends CBasicActivity {
- /**
- * assets folder pdf file
- */
- public static final String QUICK_START_GUIDE = "Quick Start Guide V2.4.0.pdf";
- private AnnotationPdfSampleActivityBinding binding;
- CAnnotSampleScreenManager screenManager = new CAnnotSampleScreenManager();
- private ActivityResultLauncher<Intent> selectDocumentLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
- if (result.getData() != null && result.getData().getData() != null) {
- Uri uri = result.getData().getData();
- CFileUtils.takeUriPermission(this, uri);
- binding.pdfView.resetAnnotationType();
- binding.pdfView.openPDF(uri);
- }
- });
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- binding = AnnotationPdfSampleActivityBinding.inflate(getLayoutInflater());
- setContentView(binding.getRoot());
- screenManager.bind(binding);
- //Extract PDF files from the Android assets folder
- initPDFView();
- initAnnotationAttributes();
- initToolBarView();
- initSearchBar();
- initAnnotToolbar();
- }
- private void initPDFView() {
- binding.pdfView.setAllowAddAndEditAnnot(true);
- CExtractAssetFileTask.extract(this, QUICK_START_GUIDE, QUICK_START_GUIDE, (filePath) ->
- binding.pdfView.openPDF(filePath));
- resetContextMenu(binding.pdfView, CPreviewMode.Annotation);
- binding.pdfView.getCPdfReaderView().setMinScaleEnable(false);
- binding.pdfView.addOnPDFFocusedTypeChangeListener(type -> {
- if (type != CPDFAnnotation.Type.INK) {
- if (binding.inkCtrlView.getVisibility() == View.VISIBLE) {
- screenManager.changeWindowStatus(type);
- binding.annotationToolBar.updateItemColor();
- }
- }
- });
- binding.pdfView.setOnTapMainDocAreaCallback(() -> {
- //Use the CFillScreenManager.class to manage fullscreen switching.
- screenManager.fillScreenChange();
- });
- }
- /**
- * Initialize and set annotation attributes,
- * mainly including annotation color, transparency and other attributes
- */
- private void initAnnotationAttributes() {
- initAnnotationAttr(binding.pdfView);
- registerAnnotHelper(binding.pdfView);
- }
- private void initToolBarView() {
- binding.pdfToolBar.addMode(CPreviewMode.Annotation);
- binding.pdfToolBar.setPreviewModeChangeListener((mode) -> {
- binding.pdfToolBar.selectMode(mode);
- screenManager.changeWindowStatus(mode);
- binding.pdfView.setAllowAddAndEditAnnot(mode != CPreviewMode.Viewer);
- binding.pdfView.resetAnnotationType();
- resetContextMenu(binding.pdfView, mode);
- });
- binding.pdfToolBar.setSearchBtnClickListener(v -> {
- binding.pdfToolBar.setVisibility(View.GONE);
- binding.pdfSearchToolBar.setVisibility(View.VISIBLE);
- binding.pdfSearchToolBar.showKeyboard();
- });
- binding.pdfToolBar.setThumbnailBtnClickListener(v -> {
- CPDFBotaDialogFragment dialogFragment = CPDFBotaDialogFragment.newInstance();
- dialogFragment.initWithPDFView(binding.pdfView);
- CPDFBotaFragmentTabs annotationTab = new CPDFBotaFragmentTabs(CPDFBOTA.THUMBNAIL, getString(R.string.tools_thumbnails));
- dialogFragment.setBotaDialogTab(annotationTab);
- dialogFragment.show(getSupportFragmentManager(), "ThumbnailList");
- });
- binding.pdfToolBar.setBoTaBtnClickListener(v -> {
- ArrayList<CPDFBotaFragmentTabs> tabs = new ArrayList<>();
- CPDFBotaFragmentTabs annotationTab = new CPDFBotaFragmentTabs(CPDFBOTA.ANNOTATION, getString(R.string.tools_annotations));
- CPDFBotaFragmentTabs outlineTab = new CPDFBotaFragmentTabs(CPDFBOTA.OUTLINE, getString(R.string.tools_outlines));
- CPDFBotaFragmentTabs bookmarkTab = new CPDFBotaFragmentTabs(CPDFBOTA.BOOKMARKS, getString(R.string.tools_bookmarks));
- if (binding.pdfToolBar.getMode() == CPreviewMode.Viewer) {
- tabs.add(outlineTab);
- tabs.add(bookmarkTab);
- } else {
- tabs.add(outlineTab);
- tabs.add(bookmarkTab);
- tabs.add(annotationTab);
- }
- CPDFBotaDialogFragment dialogFragment = CPDFBotaDialogFragment.newInstance();
- dialogFragment.initWithPDFView(binding.pdfView);
- dialogFragment.setBotaDialogTabs(tabs);
- dialogFragment.show(getSupportFragmentManager(), "annotationList");
- });
- binding.pdfToolBar.setMoreBtnClickListener(v -> {
- v.setSelected(true);
- //Show the PDF settings dialog fragment
- CPopupMenuWindow menuWindow = new CPopupMenuWindow(this);
- menuWindow.addItem(R.drawable.tools_ic_preview_settings, R.string.tools_view_setting, v1 -> {
- showDisplaySettings(binding.pdfView);
- });
- menuWindow.addItem(R.drawable.tools_ic_document_info, R.string.tools_document_info, v1 -> {
- showDocumentInfo(binding.pdfView);
- });
- menuWindow.addItem(R.drawable.tools_ic_share, R.string.tools_share, v1 -> {
- sharePDF(binding.pdfView);
- });
- menuWindow.addItem(R.drawable.tools_ic_new_file, R.string.tools_open_document, v1 -> {
- if (hasPermissions(STORAGE_PERMISSIONS)) {
- selectDocument();
- } else {
- requestStoragePermissions();
- }
- });
- menuWindow.setOnDismissListener(() -> v.setSelected(false));
- menuWindow.showAsDropDown(v);
- });
- }
- private void requestStoragePermissions(){
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
- startActivity(new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION));
- }else {
- EasyPermissions.requestPermissions(this, "request permission", REQUEST_EXTERNAL_PERMISSION, STORAGE_PERMISSIONS);
- }
- }
- private void initAnnotToolbar() {
- binding.annotationToolBar.initWithPDFView(binding.pdfView);
- binding.annotationToolBar.setFragmentManager(getSupportFragmentManager());
- binding.annotationToolBar.setAnnotationChangeListener(type -> {
- screenManager.changeWindowStatus(type);
- //You are required to grant recording permission when selecting voice notes
- if (type == CAnnotationType.SOUND) {
- if (!EasyPermissions.hasPermissions(this, Manifest.permission.RECORD_AUDIO)) {
- EasyPermissions.requestPermissions(this, getString(R.string.tools_use_sound_annot), 111, Manifest.permission.RECORD_AUDIO);
- }
- }
- });
- binding.inkCtrlView.initWithPDFView(binding.pdfView);
- binding.inkCtrlView.setFragmentManager(getSupportFragmentManager());
- }
- private void initSearchBar() {
- binding.pdfSearchToolBar.initWithPDFView(binding.pdfView);
- binding.pdfSearchToolBar.onSearchQueryResults(list -> {
- CSearchResultDialogFragment searchResultDialog = new CSearchResultDialogFragment();
- searchResultDialog.show(getSupportFragmentManager(), "searchResultDialogFragment");
- searchResultDialog.setSearchTextInfos(list);
- searchResultDialog.setOnClickSearchItemListener(clickItem -> {
- binding.pdfView.getCPdfReaderView().setDisplayPageIndex(clickItem.page);
- binding.pdfView.getCPdfReaderView().getTextSearcher().searchBegin(clickItem.page, clickItem.textRangeIndex);
- searchResultDialog.dismiss();
- });
- });
- binding.pdfSearchToolBar.setExitSearchListener(() -> {
- binding.pdfToolBar.setVisibility(View.VISIBLE);
- binding.pdfSearchToolBar.setVisibility(View.GONE);
- });
- }
- private void selectDocument() {
- if (!binding.pdfView.getCPdfReaderView().getPDFDocument().hasChanges()) {
- selectDocumentLauncher.launch(CFileUtils.getContentIntent());
- return;
- }
- CAlertDialog alertDialog = CAlertDialog.newInstance(getString(com.compdfkit.tools.R.string.tools_save_title), getString(com.compdfkit.tools.R.string.tools_save_message));
- alertDialog.setConfirmClickListener(v -> {
- //save pdf document
- binding.pdfView.savePDF((filePath, pdfUri) -> {
- alertDialog.dismiss();
- selectDocumentLauncher.launch(CFileUtils.getContentIntent());
- });
- });
- alertDialog.setCancelClickListener(v -> {
- alertDialog.dismiss();
- selectDocumentLauncher.launch(CFileUtils.getContentIntent());
- });
- alertDialog.show(getSupportFragmentManager(), "alertDialog");
- }
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- if (requestCode == REQUEST_EXTERNAL_PERMISSION) {
- if (EasyPermissions.hasPermissions(this, STORAGE_PERMISSIONS)) {
- selectDocument();
- }
- } else if (requestCode == 111) {
- if (!EasyPermissions.hasPermissions(this, permissions)) {
- if (EasyPermissions.somePermissionPermanentlyDenied(this, Arrays.asList(permissions))) {
- new AppSettingsDialog.Builder(this)
- .build().show();
- }else {
- binding.pdfView.resetAnnotationType();
- }
- }
- } else if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE){
- if (EasyPermissions.hasPermissions(this, permissions)){
- }
- }
- }
- @Override
- public void onBackPressed() {
- if (binding.pdfView != null) {
- binding.pdfView.savePDF((filePath, pdfUri) -> super.onBackPressed());
- }
- }
- }
|