Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,61 @@ package com.pspdfkit.flutter.pspdfkit
/// UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
/// This notice may not be removed from this file.
///
import android.os.Bundle
import android.view.View
import android.widget.Toast
import com.pspdfkit.document.PdfDocument
import com.pspdfkit.ui.PdfUiFragment
import com.pspdfkit.ui.toolbar.AnnotationEditingToolbar
import com.pspdfkit.ui.toolbar.ContextualToolbar
import com.pspdfkit.ui.toolbar.ContextualToolbarMenuItem
import com.pspdfkit.ui.toolbar.ToolbarCoordinatorLayout

class FlutterPdfUiFragment : PdfUiFragment() {
class FlutterPdfUiFragment : PdfUiFragment(), ToolbarCoordinatorLayout.OnContextualToolbarLifecycleListener {

private lateinit var customTextSelectionAction: ContextualToolbarMenuItem
private val id = View.generateViewId()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Create a custom menu item that will be shown inside the text selection toolbar.
customTextSelectionAction = ContextualToolbarMenuItem.createSingleTextItem(
requireContext(),
id,
ContextualToolbarMenuItem.Position.END
)
}

override fun onDocumentLoaded(document: PdfDocument) {
super.onDocumentLoaded(document)
// Notify the Flutter PSPDFKit plugin that the document has been loaded.
EventDispatcher.getInstance().notifyDocumentLoaded(document)
}

override fun onPrepareContextualToolbar(toolbar: ContextualToolbar<*>) {
if (toolbar is AnnotationEditingToolbar) {
val menuItems = toolbar.getMenuItems()
if (!menuItems.contains(customTextSelectionAction)) {
menuItems.add(customTextSelectionAction)
toolbar.setMenuItems(menuItems)
}
}
}

override fun onDisplayContextualToolbar(toolbar: ContextualToolbar<*>) {
toolbar.setOnMenuItemClickListener { _, menuItem ->
var handled = false
if (menuItem.id == id) {
handled = true
Toast.makeText(
requireContext(), "Custom action triggered!", Toast.LENGTH_SHORT
).show()
}
handled
}
}

override fun onRemoveContextualToolbar(toolbar: ContextualToolbar<*>) {
toolbar.setOnMenuItemClickListener(null)
}
}
14 changes: 14 additions & 0 deletions ios/Classes/PspdfkitPlatformViewImpl.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,20 @@ public class PspdfkitPlatformViewImpl: NSObject, PspdfkitWidgetControllerApi, PD
eventsHelper?.annotationSelected(annotations: annotations)
}

public func pdfViewController(_ sender: PDFViewController, menuForText glyphs: GlyphSequence, onPageView pageView: PDFPageView, appearance: EditMenuAppearance, suggestedMenu: UIMenu) -> UIMenu {
return UIMenu(
title: "Custom Menu",
image: nil,
identifier: nil,
options: .displayInline,
children: [
UIAction(title: "Custom Action", image: nil, identifier: nil, discoverabilityTitle: nil, attributes: [], state: .off, handler: { _ in
print("Custom Action")
})
]
)
}

public func pdfViewController(_ pdfController: PDFViewController, didDeselect annotations: [Annotation], on pageView: PDFPageView) {
// Call the event helper to notify the listeners.
eventsHelper?.annotationDeselected(annotations: annotations)
Expand Down