/** * 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.viewer; import android.os.Build; import android.os.Bundle; import android.view.View; import androidx.activity.result.ActivityResultLauncher; import com.compdfkit.core.annotation.CPDFTextAnnotation; import com.compdfkit.tools.annotation.pdfproperties.pdfnote.CPDFtextAnnotImpl; import com.compdfkit.tools.common.basic.activity.CBasicPDFActivity; import com.compdfkit.tools.common.utils.CFileUtils; import com.compdfkit.tools.common.utils.CPermissionUtil; import com.compdfkit.tools.common.utils.activitycontracts.CSelectPDFDocumentResultContract; 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.pdfview.CPreviewMode; import com.compdfkit.tools.viewer.pdfsearch.CSearchResultDialogFragment; import com.compdfkit.ui.reader.CPDFReaderView; import com.compdfkit.viewer.databinding.ViewerPdfSampleActivityBinding; import java.util.ArrayList; public class PDFViewerSampleActivity extends CBasicPDFActivity { /** * assets folder pdf file */ public static final String QUICK_START_GUIDE = "PDF32000_2008.pdf"; private ViewerPdfSampleActivityBinding binding; private CViewerScreenStatusManager screenStatusManager; private ActivityResultLauncher selectDocumentLauncher = registerForActivityResult(new CSelectPDFDocumentResultContract(), uri -> { if (uri != null) { CFileUtils.takeUriPermission(this, uri); binding.pdfView.openPDF(uri); } }); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ViewerPdfSampleActivityBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); binding.pdfView.setViewMode(CPDFReaderView.ViewMode.VIEW); screenStatusManager = new CViewerScreenStatusManager(binding); initToolbarListener(); initSearchBar(); //Extract PDF files from the Android assets folder CExtractAssetFileTask.extract(this, QUICK_START_GUIDE, QUICK_START_GUIDE, (filePath) -> { binding.pdfView.openPDF(filePath); }); resetContextMenu(binding.pdfView, CPreviewMode.Viewer); binding.pdfView.setOnTapMainDocAreaCallback(() -> { screenStatusManager.fillScreenChange(); }); binding.pdfView.getCPdfReaderView().setMinScaleEnable(false); binding.pdfView.getCPdfReaderView().getAnnotImplRegistry().registImpl(CPDFTextAnnotation.class, CPDFtextAnnotImpl.class); registerFormHelper(binding.pdfView); } private void initToolbarListener() { binding.pdfToolBar.addMode(CPreviewMode.Viewer); binding.pdfToolBar.addAction(R.drawable.tools_ic_thumbnail, v -> { CPDFBotaDialogFragment boTaDialogFragment = CPDFBotaDialogFragment.newInstance(); boTaDialogFragment.initWithPDFView(binding.pdfView); CPDFBotaFragmentTabs thumbnailTabs = new CPDFBotaFragmentTabs(CPDFBOTA.THUMBNAIL, getString(R.string.tools_thumbnails)); ArrayList tabs = new ArrayList<>(); tabs.add(thumbnailTabs); boTaDialogFragment.setBotaDialogTabs(tabs); boTaDialogFragment.show(getSupportFragmentManager(), "boTaDialogFragment"); }); binding.pdfToolBar.addAction(R.drawable.tools_ic_search, v -> { binding.pdfToolBar.setVisibility(View.GONE); binding.pdfSearchToolBar.setVisibility(View.VISIBLE); binding.pdfSearchToolBar.showKeyboard(); }); binding.pdfToolBar.addAction(R.drawable.tools_ic_bookmark, v -> { //Show a fragment of the PDF thumbnail and a dialog fragment of the PDF outline list. CPDFBotaDialogFragment boTaDialogFragment = CPDFBotaDialogFragment.newInstance(); boTaDialogFragment.initWithPDFView(binding.pdfView); CPDFBotaFragmentTabs outlineTabs = new CPDFBotaFragmentTabs(CPDFBOTA.OUTLINE, getString(R.string.tools_outlines)); CPDFBotaFragmentTabs bookmarks = new CPDFBotaFragmentTabs(CPDFBOTA.BOOKMARKS, getString(R.string.tools_bookmarks)); ArrayList tabs = new ArrayList<>(); tabs.add(outlineTabs); tabs.add(bookmarks); boTaDialogFragment.setBotaDialogTabs(tabs); boTaDialogFragment.show(getSupportFragmentManager(), "boTaDialogFragment"); }); binding.pdfToolBar.addAction(R.drawable.tools_ic_more, 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 (CPermissionUtil.hasStoragePermissions(this)) { selectDocumentLauncher.launch(null); } else { requestStoragePermissions(); } }); menuWindow.setOnDismissListener(() -> v.setSelected(false)); menuWindow.showAsDropDown(v); }); } private void requestStoragePermissions(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){ CPermissionUtil.openManageAllFileAppSettings(this); }else { multiplePermissionResultLauncher.launch(STORAGE_PERMISSIONS, result -> { if (CPermissionUtil.hasStoragePermissions(this)) { selectDocumentLauncher.launch(null); } }); } } 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); binding.pdfSearchToolBar.showKeyboard(); }); } }