/**
* 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();
});
}
}