diff --git a/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfUiFragment.kt b/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfUiFragment.kt index 0a28f9e3..ab727ee5 100644 --- a/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfUiFragment.kt +++ b/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfUiFragment.kt @@ -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) + } } \ No newline at end of file diff --git a/ios/Classes/PspdfkitPlatformViewImpl.swift b/ios/Classes/PspdfkitPlatformViewImpl.swift index 38279566..714a7ec5 100644 --- a/ios/Classes/PspdfkitPlatformViewImpl.swift +++ b/ios/Classes/PspdfkitPlatformViewImpl.swift @@ -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)